连接到远程仓库时出现Git错误:"主机密钥验证失败"
P粉668113768
2023-08-27 12:34:09
<p>我正在尝试连接到驻留在我的 Web 服务器上的远程 Git 存储库并将其克隆到我的计算机。</p>
<p>我的命令使用以下格式:</p>
<pre class="brush:php;toolbar:false;">git clone ssh://username@domain.example/repository.git</pre>
<p>这对我的大多数团队成员来说效果很好。通常运行此命令后,Git 会提示输入用户密码,然后运行克隆。但是,当在我的一台机器上运行时,出现以下错误:</p>
<blockquote>
<p>主机密钥验证失败。</p>
<p>致命:无法从远程读取
存储库。</p>
</blockquote>
<p>我们没有使用 SSH 密钥连接到此存储库,因此我不确定为什么 Git 会在这台特定计算机上检查密钥。</p>
正如我之前在克隆 git 存储库导致错误 - 主机密钥验证失败。 fatal:远程端意外挂断,将GitHub添加到已知主机列表:
您正在通过 SSH 协议进行连接,如克隆 URL 上的
ssh://
前缀所示。使用 SSH,每个主机都有一个密钥。客户端会记住与特定地址关联的主机密钥,如果主机密钥发生更改,则拒绝连接。这可以防止中间人攻击。domain.example
的主机密钥已更改。 如果您觉得这不可疑,请通过编辑${HOME}/.ssh/known_hosts
删除行,从本地缓存中删除旧密钥domain.example
或让 SSH 实用程序为您完成此操作从这里,您可以自己记录更新的密钥
或者,同等地,让
ssh
在您下次使用git fetch
、git pull
或git 连接时为您完成此操作推送
(甚至是普通的ssh domain.example
),在出现提示时回答“是”出现此提示的原因是
domain.example
删除后不再位于您的known_hosts
中,并且可能不在系统的/etc/ssh/ssh_known_hosts 中
,因此ssh
无法知道连接另一端的主机是否真的是domain.example
。 (如果/etc
中的密钥错误,则具有管理权限的人员将必须更新系统范围的文件。)我强烈建议您考虑让用户也使用密钥进行身份验证。这样,
ssh-agent
可以为了方便而存储密钥材料(而不是每个人都必须在每次连接到服务器时输入密码),并且密码不会通过网络传输。