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

我使用以下格式的命令:

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

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

主机密钥验证失败。 致命的:无法从远程读取 存储库。

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


当前回答

原因似乎是远程主机的公钥没有存储或与存储的公钥不同。(注意安全问题,详见Greg Bacon的回答。)

在这种情况下,我习惯了git克隆提示:

The authenticity of host 'host.net (10.0.0.42)' can't be established.
ECDSA key fingerprint is 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00.
Are you sure you want to continue connecting (yes/no)?

不确定,为什么会抛出这个错误。可以是shell的配置,也可以是git SSH命令。 无论如何,您可以通过运行ssh user@host.net得到相同的提示。

其他回答

还要检查known_hosts文件的权限——包括用户的(~/.ssh/known_hosts)和全局的(/etc/ssh/ssh_known_hosts)。

在我的例子中,旧主机在/etc/ssh/ssh_known_hosts中。当我用sudo ssh-keygen -f /etc/ssh/ssh_known_hosts -R THE_HOST将其作为根删除时,它将该文件的权限更改为0600,因此SSHing到THE_HOST作为根工作,但对于任何其他用户来说,它失败了“主机密钥验证失败”。解决方案是:

sudo chmod 644 /etc/ssh/ssh_known_hosts

对Tupy的回答做一个小小的补充,您可能需要添加存储库主机的端口号:

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

如果您有另一台具有远程访问权限的计算机,您可以通过查看~/.ssh/known_hosts找到端口号:

[user]$ less ~/.ssh/known_hosts
[domain.example]:8888,[000.00.000.000]:8888 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCi...

我有类似的问题,但是,使用SSH密钥。从上面Tupy的回答中,我发现问题是known_hosts文件不存在或github.com不存在于已知主机列表中。下面是我解决这个问题的方法

Mkdir -p ~/.ssh Ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts . sh ssh -t rsa -C "user.email" 使用命令$ cat ~/.ssh/id_rsa打开公钥。酒吧和复制它。 添加id_rsa. conf文件。你的GitHub配置文件上的SSH密钥列表。

这是因为github目前不在你的已知主机。

应该会提示您将github添加到已知主机。如果没有出现这种情况,您可以运行ssh -T git@github.com再次接收提示。

在构建期间,我在DockerFile内部也遇到了同样的错误,而映像是公共的。我在Dockerfile中做了一些修改。

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

这是因为使用git@github.com:…语法最终使用SSH克隆为>,并且在容器中,您的私钥不可用>。你应该使用RUN git克隆> https://github.com/edenhill/librdkafka.git。