我正在尝试创建一个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脚本。请协助。感谢
答案 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
发送电子邮件