shell 编写脚本 "expect"ing 来自 ssh 的各种响应
shell scripting "expect"ing various responses from ssh
所以我有一个 shell 脚本,它通过 ssh 进入一台机器,然后使用 expect 通过 expect 传递密码,然后运行一个 matlab 脚本。问题是我想对网络上的所有机器都这样做,如果它是我在要求我输入密码之前没有连接的机器,它会告诉我它无法验证机器,因为我问我是否想要连接并等待 yes\no 响应。
我希望我的 shell 脚本能够处理它只要求输入密码的情况以及它还设法处理 yes\no 的情况。我不知道如何使用 "expect" 执行此操作,因为当它没有收到它期望的内容时它就会挂起。
另外,由于某种原因,在使用我知道我尚未登录的机器进行测试时,我用于处理“是”或“否”响应的附加代码不起作用。这是他们回复的格式。
“无法确定主机 'seven (128.40.41.89)' 的真实性。
RSA 密钥指纹是 d6:9d:d0:61:5f:bb:36:9a:74:2c:f6:b9:a7:79:03:98。
您确定要继续连接 (yes/no) 吗?"
这是我的代码,出于某种原因不适用于我的添加,但仅适用于我在堆栈交换中找到的 "assword:" 位。我可以看到终端并询问 yes\no 问题,但我的脚本没有响应。我猜我在某种程度上使用了 expect 错误,但我不知道如何。
#!/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"
一种可能的解决方法是 运行 将 StrictHostKeyChecking 设置为 no 的 ssh:
ssh seven -o StrictHostKeyChecking=no
这会自动将未知主机密钥添加到已知主机列表中。
所以我有一个 shell 脚本,它通过 ssh 进入一台机器,然后使用 expect 通过 expect 传递密码,然后运行一个 matlab 脚本。问题是我想对网络上的所有机器都这样做,如果它是我在要求我输入密码之前没有连接的机器,它会告诉我它无法验证机器,因为我问我是否想要连接并等待 yes\no 响应。
我希望我的 shell 脚本能够处理它只要求输入密码的情况以及它还设法处理 yes\no 的情况。我不知道如何使用 "expect" 执行此操作,因为当它没有收到它期望的内容时它就会挂起。
另外,由于某种原因,在使用我知道我尚未登录的机器进行测试时,我用于处理“是”或“否”响应的附加代码不起作用。这是他们回复的格式。
“无法确定主机 'seven (128.40.41.89)' 的真实性。 RSA 密钥指纹是 d6:9d:d0:61:5f:bb:36:9a:74:2c:f6:b9:a7:79:03:98。 您确定要继续连接 (yes/no) 吗?"
这是我的代码,出于某种原因不适用于我的添加,但仅适用于我在堆栈交换中找到的 "assword:" 位。我可以看到终端并询问 yes\no 问题,但我的脚本没有响应。我猜我在某种程度上使用了 expect 错误,但我不知道如何。
#!/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"
一种可能的解决方法是 运行 将 StrictHostKeyChecking 设置为 no 的 ssh:
ssh seven -o StrictHostKeyChecking=no
这会自动将未知主机密钥添加到已知主机列表中。