【发布时间】:2017-03-26 16:55:56
【问题描述】:
所以我有一个 shell 脚本,它通过 ssh 进入一台机器,然后使用 expect 通过 expect 传递一个密码,然后运行一个 matlab 脚本。问题是我想对网络上的所有机器执行此操作,如果它是我在询问我输入密码之前没有连接的机器,它会告诉我它无法对机器进行身份验证,因为它会询问我是否想要连接并等待是\否响应。
我希望我的 shell 脚本能够处理它只要求输入密码以及它还设法处理 yes\no 的情况。我不知道如何用“expect”来做这件事,因为当它没有收到它所期望的东西时它就会挂起。
另外,由于某种原因,在我知道我没有登录的机器上测试它时,我处理 yes no 响应的附加代码不起作用。这是他们回复的格式。
“无法确定宿主‘七(128.40.41.89)’的真实性。 RSA 密钥指纹为 d6:9d:d0:61:5f:bb:36:9a:74:2c:f6:b9:a7:79:03:98。 确定要继续连接(是/否)?”
这是我的代码,由于某种原因不适用于我的添加,但仅适用于我在堆栈交换中找到的“assword:”位。我可以看到终端,它会询问是\否问题,但是我的脚本没有响应。我猜我以某种方式使用了错误的期望,但我不知道如何。
#!/bin/sh
ssh seven
expect "(yes\no)? "
send "yes\r"
expect "assword:"
send "my password goes here\r"
matlab -nodisplay -nojvm -nosplash -nodesktop -r \
"try, run('\path\matlab_script.m'), catch me, fprintf('%s / %s \n',me.identifier,me.message), end, exit"
【问题讨论】: