无法“git pull” - 主机密钥验证失败
Posted
技术标签:
【中文标题】无法“git pull” - 主机密钥验证失败【英文标题】:Not able to "git pull" - Host key verification failed 【发布时间】:2014-01-31 23:40:52 【问题描述】:我对我们的生产服务器具有 root 访问权限,我想将 git 中的最新版本部署到服务器,但是当我在要更新的文件夹上“git pull”时遇到以下错误。
我浏览了一下,但找不到明确的答案。
登台服务器在同一台机器上运行,但只是在不同的文件夹中,当我在该文件夹上 pull
时一切正常。
我在 Linux 方面不是很有经验,所以请帮助我明确回答如何修复 :-)
否则我可以访问我需要的任何东西
附言 这在过去有效,所以我假设它与 SSH 密钥有关
错误:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: POSSIBLE DNS SPOOFING DETECTED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
The ECDSA host key for www.site.org has changed,
and the key for the corresponding IP address x.x.x.x
is unknown. This could either mean that
DNS SPOOFING is happening or the IP address for the host
and its host key have changed at the same time.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
*************
Please contact your system administrator.
Add correct host key in /root/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /root/.ssh/known_hosts:1
remove with: ssh-keygen -f "/root/.ssh/known_hosts" -R gitlab.site.org
ECDSA host key for gitlab.site.org has changed and you have requested strict checking.
Host key verification failed.
【问题讨论】:
【参考方案1】:在日志中您会看到以下文本:
(...) 请联系您的系统管理员。 在 /root/.ssh/known_hosts 中添加正确的主机密钥以消除此消息。 /root/.ssh/known_hosts:1 中的违规 ECDSA 密钥 删除:ssh-keygen -f "/root/.ssh/known_hosts" -R gitlab.site.org gitlab.site.org 的 ECDSA 主机密钥已更改,您已要求严格检查。 主机密钥验证失败。所以这是执行那里建议的命令的问题:
ssh-keygen -f "/root/.ssh/known_hosts" -R gitlab.site.org
【讨论】:
+1 解决此问题的最佳方法。另一种方法是删除~/.ssh/known_hosts
中 gitlab.site.org 的条目。 @Richard ,还尝试调查为什么密钥已更改,因为大多数时候它们不应该更改。
这里的所有答案都使用户面临安全风险。在更新~/.ssh/known_hosts
之前,您应该确保添加的密钥是合法的。 Github 列出了这里:help.github.com/en/github/authenticating-to-github/… Gitlab 的:docs.gitlab.com/ee/ssh
@anOkCoder 但在这种情况下,它不是关于添加,而是关于删除密钥
也许我当时误解了这个命令的意图。我的理解是,如果您删除主机的密钥,则在进行新的 ssh 尝试时,系统会提示您为该主机添加新密钥。在这种情况下,当用户重新运行git pull
。【参考方案2】:
Windows:
-
转到
/Users/Abhilash/.ssh/known_hosts
并删除其中的内容并保存。
Linux / Mac:
-
转到
~/.ssh/
纳米已知主机
删除里面的内容并保存ctrl+O
注意: 再次按下时将提示您保存密钥。
【讨论】:
谢谢。它创造了奇迹! :D【参考方案3】:按照这些对我有用的步骤后,我也遇到了同样的问题。
对于 macOS:
Step 1: Go to Folder or use command+shift+g
Step 2: type "~/.ssh/"
Step 3: Open "known_hosts" file and Remove all the content
Step 4: Now Open terminal and pull from another branch, It will ask for password give your system password.
它一定会起作用的。
【讨论】:
感谢您节省了我的时间。【参考方案4】:所有其他答案都会带来安全风险。
出现此错误是因为您的 known_hosts
文件中有一条记录,表明服务器应该有一个特定的 ssh 密钥。但是当您尝试连接时,服务器发送了一个不同的 ssh 密钥,它与您的 known_hosts
文件中的密钥不匹配。您的特定错误消息说:
Offending ECDSA key in /root/.ssh/known_hosts:1
这意味着known_hosts
文件中的第一行与远程服务器发送的内容不同。
解决问题的安全方法如下:
-
从可靠来源找出正确的密钥指纹。例如在这里您可以找到GitHub 和GitLab 的正确指纹。 (如果您的组织自行托管 GitLab,您需要与管理员联系以获取 ssh 密钥指纹。)
检查您的
known_hosts
文件中的现有指纹是否正确。
您可以运行 ssh-keygen -lf ~/.ssh/known_hosts
(或 /root/.ssh/known_hosts
在您的情况下)从您的 known_hosts
文件中生成 SHA256 指纹。您的错误消息说问题出在第一个键上。在 GitHub 或 GitLab 上找到等效的 SHA256 指纹并检查它是否完全匹配。
例如以下是上述命令的输出:
256 SHA256:HbW3g8zUjNSksFbqTiUWPWg2Bq1x8xdGUrliXFzSnUw gitlab.com (ECDSA)
这是来自GitLab 网站的 ECDSA SHA256 指纹:
HbW3g8zUjNSksFbqTiUWPWg2Bq1x8xdGUrliXFzSnUw
如果来自known_hosts
的现有指纹与来自GitHub 或GitLab 网站的官方指纹匹配,则ssh
检测到中间人(MitM)攻击。 停止。不要连接到服务器。尝试从不同的互联网连接进行连接。与您的管理员联系。
如果known_hosts
中的现有指纹与官方指纹不匹配,那么您之前受到过中间人攻击,或者托管 GitLab 的服务器已更改其 ssh 密钥。您可以从known_hosts
文件中删除指纹。 (注意:只删除导致问题的特定指纹。)下次连接到 GitLab 时,系统会提示您将新指纹添加到 known_hosts
文件中。
The authenticity of host 'gitlab.com (172.65.251.78)' can't be established.
ECDSA key fingerprint is SHA256:HbW3g8zUjNSksFbqTiUWPWg2Bq1x8xdGUrliXFzSnUw.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
仔细检查指纹是否与GitHub 或GitLab 网站上显示的指纹匹配,然后相应地输入yes
或no
。
【讨论】:
【参考方案5】:如果您想永久删除此消息,您可以编辑您的 ssh 配置文件 (~/.ssh/config
) 以包括:
Host YOUR HOST HERE
StrictHostKeyChecking no
UserKnownHostsFile /dev/null
【讨论】:
因此削弱了整个事物的安全性。检查是有原因的。以上是关于无法“git pull” - 主机密钥验证失败的主要内容,如果未能解决你的问题,请参考以下文章
由于 ssh 密钥,Git 推送失败:主机密钥验证失败。从码头工人内部