如果 SSH 远程主机密钥未知,则失败

如果 SSH 远程主机密钥未知,则失败

我正在使用一个依赖 ssh 连接到远程主机的工具。不幸的是,此工具不接受用户输入,当远程主机密钥未知时,调用将永远挂起。当远程主机密钥未知时,是否有一个选项或一组选项使 ssh 调用失败?

答案1

用于-o StrictHostKeyChecking=yes调用ssh

如果此标志设置为是,ssh(1)将永远不会自动将主机密钥添加到~/.ssh/known_hosts文件中,并且拒绝连接到主机密钥已更改的主机。

默认值是ask,这就是您遇到问题的原因:

如果此标志设置为询问(默认),则仅在用户确认他们真正想要做什么之后,新的主机密钥才会被添加到用户已知的主机文件中,并且 ssh 将拒绝连接到主机密钥已更改的主机。

答案2

作为一种解决方法,你可以自己检查主机是否可信:

$ ssh-keygen -H -F host.example.com
# Host host.example.com found: line 205 type RSA
...

请注意,无论如何,ssh-keygen 都会以 0 退出,因此您必须检查输出:

ssh-keygen -H -F host.example.com |
   grep -q found: || echo "host is not trusted" && exit 2

答案3

您可以-oBatchMode=yes在需要用户交互的地方使用失败(例如,要求输入密码、检查远程主机密钥等)

答案4

您可以在 ~/.ssh/config 中添加默认选项,例如:

Host *
    StrictHostKeyChecking no

这将禁用 ssh 有关未知或已更改的主机密钥的抱怨。

您可以通过提供适当的主机模式将这些选项限制为一组主机。

相关内容