首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >解决 Host key verification failed 报错的三种方法(含 SSH 安全建议)

解决 Host key verification failed 报错的三种方法(含 SSH 安全建议)

原创
作者头像
喵喵侠
发布2025-07-09 11:08:35
发布2025-07-09 11:08:35
1.3K0
举报

前言

你好,我是喵喵侠。

最近在使用 Git 提交代码的过程中,遇到了一个让人头疼的问题:执行git push时,终端抛出了Host key verification failed. 的报错。这可不是常见的权限问题,而是跟 SSH 的主机验证机制有关。如果你也在用 SSH 协议连接远程仓库,很可能会在某些场景下遇到类似的报错。

我研究了一会儿终于找到了解决办法,今天就把这个过程和几种常见的解决方式整理记录下来,也希望能帮到遇到同样问题的你。

问题出现

我在用VSCode提交代码到公司代码仓库的时候,出现了一个弹窗报错信息,点击详情可以看到命令行里面出现的完整报错如下:

代码语言:Bash
复制
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ED25519 key sent by the remote host is
SHA256:MbUsHjs9NnsyQ3gDCWt/vsljPlzbvhtargirBl8s+y0.
Please contact your system administrator.
Add correct host key in /Users/cooper/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /Users/cooper/.ssh/known_hosts:8
Host key for [192.168.201.106]:10086 has changed and you have requested strict checking.
Host key verification failed.
致命错误:无法读取远程仓库。

请确认您有正确的访问权限并且仓库存在。

可以看到提示是密钥校验失败,无法读取仓库,这个说明权限有问题,下面我来剖析下这个问题的具体原因。

原因解析

当你首次通过 SSH 连接到服务器时,服务器的 SSH 密钥会被记录在您本地的~/.ssh/known_hosts文件里。要是服务器的 SSH 密钥发生了更新(像系统重装、密钥轮换这种情况),或者有攻击者试图进行中间人攻击,就会出现您看到的这个错误。

解决办法

方法一:手动删除有问题的密钥

可以借助以下命令,删除known_hosts 文件中引发报错的那一行主机记录:

代码语言:Markdown
复制
ssh-keygen -R "[ip地址]:Port端口号"

# 示例:ssh-keygen -R "[192.168.201.106]:10086"

执行后,系统会提示该主机条目已被移除。然后你再次连接远程服务器时,系统会提示确认新的主机密钥:

img
img

这时候输入yes或直接回车即可,新的主机密钥就会自动写入known_hosts 文件中,问题就解决了。

方法二:手动编辑known_hosts文件

你也可以直接编辑~/.ssh/known_hosts文件,把文件中以[IP地址]:Port端口号开头的那一行删掉。

再次连接时系统同样会提示你添加新主机密钥。

注意:我这里写的~/.ssh/known_hosts是macOS的路径,如果你是Windows,应该去找C:\Users\<你的用户名>\.ssh\known_hosts这个路径。下面同理。

方法三:临时禁用严格主机密钥检查(不建议长期使用)

如果你确定连接是安全的,可以使用以下命令临时跳过密钥检查:

代码语言:Markdown
复制
ssh -o StrictHostKeyChecking=no -p 端口号 user@IP地址
# 示例:ssh -o StrictHostKeyChecking=no -p 10086 user@192.168.201.106

安全方面的建议

  • 确认服务器状态:您可以联系服务器管理员,确认服务器是否进行了系统更新或者密钥更换操作。
  • 验证指纹:通过其他安全的渠道(例如电话)获取服务器的 SSH 密钥指纹,然后和错误提示中的指纹进行比对。
  • 提高安全级别:在~/.ssh/config文件中添加如下配置,来防止 DNS 欺骗攻击。
代码语言:Markdown
复制
VerifyHostKeyDNS yes

总结

通过本文的介绍,相信你已经掌握了应对 Git 报错Host key verification failed. 的三种实用方法:

  • 删除冲突密钥;
  • 手动编辑known_hosts 文件;
  • 临时跳过校验(仅限测试环境)。

这种报错看似严重,其实只要掌握原理,就能轻松应对。很多开发者第一次看到都以为是仓库或权限出问题,其实就是 SSH 帮你挡了一次风险。

如果你也觉得这篇文章有帮助,记得点赞、收藏、关注支持我哟~你们的支持就是我持续分享的最大动力!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 问题出现
  • 原因解析
  • 解决办法
    • 方法一:手动删除有问题的密钥
    • 方法二:手动编辑known_hosts文件
    • 方法三:临时禁用严格主机密钥检查(不建议长期使用)
  • 安全方面的建议
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档