【问题标题】:Using ssh through an expect script on cygwin通过 cygwin 上的期望脚本使用 ssh
【发布时间】:2014-10-14 02:53:09
【问题描述】:

我正在尝试使用将使用密码登录的期望脚本通过 ssh 远程执行命令。到目前为止,我有以下脚本(当然细节有所改变):

#!/usr/bin/expect

spawn ssh user1@cpu3.lab.ie
expect "password:"
send "psw123\r"
expect "$"
send "mkdir pswdtest\r"

我将此脚本命名为testpswd.sh,然后运行chmod +x testpswd.shd2u testpswd.sh./testpswd.sh

显然脚本设法登录,因为我得到了Last login:... 提示。但是,在此之后,脚本似乎要等待一段时间,然后退出 ssh,而不创建一个名为 pswdtest 的目录(我可以稍后检查)。

我已经尝试查找教程等并以我能想到的所有方式更改上面的脚本,例如expect "user1@cpu3:~$"而不是expect "$"等等。

我正在运行 Windows 并使用 cygwin(因此是 d2u),而我正在登录的网络使用 Linux。

有什么想法吗?

【问题讨论】:

  • 在开发期望脚本时,请始终在脚本顶部添加exp_internal 1:期望会显示匹配(或不匹配)的内容。

标签: linux shell ssh cygwin expect


【解决方案1】:

在开发一个expect 脚本时,总是在脚本顶部添加exp_internal 1:expect 会告诉你它匹配(或不匹配)的内容。

也许您可以将提示与此匹配:expect -re {\$\s*$}

在你send某事之后,你应该expect某事

exp_internal 1
set prompt {\$\s*$}
spawn ssh user1@cpu3.lab.ie
expect "password:"
send "psw123\r"
expect -re $prompt
send "mkdir pswdtest\r"
expect -re $prompt
send "exit\r"
expect eof

【讨论】:

  • 感谢您的帮助!运行脚本会在终端中创建一长串我不明白的东西。如果你想看看我把它放在pastie.org/9489548
  • 看起来有效。立即删除 exp_internal 行。
  • 确实如此!我愚蠢地认为它不是因为所有的文字,并没有检查。谢谢!
猜你喜欢
  • 2017-06-11
  • 2013-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-30
  • 2015-11-18
  • 1970-01-01
相关资源
最近更新 更多