我正在尝试使用将使用密码登录的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.sh
,d2u testpswd.sh
和./testpswd.sh
。
显然,脚本设法登录,因为我收到了Last login:...
提示符。但是,在此之后脚本似乎等待了一段时间然后退出ssh,而没有创建一个名为pswdtest的目录(因为我之后可以检查)。
我试过查找教程等,并以我能想到的各种方式更改上面的脚本,例如expect "user1@cpu3:~$"
代替expect "$"
等等。
我正在运行Windows并使用cygwin(因此d2u
),我登录的网络使用Linux。
有什么想法吗?
答案 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