rou*_*ble 1 linux ssh automation tcl expect
我想自动化 ssh 登录。经过一些研究,似乎 tcl/expect 是要走的路线。
但是,我的问题是,当交互接管我的终端时,东西不能按预期工作(不是故意的)。
例如,如果我调整终端的大小,它不会“占用”。此外,有时交互没有响应,有时它只是无缘无故地挂起。我在下面包含了我的代码。我对代码的问题是,我错过了什么吗?
另外,有没有更好的方法来做到这一点(使用另一种脚本语言?)我需要终端非常敏感,这与我在控制台上手动输入 ssh 没有什么不同。
proc Login {username server password} {
set prompt "(%|>|\#|\\\$) $"
spawn /usr/bin/ssh $username@$server
expect {
-re "Are you sure you want to continue connecting (yes/no)?" {
exp_send "yes\r"
exp_continue
#continue to match statements within this expect {}
}
-nocase "password: " {
exp_send "$password\r"
interact
}
}
}
Run Code Online (Sandbox Code Playgroud)
您提出的有关“交互”的问题没有注意到窗口已更改大小,因为默认情况下,交互仅监视字符流。调整窗口大小时,会发出 WINCH 信号。默认情况下,Expect 具有,呃,默认操作,即忽略它。您应该使用 Expect 的 trap 命令来捕获 SIGWINCH。然后你可以做你想做的 - 例如,将新大小传播到另一边或采取其他一些本地操作。
您可以在 Expect 的示例脚本中找到执行此操作的示例。并且在Expect 书中有关于如何处理SIGWINCH 的解释和示例。
| 归档时间: |
|
| 查看次数: |
5263 次 |
| 最近记录: |