通过cygwin上的expect脚本使用ssh

时间:2014-08-20 16:32:17

标签: linux shell ssh cygwin expect

我正在尝试使用将使用密码登录的expect脚本通过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。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

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

也许您可以将提示与此匹配: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