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

Git error: “Host Key Verification Failed” when connecting to remote repository

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

我的命令使用以下格式:

1
git clone ssh://[email protected]/repository.git

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

Host key verification failed.

fatal: Could not read from remote
repository.

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


正如我之前在克隆git repo中回答的那样,这会导致错误-主机密钥验证失败。致命:远程端意外挂断,将GitHub添加到授权主机列表:

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


您正在通过ssh协议进行连接。使用ssh,每个主机都有一个密钥。客户机记住与特定地址关联的主机密钥,如果主机密钥出现更改,则拒绝连接。这可以防止中间人攻击。

domain.com的主机密钥已更改。如果您不觉得可疑,可以使用

1
$ ssh-keygen -R domain.com

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


我也有类似的问题,但是,使用ssh密钥。从上面的Tupy的回答中,我发现问题在于已知主机文件不存在,或者Github.com不在已知主机列表中。以下是我解决问题的步骤-

  • mkdir -p ~/.ssh
  • ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts
  • ssh-keygen -t rsa -C"user.email"
  • 将id_rsa.pub密钥添加到Github配置文件的ssh密钥列表中。

  • 这是因为GitHub当前不在您的已知主机中。

    应该提示您将GitHub添加到已知主机。如果没有发生这种情况,可以运行ssh -T [email protected]再次收到提示。


    对于我来说,我只需要在提示中键入"是",询问"您确定要继续连接吗(是/否)"?而不仅仅是按回车键。


    我在新安装的系统上遇到了同样的问题,但这是一个udev问题。没有/dev/tty节点,所以我必须:

    1
    mknod -m 666 /dev/tty c 5 0


    如果您在办公室内部网(否则很危险),它总是受到防火墙的保护,那么在您的~/.ssh/config中只需要以下几行

    主机*严格钥匙检查否userknownhostsfile=/dev/null


    对于我来说,首先添加新计算机的ssh密钥是有效的,我遵循了gitlab中的这些说明-添加ssh密钥。注意,由于我在Win10上,所以我必须在Windows上的Git-Bash中执行所有这些命令(它在常规的DOS命令shell中不起作用)。

    然后,在Git-Bash中,我必须对我遇到问题的回购进行git clone,在我的情况下,我必须将其克隆到另一个名称,因为我已经在本地拥有它,不想丢失我的承诺。例如

    1
    git clone ssh://git@gitServerUrl/myRepo.git myRepo2

    然后我得到了将其添加到已知主机列表的提示,问题可能是:

    Are you sure you want to continue connecting (yes/no)?

    我输入了"是"并最终成功了,您通常会收到类似这样的消息:

    Warning: Permanently added '[your repo link]' (ECDSA) to the list of known hosts.

    注意:如果您在Windows上,请确保对所有命令都使用git-bash,这在常规的cmd shell或powershell中不起作用,我真的必须在git-bash中这样做。

    最后,我删除了第二个克隆repo(示例中的myRepo2),并返回到我的第一个repo,最终我可以在我最喜欢的编辑器vscode中执行所有类似于normal的Git操作。


    如果您使用的是Git for Windows。

    • 打开Git图形用户界面。
    • 在Git GUI中打开本地Git存储库。
    • 添加遥控器或按(如果遥控器已经存在)。
    • 对于是否要继续的问题,请回答"是"。

    GUI客户机将您的密钥添加到~/.ssh/known_hosts。如果您不经常这样做,并且也避免了使用git命令行(标准的Windows命令行没有ssh-keyscan可执行文件)的需要,则更容易记住这一点。


    这意味着远程主机密钥已更改(可能是主机密码更改)。

    您的终端建议以根用户身份执行此命令

    1
    $ ssh-keygen -f"/root/.ssh/known_hosts" -R [www.website.net]

    您必须从PC/服务器的主机列表中删除该主机名。复制建议的命令并作为根用户执行。

    1
    2
    3
    4
    5
    6
    7
    8
    $ sudo su                                                        // Login as a root user

    $ ssh-keygen -f"/root/.ssh/known_hosts" -R [www.website.net]    // Terminal suggested command execute here
    Host [www.website.net]:4231 found: line 16 type ECDSA
    /root/.ssh/known_hosts updated.
    Original contents retained as /root/.ssh/known_hosts.old

    $ exit                                                           // Exist from root user

    再试一次,希望能成功。


    当被问到:

    Are you sure you want to continue connecting (yes/no)?

    键入yes作为响应

    这就是我解决问题的方法。但是如果你试着按回车键,它就不起作用了!


    在构建期间,当图像公开时,我在dockerfile中遇到了同样的错误。我对dockerfile做了一些修改。

    1
     RUN git clone  https://github.com/kacole2/express-node-mongo-skeleton.git /www/nodejs

    This would be because using the [email protected]:... syntax ends up > using SSH to clone, and inside the container, your private key is not > available. You'll want to use RUN git clone > https://github.com/edenhill/librdkafka.git instead.


    您可以在jenkinsfile中使用"https"url格式的"git url",也可以在任何需要的地方使用。

    git url: 'https://github.com/jglick/simple-maven-project-with-tests.git'


    我也有类似的问题,不幸的是我使用了gitextensions HMI,忘记了我写了一个密码。用HMI…算了吧!生成密钥时不要输入密码!


    当我试图用一种非我的回购方式来兑现时,我收到了这个信息。修复方法是分叉然后克隆。