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

简介: 本文由喵喵侠撰写,详解Git提交时常见报错“Host key verification failed”的成因与解决方案。当SSH密钥变更或服务器重装系统时,本地记录的主机密钥会失效,导致连接被拒。文章提供三种解决方法:使用`ssh-keygen -R`删除旧密钥、手动编辑`known_hosts`文件,或临时禁用严格检查(不推荐生产环境)。同时强调安全建议:确认服务器状态、核对密钥指纹、启用`VerifyHostKeyDNS`防范中间人攻击。帮助开发者快速定位问题,保障代码提交顺畅。

前言

你好,我是喵喵侠。

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

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

问题出现

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

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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 文件中引发报错的那一行主机记录:

ssh-keygen -R "[ip地址]:Port端口号"
# 示例:ssh-keygen -R "[192.168.201.106]:10086"

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

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

方法二:手动编辑known_hosts文件

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

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

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

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

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

ssh -o StrictHostKeyChecking=no -p 端口号 user@IP地址
# 示例:ssh -o StrictHostKeyChecking=no -p 10086 user@192.168.201.106

安全方面的建议

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

总结

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

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

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

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

目录
相关文章
|
6天前
|
自然语言处理 前端开发 Windows
推荐一款很好用的VSCode变量翻译插件
本文介绍VSCode插件“var-translate-en”,可一键将中文翻译为英文并转为小驼峰等命名格式,支持百度、腾讯、阿里等翻译服务。通过简单配置与快捷键设置,提升变量命名效率,解决命名难题。
117 0
|
前端开发 Android开发
Electron 中 webview 如何与主进程渲染进程进行事件监听通信
Electron 中 webview 如何与主进程渲染进程进行事件监听通信
|
6天前
|
存储 对象存储 Windows
Windows 上值得推荐的软件(第二弹)
本文推荐两款高效实用工具:Pixpin,功能强大且易用的截图贴图软件,支持标注、取色、长图与GIF录制;PicList,便捷的图床管理工具,助力Markdown写作中本地图片云端同步,支持多种存储服务与插件扩展,提升内容创作与分享效率。
48 1
Windows 上值得推荐的软件(第二弹)
|
6天前
|
人工智能 前端开发 Go
前端开发必备的 VSCode 插件推荐(第一期)
本文推荐三款提升前端开发效率的VSCode插件:Live Server实现网页实时预览,Tencent Cloud AI Code Assistant提供智能补全与代码优化,WakaTime记录编程时长。助力开发者高效编码,欢迎交流分享使用心得。
90 0
前端开发必备的 VSCode 插件推荐(第一期)
|
6天前
|
人工智能 前端开发 搜索推荐
前端开发必备的 VSCode 插件推荐(第二期)
本文由喵喵侠推荐三款实用VSCode插件:background自定义编辑器背景、Codeium提供AI智能补全、colorize实现颜色值实时高亮,提升开发效率与视觉体验,适合前端开发者使用。
103 0
|
3天前
|
人工智能 小程序 JavaScript
uni-app微信小程序相机组件二次拍照白屏问题的排查与解决
本文分享了在uni-app开发微信小程序时,因状态管理不当导致拍照后图片不显示的bug排查过程。问题根源在于删除照片时将变量设为“#”(truthy值),导致条件渲染逻辑错误。通过彻底清空相关状态并遵循最佳实践,最终解决问题。
46 2
|
3天前
|
前端开发 JavaScript iOS开发
Volta:一款优秀的前端开发 JavaScript 项目管理器
前端开发者喵喵侠分享使用 Volta 管理 Node.js 版本的实战经验。Volta 可跨平台统一管理 Node、npm、pnpm 等工具版本,支持在 `package.json` 中锁定依赖,实现项目级环境自动切换,尤其解决了 Windows 下 nvm/nvs 的兼容问题,提升团队协作效率。
39 1
|
3天前
|
JavaScript 前端开发 iOS开发
NVS:一款简洁高效的 Node.js 版本管理工具
本文由前端开发者喵喵侠分享,介绍轻量级Node.js版本管理工具nvs的使用方法。涵盖Windows安装、常用命令(如add、link、use、ls、rm)、全局与局部版本切换技巧,并详细说明macOS下卸载nvs的完整步骤。相比nvm,nvs在Windows上体验更稳定,操作简洁高效,适合多项目开发场景。
58 1
|
6天前
|
JavaScript 前端开发 开发者
JavaScript实战:探究数组循环截取的实现技巧
本文介绍如何使用JavaScript实现数组的循环截取功能,适用于视频列表轮播等场景。通过for循环和slice两种方法,每隔固定时间截取4个元素并循环滚动索引,保证无缝衔接。详细讲解实现思路、代码解析及两种方法的优劣对比,帮助开发者提升实际编码能力。
35 1
|
6天前
|
缓存 JavaScript 前端开发
Vue的生命周期详解及业务场景应用
本文详细介绍Vue.js的生命周期概念及各阶段钩子函数的作用,结合实际业务场景讲解如何合理使用created、mounted、updated等钩子进行数据初始化、DOM操作、资源清理等,帮助开发者提升组件管理能力与代码性能。
28 0
Vue的生命周期详解及业务场景应用