我正在创建一个从主机-A执行以连接到远程主机-b的脚本,在host-b上运行bash脚本(从顶部等生成监控数据),并将输出追加到a主机-A上的文件。虽然我使用ssh进行连接,但我不会使用ssh-key,因为环境中的服务器太多了。
我期待的剧本:
"#!/usr/bin/expect
"#!/usr/bash
set timeout 10
set hostname [sample_hostname]
set user "(sample_user)"
set password "(sample_password)"
spawn ssh $user@$hostname /path/to/bash/script/script.sh | cat >> /tmp/file
expect "Password:"
send "$password\r";
expect "$"
====================================
上面的脚本将bash脚本的输出附加到host-B / tmp / file而不是所需的host-A / tmp / file。如何更改为将脚本附加到host-A而不是host-b?
P.S。
以上手动步骤按要求执行;因此我认为问题在于期待bash。
感谢任何想法!
此致
艾伦
答案 0 :(得分:0)
我假设您正在使用期望/设置方法,因为密码。
我发现另一个名为sshpass的应用程序一旦安装就可以在你的bash中运行这样的命令。
sshpass -p PASSWORDHERE ssh user@hostname /path/to/bash/script/script.sh | cat >> /tmp/file
http://linux.die.net/man/1/sshpass
享受
答案 1 :(得分:0)
如果您的目的是获取该脚本的输出,请按以下方式继续。
#!/usr/bin/expect
set timeout 10
set hostname host
set user dinesh
set password pwd
set script "/home/dinesh/mypgms/demo.sh"
spawn ssh $user@$hostname
expect "password:"
send "$password\r";
expect "\\\$"; # Matching the literal dollar prompt sign of terminal
send "$script\r"
expect -re "\r\n(.*)\\\$"; # Matching the output
# Getting first sub-match as result
puts "\nResult : --->$expect_out(1,string)"
这将输出为
dinesh@dinesh-VirtualBox:~/stackoverflow$ ./alan
spawn ssh dinesh@host
dinesh@host's password:
Last login: Tue Apr 21 13:30:35 2015
[dinesh@ ~]$ /home/dsivaji/mypgms/demo.sh
{\"INFO\":0}\0\r
{\"INFO\":0}\0\r
[dinesh@~]$
Result : --->{\"INFO\":0}\0\r
{\"INFO\":0}\0\r
[dinesh@~]
dinesh@dinesh-VirtualBox:~/stackoverflow$
请注意结果为
{\"INFO\":0}\0\r
{\"INFO\":0}\0\r
[dinesh@~]
由于我们匹配提示符$
,因此它包含到那一点。您也可以根据shell输出自定义正则表达式。