【问题标题】:shell scripting "expect"ing various responses from sshshell 脚本“期望”来自 ssh 的各种响应
【发布时间】: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"

【问题讨论】:

    标签: linux shell ssh expect


    【解决方案1】:

    一种可能的解决方法是运行 ssh 并将 StrictHostKeyChecking 设置为 no:

    ssh seven -o StrictHostKeyChecking=no
    

    这将自动将未知主机密钥添加到已知主机列表中。

    【讨论】:

    • @generic,对此有一个期望的解决方案(搜索“yes/no exp_continue”),但这是一种更好的方法。
    • 斯帕西博·奥列格,奥亨·布拉戈达伦!谢谢格伦,可能对未来的问题有用。
    猜你喜欢
    • 1970-01-01
    • 2022-10-19
    • 2016-04-13
    • 1970-01-01
    • 2016-06-17
    • 2014-03-06
    • 2022-12-16
    • 2010-12-05
    • 1970-01-01
    相关资源
    最近更新 更多