解决 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 帮你挡了一次风险。

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

目录
相关文章
|
SQL Oracle 关系型数据库
java往oracle存clob类型的值时,字符长度过长怎么办?
java往oracle存clob类型的值时,字符长度过长怎么办?
1388 1
|
Shell
在Bash中检查变量是否为空的几种方法
在Bash中检查变量是否为空的几种方法
2078 0
在Bash中检查变量是否为空的几种方法
|
SQL Oracle 关系型数据库
【Oracle】玩转Oracle数据库(七):RMAN恢复管理器
【Oracle】玩转Oracle数据库(七):RMAN恢复管理器
678 5
|
4月前
|
安全 网络安全 开发工具
报错解决:git clone git@github.com: Permission denied (publickey)权限拒绝问题
本文详解Git克隆GitHub仓库时出现“Permission denied (publickey)”错误的解决方法。问题源于SSH身份验证失败,常见于未配置SSH密钥或未添加公钥至GitHub。提供两种方案:一是临时使用HTTPS协议克隆,快速便捷;二是长期配置SSH密钥对,一劳永逸。涵盖密钥生成、SSH Agent启动、公钥添加及连接验证全流程,助开发者高效解决问题,提升开发效率。
1491 0
|
Linux 网络安全
【Linux】INFO: attempting to log in with the new key(s), to filter out any that are already...
【Linux】INFO: attempting to log in with the new key(s), to filter out any that are already...
980 0
|
6月前
|
安全 Shell 网络安全
解决Git错误“WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!”的方法
注意,维护安全和遵循最佳实践是处理此类问题的关键。如果对服务器或网络安全性有疑问,请寻求专业的网络管理员或安全专家的帮助。在企业环境中频繁遇到此类问题时应重新评估安全协议和服务器管理流程。
531 10
|
网络安全
出现“Host key verification failed”错误--解决
遇到“Host key verification failed”错误,通常是因为远程主机密钥发生变化,与本地保存的信息不符。这种情况可能是远程主机系统更改或重装等原因导致的。解决方法是根据提示使用`ssh-keygen -f "/root/.ssh/known_hosts" -R "[10.61.0.152]:29022"`命令移除旧的密钥信息,然后重新尝试连接。
3216 5
‘conda‘不是内部或外部命令,也不是可运行的程序或批处理文件。
‘conda‘不是内部或外部命令,也不是可运行的程序或批处理文件。
6174 1
‘conda‘不是内部或外部命令,也不是可运行的程序或批处理文件。
|
Unix Shell 网络安全
git学习六:(bug总结)git@github.com: Permission denied (publickey).等
本文是关于解决在使用Git和GitHub时遇到的“git@github.com: Permission denied (publickey)”错误的指南。文章提供了详细的步骤,包括确认SSH Agent运行状态、检查密钥配置、确保密钥匹配、验证仓库URL、检查权限和代理设置,以及配置SSH文件。这些步骤帮助用户诊断并解决SSH认证问题。
2937 0
|
机器学习/深度学习 PyTorch 算法框架/工具