我想编写一个Expect脚本,该脚本应首先登录到Linux机器m1,然后在m1内应登录到机器m2。然后在m2中,我必须运行一些命令。
我尝试使用以下脚本,但是在这里此期望脚本仅运行命令“ spawn ssh -X root @ $ m2”。然后,它将终止,而无需运行命令cmd1和cmd2。
/usr/bin/expect <<EOF
set timeout -1
spawn ssh -X root@$m1
expect "assword:"
send "m1Password\r"
expect "#"
spawn ssh -X root@$m2
#Not given password here because the second machine doesn't ask for a password when logged in via m1.
send "cmd1\r"
expect "Cmd1 Res"
send "cmd2\r"
expect "Cmd2 Res"
EOF
如何改进此脚本,以便此期望脚本可以运行命令cmd1和cmd2?
您要ssh
在已经打开的与机器m1的连接中运行第二个连接,因此您不需要第二个spawn
连接,因为这将尝试从本地计算机打开新连接。因此spawn
,使用第二个send
命令而不是第二个命令,可以在m1上运行ssh命令,然后expect
在发送命令之前用于在m2上等待提示:
send "ssh -X root@$m2"
expect "#"
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句