![如果 SSH 远程主机密钥未知,则失败](https://linux22.com/image/1449061/%E5%A6%82%E6%9E%9C%20SSH%20%E8%BF%9C%E7%A8%8B%E4%B8%BB%E6%9C%BA%E5%AF%86%E9%92%A5%E6%9C%AA%E7%9F%A5%EF%BC%8C%E5%88%99%E5%A4%B1%E8%B4%A5.png)
我正在使用一个依赖 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 有关未知或已更改的主机密钥的抱怨。
您可以通过提供适当的主机模式将这些选项限制为一组主机。