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

标签 linux ssh expect send

我希望能够使用 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"

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

当我第一次登录时提示我“是/否”问题时,我通过手动输入"is"来使用我的 SSH key 进行身份验证。然后,在第一次尝试之后,路由器自动提示我输入密码.准确地说,它有两行:

User Authentication
Password:

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

因此,由于我对 Expect 和一般脚本的了解非常有限,我的问题是:这个问题的解决方案是什么?怎么了?

最佳答案

我遇到了这个确切的问题,我无法在 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

关于linux - 在 SSH 连接中使用 Expect 脚本发送密码命令不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33531131/

相关文章:

linux - 防止 ssh 分解 shell 脚本参数

ssh - 使用expect脚本通过SSH发送命令

linux - 在 bash 中使用 expect inside ssh 执行 sudo

linux - 从 Unix 迁移到 powershell,对比 Windows 上的 Cygwin

node.js - NodeJS 子进程在 SIGINT 上终止

ubuntu - Vagrant 间歇性 `Error: cannot open display: localhost:10.0`

ssh - Ansible - 在剧本执行期间更改 SSH 用户

linux - 即使 "expect"不匹配任何东西,是否可以继续执行

linux - Wordpress 更新监控

std::strings 队列通过 JNI 需要 C++ 共享内存吗?