这感觉像是一个新手问题,但是在更改主机后我无法登录到我的 ssh 服务器嘿,尽管到处乱扔 StrictHostKeyChecking=no 或 StrictHostKeyChecking=ask 。
我想要的行为是被问及密钥不匹配的问题,并且能够说“是”让 ssh 覆盖已知密钥并继续前进。我觉得这曾经是默认行为!
- /etc/ssh/ssh_config 没有 StrictHostKeyChecking(已被注释掉)。按照手册的默认值是询问,这应该是我想要的
- ~/.ssh/config 没有 StrictHostKeyChecking 配置
- 我尝试在命令行上设置 StrictHostKeyChecking=ask 和 StrictHostKeyChecking=no ,结果令人费解:
在 cmdline 上使用 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 转发。
所以总结一下 - 仅在 cmdline 上添加选项似乎有所不同,但我仍然没有被问到。在 /etc/ssh/ssh_config 或 ~/.ssh/config 中添加选项没有区别。为什么是这样?是因为我试图使用 X 吗?不,即使禁用了 X,我也不会被问到。是因为一些服务器端配置吗?(sshd)
您似乎想要的行为从来都不是默认行为,ssh 也没有这种行为。
仔细检查手册页对 StrictHostKeyChecking 的说明:
询问仅询问是否主机未知。如果主机已知且密钥不匹配,则会收到有关主机密钥不匹配的错误,并且连接被中止。
如果您出于某种原因有意更改了主机密钥,则还需要在验证新密钥确实正确后,在本地 known_hosts 文件中更改或删除它。这不是 ssh 将永远自动化的事情,因为它会带来极端的安全风险。