在期望脚本中使用两个交互

我试图编写一个通过SSH连接到Linux的脚本,并允许从那里交互控制思科设备; 完成设备控制后,我也想退出shell。

我有SSH密钥,不需要密码来连接。 go下面的代码是一个Bash脚本,通过SSH / Telnet连接到目标设备。

我到目前为止所做的是:

 #!/usr/bin/expect set arg1 [lindex $argv 0] spawn ssh -p 24 my_username@my_linux.domain.com expect "#" send "go $arg1 \n" expect "sername:" send "my_username\n" expect "assword:" send "my_password\n" interact expect "root@my_linux:~#" send "logout\n" expect "my_username@my_linux:~ $" send "logout\n" interact 

我退出shell时出现的错误是:

 Connection to my_linux.domain.com closed. expect: spawn id exp4 not open while executing "expect "root@my_linux:~#"" (file "./aaa" line 11) 

我已经解决了这个问题:

 #!/usr/bin/expect set timeout -1 set arg1 [lindex $argv 0] spawn ssh -p 24 my_username@my_linux.domain.com expect "#" send "go $arg1 \n" expect "sername:" send "my_username\n" expect "assword:" send "my_password\n" expect "#" interact timeout 5 return send "\n" expect "root@my_linux:~#" send "exit\n exit\n" interact 

说明:我添加了几行:

 # This prevents commands from timing out (default timeout is 10 seconds). set timeout -1 # When I type something, the timeout is ignored, but when I'm not typing, # it waits 5 seconds and then continues. interact timeout 5 return send "\n" expect "root@my_linux:~#" send "exit\n exit\n" 

希望能帮助任何人