SSH/Expect“expect”在expect shell脚本中是如何工作的?

vulvrdjw  于 2022-11-16  发布在  Shell
关注(0)|答案(1)|浏览(151)

我尝试使用ssh remote login和expect。它可以工作,但是有些输出不是预期的,我不知道为什么。这是我的shell脚本:

#!/bin/sh
expect -c ' spawn ssh USER@ADDRESS ; 
            expect "?assword:" ; 
            send "MyPassword\r" ;
            expect "?" ;
            send "logout\r" ; 
            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$

第一个问题是为什么在“Password:“后面有一个“logout”输出?问号不是代表任何单个字符吗?是否有任何隐式输出或模式我没有看到,因为我在“Password:“后面什么也看不到。(同样奇怪的是,当我将“?”替换为“*"时,“Password:“后面什么也不会输出,自动注销也失败了。)当我登录时,可以问同样的问题,因为我也只看到“logout”输出。
第二个问题是为什么输出了两个“logout”,我认为只有添加了“except continue”才能重用except参数。
谁能给我解释一下发生了什么事。谢谢!

zrfyljdw

zrfyljdw1#

作为登录过程的一部分,在“密码:提示符后,输入密码并按Enter键,然后登录过程会打印一个换行符。该换行符是与“?"匹配的字符。
将“?”更改为“*”效果更好:星号可能更贪婪。2它不是只匹配一个字符,而是匹配一个或多个字符,所以它会尽可能多地收集。
为什么会出现两个“logout“?我不知道。也许你的shell在显示提示后重新打印了用户输入。

相关问题