SSH/期望"expect"如何在期望外壳脚本中工作?



我尝试使用带有expect的ssh远程登录。它是有效的,但有些输出是不期望的,我不知道为什么。这是我的shell脚本:

#!/bin/sh
expect -c ' spawn ssh USER@ADDRESS ; 
expect "?assword:" ; 
send "MyPasswordr" ;
expect "?" ;
send "logoutr" ; 
interact'

这是我的MacOS终端中的输出:

ip87-114:Downloads tasiyuchien$ ./test.sh 
spawn ssh USER@ADDRESS
Password:
logout
Last login: Tue Sep 13 18:17:21 2022 from ADDRESS
xdn42o221:~ USER$ logout
Connection to ADDRESS closed.
ip87-114:Downloads tasiyuchien$ 

第一个问题是;注销";在"0"之后输出;密码:"?问号不是代表任何一个字符吗?是否有任何我看不到的隐含输出或模式,因为在";密码:"。(同样奇怪的是,当我将"?"替换为"*"时,在"密码:"之后什么都不会输出,自动注销也失败了。(当我登录时,也会问同样的问题,因为我也只看到"*";注销";输出。

第二个问题是为什么有两个";注销";输出时,我认为except参数只能在";除了继续";添加。

有人能向我解释一下发生了什么事吗。谢谢

作为登录过程的一部分,在显示Password:提示后,输入密码并点击enter,然后登录过程将打印一条新行。这个换行符是由"?"匹配的字符&";。

正在更改"quot;至"*"效果更好:星号可能更贪婪。它不是只匹配一个字符,而是匹配一个或多个字符,因此它将尝试收集尽可能多的字符。

为什么两个";注销";s出现了吗?我不知道。也许您的shell在显示提示后会重新打印用户输入。。

最新更新