无论我做什么,StrictHostKeyChecking=ask 都不起作用

无论我做什么,StrictHostKeyChecking=ask 都不起作用

这听起来像是一个新手问题,但在更改主机后我无法登录到我的 ssh 服务器,尽管到处抛出 StrictHostKeyChecking=no 或 StrictHostKeyChecking=ask。

我想要的行为是询问密钥是否匹配,然后能够回答“是”,让 ssh 覆盖已知密钥并继续。我感觉这曾经是默认行为!

  • /etc/ssh/ssh_config 没有 StrictHostKeyChecking(它被注释掉了)。根据手册,默认设置是 ask,这应该是我想要的
  • ~/.ssh/config 没有 StrictHostKeyChecking 配置
  • 我尝试在命令行上设置 StrictHostKeyChecking=ask 和 StrictHostKeyChecking=no,结果令人困惑:

在命令行上使用 StrictHostKeyChecking=ask 时,我从未被询问。我被告知以下内容,并且连接失败:

ECDSA host key for localhost has changed and you have requested strict checking.
Host key verification failed.

在命令行上使用 StrictHostKeyChecking=no 时,连接已建立但瘫痪,并显示:

Password authentication is disabled to avoid man-in-the-middle attacks.
Keyboard-interactive authentication is disabled to avoid man-in-the-middle attacks.
X11 forwarding is disabled to avoid man-in-the-middle attacks.

这没什么乐趣,因为我需要 X 转发。

总结一下 - 仅在命令行上添加选项似乎会产生影响,但仍然没有询问我。在 /etc/ssh/ssh_config 或 ~/.ssh/config 中添加选项没有区别。为什么会这样?是因为我试图使用 X 吗?不,即使禁用了 X,也没有人询问我。是因为某些服务器端配置吗?(sshd)

答案1

您似乎想要的行为从来都不是默认行为,ssh 也从来没有以这种方式行事。

仔细检查手册页中有关 StrictHostKeyChecking 的内容:

如果此标志设置为是的,ssh(1) 永远不会自动将主机密钥添加到〜/.ssh /已知主机文件,并拒绝连接到主机密钥已更改的主机。这提供了最大程度的保护,防止中间人 (MITM) 攻击,尽管当/etc/ssh/ssh_known_hosts文件维护不善或频繁连接到新主机时。此选项强制用户手动添加所有新主机。

如果将此标志设置为“accept-new”,则 ssh 将自动将新主机密钥添加到用户已知主机文件,但不允许连接到主机密钥已更改的主机。如果将此标志设置为“no”或“off”,ssh 将自动将新主机密钥添加到用户已知主机文件,并允许连接到主机密钥已更改的主机,但会受到一些限制。如果将此标志设置为(默认),只有在用户确认这是他们真正想要做的事情后,新的主机密钥才会添加到用户已知主机文件中,并且 ssh 将拒绝连接到主机密钥已更改的主机。在所有情况下,已知主机的主机密钥都将自动验证。

Ask 仅询问主持人是否未知。如果主机已知但密钥不匹配,则会收到有关主机密钥不匹配的错误,并且连接将中止。

如果您出于某种原因故意更改了主机密钥,则在验证新密钥确实正确后,您还需要在本地 known_hosts 文件中更改或删除它。这不是 ssh 会自动执行的操作,因为它会带来极大的安全风险。

相关内容