期望脚本在远程服务器中运行shell脚本

时间:2015-03-25 19:35:58

标签: expect

我正在尝试创建一个expect脚本来执行带有远程服务器中的参数的shell脚本,但是脚本没有被执行,而是在远程服务器中返回$ prompt。这是脚本

#!/usr/bin/expect
spawn ssh username@servername
expect "password:"
send "abc\r"
expect "$ "
send "cd /home/abc\r"
send "./script.sh --status arg1 arg2\r"

- 此处脚本位于home / abc目录中,shell脚本./script需要使用参数--status arg1 arg2执行。此外,我需要将./script.sh --status arg1 arg2的内容保存在文件中并通过电子邮件发送。 mailx命令可以在expect脚本中运行,或者我需要从另一个shell脚本调用此expect脚本。请协助。感谢

1 个答案:

答案 0 :(得分:0)

尝试快速且有风险的事情:

#!/usr/bin/expect -f
set password your_password
set timeout 100

spawn scp -q /home/abc/script.sh username@server:/tmp
expect  {
"(yes/no)?"          {send "yes\r"; exp_continue}
"password:"          {send "$password\r"; exp_continue}
"lost connection"    {puts "ERROR: lost connection"}
"No route to host"   {puts "ERROR: no route to host"}
timeout              {puts "ERROR: timeout"}
}

spawn ssh username@server
expect  {
 "(yes/no)?"              {send "yes\r"; exp_continue}
 "password:"              {send "$password\r"; exp_continue}
 "username@server"        {send "sh /tmp/script.sh; exit\r";exp_continue }
 "password for username:" {send "$password\r"; exp_continue}
 "password:"              {send "$password\r"; exp_continue}
 "lost connection"        {puts "ERROR: lost connection"}
 "No route to host"       {puts "ERROR: no route to host"}
 timeout                  {puts "ERROR: timeout"}
 }

变量password放在那里自动运行脚本。 您还可以看到"$password\r"作为设置变量的参考。

spawn scp -q /home/abc/script.sh username@server:/tmp将您的脚本复制到远程服务器中的/ tmp。 -q标志禁用进度表。

spawn ssh username@server连接到您的服务器。 sh /tmp/script.sh运行在上一步中复制的脚本。

另外,我使用mutt

发送电子邮件