小编典典

Git错误:连接到远程存储库时“主机密钥验证失败”

all

我正在尝试连接到位于我的 Web 服务器上的远程 Git 存储库并将其克隆到我的机器上。

我的命令使用以下格式:

git clone ssh://username@domain.com/repository.git

这对我的大多数团队成员来说都很好。通常运行此命令后,Git 会提示输入用户密码,然后运行克隆。但是,在我的一台机器上运行时,出现以下错误:

主机密钥验证失败。

致命:无法从远程存储库中读取。

我们没有使用 SSH 密钥连接到这个存储库,所以我不确定 Git 为什么要在这台特定的机器上检查一个。


阅读 220

收藏
2022-03-29

共1个答案

小编典典

您正在通过 SSH 协议进行连接,如ssh://克隆 URL 上的前缀所示。使用
SSH,每个主机都有一个密钥。客户端记住与特定地址相关联的主机密钥,如果主机密钥出现变化,则拒绝连接。这可以防止中间人攻击。

domain.com 的主机密钥已更改。 如果这对您来说并不可疑,请${HOME}/.ssh/known_hosts通过编辑以删除
domain.com 的行或让 SSH 实用程序为您执行此操作,从而从本地缓存中删除旧密钥。

ssh-keygen -R domain.com

从这里,您可以自己记录更新的密钥

ssh-keyscan -t rsa domain.com >> ~/.ssh/known_hosts

或者,等价地,ssh下次您连接git fetch, git pull, 或git push(甚至是普通的 ol’ ssh domain.com)时,请在提示时回答“是”,为您执行此操作

无法确定主机“domain.com (abcd)”的真实性。
RSA 密钥指纹为 XX:XX:...:XX。
您确定要继续连接(是/否)?

known_hosts出现这个提示的原因是你删除后domain.com不在了,估计系统里也没有了/etc/ssh/ssh_known_hosts,所以ssh无法知道连接另一端的主机是否真的是domain.com。(如果
中的键不正确/etc,则具有管理权限的人将不得不更新系统范围的文件。)

我强烈建议您考虑让用户也使用密钥进行身份验证。这样,ssh- agent可以方便地存储密钥材料(而不是每个人都必须为每次连接服务器输入密码),并且密码不会通过网络传输。

2022-03-29