我正在尝试连接到驻留在我的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的东西。

其他回答

另一种替代方法也适用于我,而不是克隆SSH链接

git@gitlab.company.net:upendra/mycode.git

有一个选项可以选择HTTP链接

http://gitlab.company.net:8888/upendra/mycode.git

所以我使用http链接克隆为Visual studio,它为我工作

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

mknod -m 666 /dev/tty c 5 0

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

域的主机密钥。例子变了。如果这对您来说不可疑,可以通过编辑${HOME}/从本地缓存中删除旧密钥。Ssh /known_hosts删除域行。示例或让SSH实用程序为您完成

ssh-keygen -R domain.example

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

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

或者,等效地,下次当你连接git fetch、git pull或git push(甚至是一个普通的SSH域。示例)时,让SSH在提示时回答yes

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)?

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

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

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

请确保您拥有正确的访问权限 并且存储库存在。

解决方案:我已经检查了所有的设置,也检查了GitHub中的关键设置。最后,我将Git的URL从“git@github.com:palvsv/travelo-moon.git”更改为“https://github.com/palvsv/travelo-moon.git”。config文件“yourprojectdirectory/”。Git /config”,它可以工作。

当终端显示:

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

不要我重复一遍不要直接按Enter键。

你必须先在终端输入yes,然后按Enter。