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

Posted

技术标签:

【中文标题】在 SSH 连接中使用 Expect 脚本发送密码命令不起作用【英文标题】:Send command for password doesn't work using Expect script in SSH connection 【发布时间】:2016-02-05 11:52:56 【问题描述】:

我希望能够使用 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 和脚本的一般知识非常有限,我的问题是:解决方案是什么?出了什么问题?

【问题讨论】:

发送后,添加interact 行,以便您重新获得控制权。如果这不能解决问题,请使用 expect -d 运行以查看调试输出。 成功了,非常感谢。 【参考方案1】:

我遇到了这个确切的问题,我无法“接听”expect 停止的地方,我认为这将是默认行为。

正如 @glennjackman 在 cmets 中所说,在末尾添加 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

【讨论】:

以上是关于在 SSH 连接中使用 Expect 脚本发送密码命令不起作用的主要内容,如果未能解决你的问题,请参考以下文章

在 bash 脚本中为 ssh 命令提供密码,无需使用公钥和 Expect

SSH使用expect实现密码交互脚本

使用expect实现ssh免密码登陆

Linux之expect非交互式功能

linux下expect命令实现批量ssh免密

Centos ssh和scp利用expect自动填充密码