你好,我是喵喵侠。
最近在使用 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
文件中,问题就解决了。
你也可以直接编辑~/.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/config
文件中添加如下配置,来防止 DNS 欺骗攻击。VerifyHostKeyDNS yes
通过本文的介绍,相信你已经掌握了应对 Git 报错Host key verification failed.
的三种实用方法:
known_hosts
文件;这种报错看似严重,其实只要掌握原理,就能轻松应对。很多开发者第一次看到都以为是仓库或权限出问题,其实就是 SSH 帮你挡了一次风险。
如果你也觉得这篇文章有帮助,记得点赞、收藏、关注支持我哟~你们的支持就是我持续分享的最大动力!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。