Linux 通过cygwin上的expect脚本使用ssh

Linux 通过cygwin上的expect脚本使用ssh,linux,shell,ssh,cygwin,expect,Linux,Shell,Ssh,Cygwin,Expect,我正在尝试使用expect脚本通过ssh远程执行命令,该脚本将使用密码登录。到目前为止,我有以下脚本(细节当然会更改): 我将这个脚本命名为testpswd.sh,然后运行chmod+x testpswd.sh,d2u testpswd.sh和/testpswd.sh 显然,脚本成功登录是因为我得到了上次登录:…提示。但是,在此之后,脚本似乎要等待一段时间,然后退出ssh,而不创建名为pswdtest的目录(我可以在后面检查) 我曾尝试查找教程等,并以我能想到的所有方式更改上面的脚本,例如exp

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

我将这个脚本命名为
testpswd.sh
,然后运行
chmod+x testpswd.sh
d2u testpswd.sh
/testpswd.sh

显然,脚本成功登录是因为我得到了
上次登录:…
提示。但是,在此之后,脚本似乎要等待一段时间,然后退出ssh,而不创建名为pswdtest的目录(我可以在后面检查)

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

我正在运行windows并使用cygwin(因此使用了
d2u
),我登录的网络使用Linux


有什么想法吗?

在开发expect脚本时,始终在脚本顶部添加
exp\u internal 1
:expect将显示它匹配(或不匹配)的内容

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

在你
发送
某物之后,你应该
期待
某物

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

在开发expect脚本时,请始终在脚本顶部添加
exp_internal 1
:expect将向您显示其匹配(或不匹配)的内容。感谢您的帮助!运行脚本在终端中创建了一长串我不理解的东西。。如果你想看一看,我就把它放在上面,看起来很管用。现在删除
exp\u internal
行。确实如此!我愚蠢地认为它没有,因为所有的文字,并没有检查。谢谢
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