在SSH连接中使用Expect脚本发送密码命令不起作用

4

我希望能够使用一个Expect脚本通过SSH连接远程登录到路由器,以下是我的脚本:

#!/usr/bin/expect
set host "192.168.1.50"
set user "root"
set password "mypass"
spawn ssh "$user\@host"
expect "word:"
send "$password\r"

当我尝试使用它时,路由器变得无响应(可能超时)。 当它进入密码提示行时,它立即退回。

我使用SSH密钥进行身份验证,第一次登录时手动键入“是”以回答“是/否”问题。 然后,在第一次尝试后,路由器会自动提示我输入密码。 具体来说,它有两行:

User Authentication
Password:

几秒钟后,它回到我的根目录,好像发送命令在密码提示后没有发送任何内容。

因此,我的问题是:我对Expect和脚本编写的了解非常有限,解决方法是什么?出了什么问题?


3
发送后,添加一行“interact”,这样您就可以重新获得控制权。如果这不起作用,请使用“expect -d”运行以查看调试输出。 - glenn jackman
它可以工作了,非常感谢。 - randomguy43
1个回答

3
我曾经也遇到过这个问题,即无法“接手”expect的工作,我原本以为这将是默认行为。
正如@glennjackman在评论中所说,添加interact可以让你接手它留下的工作。
#!/usr/bin/expect
set host "192.168.1.50"
set user "root"
set password "mypass"
spawn ssh "$user\@host"
expect "word:"
send "$password\r"
interact

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接