搜索

首页  >  问答  >  正文

连接到远程仓库时出现Git错误:"主机密钥验证失败"

<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>
P粉668113768P粉668113768459 天前672

全部回复(2)我来回复

  • P粉926174288

    P粉9261742882023-08-28 11:25:55

    正如我之前在克隆 git 存储库导致错误 - 主机密钥验证失败。 fatal:远程端意外挂断,将GitHub添加到已知主机列表:

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

    回复
    0
  • P粉312631645

    P粉3126316452023-08-28 11:08:39

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

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

    ssh-keygen -R domain.example

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

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

    或者,同等地,让 ssh 在您下次使用 git fetchgit pullgit 连接时为您完成此操作推送(甚至是普通的ssh domain.example),在出现提示时回答“是”

    The authenticity of host 'domain.example (a.b.c.d)' can't be established.
    RSA key fingerprint is XX:XX:...:XX.
    Are you sure you want to continue connecting (yes/no)?

    出现此提示的原因是 domain.example 删除后不再位于您的 known_hosts 中,并且可能不在系统的 /etc/ssh/ssh_known_hosts 中,因此ssh无法知道连接另一端的主机是否真的是domain.example。 (如果 /etc 中的密钥错误,则具有管理权限的人员将必须更新系统范围的文件。)

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

    回复
    0
  • 取消回复