【问题标题】:bash script to verify the ssh public key isn't requested不需要验证 ssh 公钥的 bash 脚本
【发布时间】:2019-09-14 02:09:23
【问题描述】:

我想从我的 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 key problem”并退出脚本。如果这不可能,也许我可以对上述回答是,然后让脚本检查 known_hosts 和错误,如果它在那里?

【问题讨论】:

    标签: linux bash ssh


    【解决方案1】:

    您可以避免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 确保无论用户当前的语言设置如何,您都会获得默认的英文错误消息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-11
      • 1970-01-01
      • 2011-01-10
      • 1970-01-01
      • 2015-10-20
      • 2013-05-31
      • 2011-04-10
      • 1970-01-01
      相关资源
      最近更新 更多