前言
你好,我是喵喵侠。
最近在使用 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 帮你挡了一次风险。
如果你也觉得这篇文章有帮助,记得点赞、收藏、关注支持我哟~你们的支持就是我持续分享的最大动力!