我正在构建一个简单的 ssh 登录包装工具来帮助自动登录到众多服务器中的一个。
它首先从用户输入中获取描述,然后提取相应的(最相关的)服务器 IP 和安全存储在某处的密码,并使用它创建一段期望脚本。
期望脚本看起来像这样:
spawn ssh2 -q -t Bob@172.23.24.35 预计 { "assword:" {发送 "Bob123\r"} } 相互影响
当我通过管道将其传递给期望(期望可以从标准输入读取脚本)时,一切都很顺利,直到它达到“交互”。期望声称它接收到 eof 并立即终止。然后我将它存储到一个文件中说 tmp.exp 时发生同样的问题我做“expect < tmp.exp”。但是当我执行“expect -f tmp.exp”时,一切正常。
我认为原因是“交互”从 fd0 获取输入,该输入被我的程序(或 shell)重定向到管道。这是否意味着当我执行“expect < xx.exp”之类的操作时不能使用交互?有没有办法在“交互”命令之前将 fd0 恢复到真实终端?我用谷歌搜索了很多,我得到的只是'close_on_eof 0'之类的东西。我找不到它的含义,也找不到它是如何工作的。提前致谢!