bash脚本来验证是否未请求ssh公钥

时间:2019-09-14 02:09:23

标签: linux bash ssh

我想从我的bash脚本ssh到一个ip,如果它要求我将公钥添加到known_hosts文件中,我想打印一条消息并退出该脚本。另外,我不想检查我的known_hosts文件,因为我正在使用IDM,因此密钥不会在known_hosts中。我尝试将其作为快速测试,但似乎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密钥问题”并退出脚本。如果那不可能,也许我可以对上述回答是,然后让脚本检查known_hosts,如果脚本在其中,则报错?

1 个答案:

答案 0 :(得分:0)

您可以避免sshssh -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确保您获得默认的英语错误消息,而与用户当前的语言设置无关。