SSH 报 Host key verification failed,但密钥和服务器都没问题:一次家目录错位排查
【摘要】 现象一台机器上用 SSH 连一台早就连通过、指纹也核对过的服务器,突然报 Host key verification failed,拒绝连接。服务器没重装、没换密钥,本地私钥也没动,第一反应往往是怀疑服务器被中间人替换了——但这次不是。 排查过程先确认报错的到底是哪一步:ssh -v 看详细日志,确认失败发生在 host key 校验阶段,而不是密码或密钥认证阶段。检查本机 ~/.ssh/...
现象
一台机器上用 SSH 连一台早就连通过、指纹也核对过的服务器,突然报 Host key verification failed,拒绝连接。服务器没重装、没换密钥,本地私钥也没动,第一反应往往是怀疑服务器被中间人替换了——但这次不是。
排查过程
先确认报错的到底是哪一步:
ssh -v看详细日志,确认失败发生在 host key 校验阶段,而不是密码或密钥认证阶段。- 检查本机
~/.ssh/known_hosts里有没有这台服务器的记录——结果发现,当前 shell 展开的~并不指向存放 known_hosts 的那个家目录。 - 根因就藏在这里: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)