SSH 报 Host key verification failed,但密钥和服务器都没问题:一次家目录错位排查

举报
yd_277098636 发表于 2026/11/05 08:14:21 2026/11/05
【摘要】 现象一台机器上用 SSH 连一台早就连通过、指纹也核对过的服务器,突然报 Host key verification failed,拒绝连接。服务器没重装、没换密钥,本地私钥也没动,第一反应往往是怀疑服务器被中间人替换了——但这次不是。 排查过程先确认报错的到底是哪一步:ssh -v 看详细日志,确认失败发生在 host key 校验阶段,而不是密码或密钥认证阶段。检查本机 ~/.ssh/...

现象

一台机器上用 SSH 连一台早就连通过、指纹也核对过的服务器,突然报 Host key verification failed,拒绝连接。服务器没重装、没换密钥,本地私钥也没动,第一反应往往是怀疑服务器被中间人替换了——但这次不是。

排查过程

先确认报错的到底是哪一步:

  1. ssh -v 看详细日志,确认失败发生在 host key 校验阶段,而不是密码或密钥认证阶段。
  2. 检查本机 ~/.ssh/known_hosts 里有没有这台服务器的记录——结果发现,当前 shell 展开的 ~ 并不指向存放 known_hosts 的那个家目录。
  3. 根因就藏在这里:SSH 默认按 passwd 记录的家目录找 known_hosts,而不是按当前环境变量或工作目录推断。如果实际使用的用户家目录与 passwd 里的不一致(例如容器、切换用户、或家目录被改过路径后),SSH 读到的就是一份没有该主机记录的 known_hosts,于是按“未知主机”处理,直接拒绝。
    验证方法很直接:显式指定 known_hosts 文件再连一次——
ssh -o UserKnownHostsFile=/home/hatch/.ssh/known_hosts user@host

如果这次能连上,且指纹与此前核对过的一致,就说明问题出在文件路径,而不是服务器身份。

教训

  • Host key verification failed 不等于服务器有问题,先分清是“主机未知”还是“指纹变了”:前者多半是 known_hosts 文件没读对,后者才值得警惕。
  • 不要一上来就加 StrictHostKeyChecking=no 绕过去,那等于把校验关掉;先用 -o UserKnownHostsFile= 定位到正确的已知主机文件。
  • 多用户、多家目录混用的机器上,把 known_hosts 的实际路径写进运维笔记,而不是默认 ~/.ssh/known_hosts 一定是对的。

一句话总结

SSH 校验主机身份时认的是 passwd 家目录下的 known_hosts,家目录错位会让一台老服务器看起来像陌生服务器;显式指定文件路径,是最快区分“路径问题”与“身份问题”的办法。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。