我想从我的BASH脚本的SSH到IP,如果它要求我把公钥添加到NoNyHOST文件,我想打印一个消息并退出脚本。另外,我不想检查我的已知主机文件,因为我正在使用IDM,所以密钥不会在已知主机中。我试过这个作为一个快速测试,但是ssh似乎接管了它,因为它不包括输入:

    #!/bin/bash

if ssh localhost | grep -q 'authenticity'; then
   echo "matched"
fi

这是我当前得到的输出:
[root@host ~]# sh test.sh
The authenticity of host 'localhost (::1)' can't be established.
ECDSA key fingerprint is SHA256:Nw91ZidjeQLA2/pEGoLpk1lRxk22arS9/xQNTU6gck8.
ECDSA key fingerprint is MD5:d7:f0:66:9c:93:2b:2d:64:34:06:ad:c4:1d:8c:c2:a2.
Are you sure you want to continue connecting (yes/no)?

我想要的是,如果发生上述情况,回答“否”,打印“SSH密钥问题”并退出脚本。如果这是不可能的,也许我可以回答是以上,然后让脚本检查已知的主机和错误,如果它在那里?

最佳答案

使用ssh可以避免ssh -o BatchMode=yes yourhost要求这些东西
然后,您将发现——并且您已经可以从输出中看到——grep不适用于错误消息(请参见this post关于这一点)。
如果要检查登录是否成功,可以考虑执行以下操作:

if ssh -o BatchMode=yes your.host.name true
then
  echo "Successful login"
fi

如果您特别想检查主机密钥验证:
if LC_ALL=C ssh -o BatchMode=yes your.host.name true 2>&1 | grep -q "Host key verification failed"
then
  echo "Invalid host key"
fi

2>&1确保grep错误消息,LC_ALL=C确保无论用户当前的语言设置如何,都能获得默认的英语错误消息。

关于linux - bash脚本来验证不要求ssh公钥,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57931952/

10-12 14:25
查看更多