我正在尝试编写一个脚本,该脚本通过SSH连接到Linux设备,并允许从那里对思科设备进行交互式控制;在我完成控制设备后,我也想退出shell。
我有 SSH 密钥,不需要密码即可连接。 下面的代码go
是一个通过SSH/Telnet连接到目标设备的Bash脚本。
到目前为止,我所做的是:
#!/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_usernamen"
expect "assword:"
send "my_passwordn"
interact
expect "root@my_linux:~#"
send "logoutn"
expect "my_username@my_linux:~ $"
send "logoutn"
interact
退出外壳时出现的错误是:
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_usernamen"
expect "assword:"
send "my_passwordn"
expect "#"
interact timeout 5 return
send "n"
expect "root@my_linux:~#"
send "exitn exitn"
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 "exitn exitn"