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

我使用以下格式的命令:

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

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

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

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


当前回答

对我来说有用的是首先添加我的新计算机的SSH密钥,我遵循GitLab的这些说明-添加SSH密钥。注意,因为我在Win10上,我必须在Windows上的Git Bash中执行所有这些命令(它在常规DOS cmd Shell中不起作用)。

然后再次在Git Bash中,我必须对我有问题的回购做一个Git克隆,在我的情况下,我必须将它克隆到一个不同的名称,因为我已经在本地拥有它,不想失去我的提交。例如

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

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

您确定要继续连接(是/否)?

我输入了“yes”,它最终工作了,你通常会得到类似这样的消息:

警告:永久添加'[您的回购链接]' (ECDSA)到已知主机列表。

注意:如果你是在Windows上,确保你使用Git Bash来执行所有命令,这在常规的cmd shell或powershell中不起作用,我真的不得不在Git Bash中这样做。

最后,我删除了第二个克隆repo (myRepo2在例子中),回到我的第一个repo,我终于可以在我最喜欢的编辑器VSCode中做所有Git的东西。

其他回答

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

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

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

mknod -m 666 /dev/tty c 5 0

如果您不使用Windows Session来更新代码,而使用PortableGit,则需要在运行git命令之前设置HOMEPATH环境变量。

这个例子更适合其他用例,但我认为它是本文的一个很好的概念证明。

$env:HOMEPATH="\Users\Administrator";C:\path\to\PortableGit\bin\git.exe -C:\path\to\repository;git拉动”

我有类似的问题,不幸的是,我使用GitExtensions HMI,忘记了我写了一个密码短语。 与人机界面……算了吧!生成密钥时不要输入密码短语!

原因似乎是远程主机的公钥没有存储或与存储的公钥不同。(注意安全问题,详见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得到相同的提示。