Dhe*_*.S. 641 git ssh github ssh-keys
就在不久前,我在推送到 GitHub 时开始收到此警告。
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.
Run Code Online (Sandbox Code Playgroud)
这是正常现象吗?我该如何解决?
Dhe*_*.S. 950
发生这种情况是因为 2023 年 3 月 24 日,GitHub更新了用于保护 GitHub.com 的 Git 操作的 RSA SSH 主机密钥,因为私钥在公共 GitHub 存储库中短暂公开。如果您在该日期之前记住了 SSH 客户端中的 GitHub\xe2\x80\x99s 上一个密钥指纹,您将收到该消息。
\n根据链接的博客文章,解决方案是通过运行以下命令删除旧密钥:
\n$ ssh-keygen -R github.com\n
Run Code Online (Sandbox Code Playgroud)\n现在,下一个git
连接(拉取、推送或克隆)应该询问您是否信任新的 SSH 密钥。在输入之前yes
,请使用以下列表确保显示的新密钥有效:
请参阅博客文章了解解决该问题的其他方法。
\nSat*_*ors 54
根据 GitHub 的博客文章,他们的 SSH 密钥已泄露,因此他们重新生成了密钥。
您需要通过运行以下命令来删除存储的密钥:
ssh-keygen -R github.com
Run Code Online (Sandbox Code Playgroud)
应该输出如下内容:
# Host github.com found: line 1
.ssh/known_hosts updated.
Run Code Online (Sandbox Code Playgroud)
如果您想主动行动,您可以按照命令来获取他们的新密钥。这可能不适用于 Windows,并且没有它也不需要。下次您尝试访问 GitHub 时,系统将提示您保存新密钥。
curl -L https://api.github.com/meta | jq -r '.ssh_keys | .[]' | sed -e 's/^/github.com /' >> ~/.ssh/known_hosts
Run Code Online (Sandbox Code Playgroud)
完成后,您可以重新运行git
您尝试的命令。
bk2*_*204 48
是的,GitHub 更新了他们的 RSA 主机密钥,如其博客文章中所述。您可以按照那里的说明更新您的密钥。
然而,有些人发现 OpenSSH 还通过CheckHostIP
选项保存了 IP 地址的主机密钥。在 OpenSSH 8.5 之前默认启用此功能,但往往没有什么帮助,因为它使轮换变得困难,因此在该版本中被禁用。话虽如此,它可以像这样解决(在 Linux 和 Git Bash 上):
$ sed -i -e '/AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31\/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi\/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==/d' ~/.ssh/known_hosts
Run Code Online (Sandbox Code Playgroud)
在 macOS 上也是如此:
$ sed -i '' -e '/AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31\/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi\/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==/d' ~/.ssh/known_hosts
Run Code Online (Sandbox Code Playgroud)
无论在哪里找到密钥,无论是主机名还是 IP 地址,都会将其删除。由于 GitHub 使用多个 IP 地址,因此实际上不可能枚举所有 IP 地址并使用 删除它们ssh-keygen
,因此手动删除密钥本身是最佳选择。
然后,您可以按照博客文章中的说明自动更新密钥:
$ curl -L https://api.github.com/meta | jq -r '.ssh_keys | .[]' | \
sed -e 's/^/github.com /' >> ~/.ssh/known_hosts
Run Code Online (Sandbox Code Playgroud)
Dis*_*lia 37
来自 GitHub 的我们更新了 RSA SSH 主机密钥,您可以做什么:
\n\n\n世界标准时间 [2023] 3 月 24 日大约 05:00,出于谨慎考虑,我们更换了用于保护 GitHub.com 的 Git 操作的 RSA SSH 主机密钥。我们这样做是为了保护我们的用户免受对手冒充 GitHub 或通过 SSH 窃听其 Git 操作的任何机会。此密钥不会授予对 GitHub\xe2\x80\x99s 基础架构或客户数据的访问权限。此更改仅影响使用 RSA 通过 SSH 进行的 Git 操作。GitHub.com 的 Web 流量和 HTTPS Git 操作不受影响。
\n
解决方案:从文件.ssh/known_hosts 中删除 GitHub 的旧 RSA SSH 密钥\n并更新新密钥。
\nGab*_*les 16
在Ubuntu 20.04上,使用GitHub 上的Ed25519密钥,即使在运行之后ssh-keygen -R github.com
,根据主要答案,每次运行时我都会看到这些通知git push
:
$ git push
Warning: the ECDSA host key for 'github.com' differs from the key for the IP address '140.82.112.4'
Offending key for IP in /home/gabriel/.ssh/known_hosts:14
Matching host key in /home/gabriel/.ssh/known_hosts:15
Are you sure you want to continue connecting (yes/no)? yes
Warning: the ECDSA host key for 'github.com' differs from the key for the IP address '140.82.112.4'
Offending key for IP in /home/gabriel/.ssh/known_hosts:14
Matching host key in /home/gabriel/.ssh/known_hosts:15
Are you sure you want to continue connecting (yes/no)? yes
Warning: the ECDSA host key for 'github.com' differs from the key for the IP address '140.82.112.4'
Offending key for IP in /home/gabriel/.ssh/known_hosts:14
Matching host key in /home/gabriel/.ssh/known_hosts:15
Are you sure you want to continue connecting (yes/no)? yes
Run Code Online (Sandbox Code Playgroud)
所以,我最终~/.ssh/known_hosts
通过重命名它来删除我的文件,如下所示:
(尝试@bk2204的答案,而不是运行mv
下面的cmd。谢谢,@Guntram Blohm)。
mv ~/.ssh/known_hosts ~/.ssh/known_hosts.bak
Run Code Online (Sandbox Code Playgroud)
...现在git push
终于又可以正常工作了!我不在乎每当我再次使用 SSH 连接到特定服务器时都必须重新验证所有 SSH 目标,因此有效地删除该~/.ssh/known_hosts
文件就可以了。除了推送到 GitHub 和 GitLab 之外,我几乎不使用 SSH。
注意:之后我第一次运行时git push
必须输入yes
,如下所示:
$ git push
The authenticity of host 'github.com (140.82.112.4)' can't be established.
ECDSA key fingerprint is SHA256:p2QAMXNIC1TJYWeIOttrVc98/R1BUFWu3/LiyKgUfQM.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'github.com,140.82.112.4' (ECDSA) to the list of known hosts.
Everything up-to-date
Run Code Online (Sandbox Code Playgroud)
不过,在输入 之前yes
,我首先在 GitHub 网站上验证了SHA256:p2QAMXNIC1TJYWeIOttrVc98/R1BUFWu3/LiyKgUfQM
来自 GitHub 的指纹是否正确。GitHub 在这里有每种密钥类型的指纹:https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/githubs-ssh-key-fingerprints
这些是 GitHub 的公钥指纹:
SHA256:uNiVztksCsDhcc0u9e8BujQXVUpKZIDTMczCvj3tD2s
(RSA)SHA256:br9IjFspm1vxR3iA35FWE+4VTyz1hYVLIE2t1/CeyWQ
(DSA - 已弃用)SHA256:p2QAMXNIC1TJYWeIOttrVc98/R1BUFWu3/LiyKgUfQM
(电子数字签名分析系统)SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU
(Ed25519)
Jef*_*ard 15
GitHub博客简单地建议:
\nssh-keygen -R github.com\n
Run Code Online (Sandbox Code Playgroud)\n不幸的是,这并不那么容易,我不断收到如下错误,显示 GitHub 服务器位于我的由 IP 地址存储的known_hosts文件中。
\nWarning: the ECDSA host key for \'github.com\' differs from the key for the IP address \'192.30.255.113\'\nOffending key for IP in /.ssh/known_hosts:19\nMatching host key in /.ssh/known_hosts:178\nAre you sure you want to continue connecting (yes/no)? yes\n
Run Code Online (Sandbox Code Playgroud)\n您必须搜索与 github.com 服务关联的 1000 个 IP 地址才能清理它们...
\n我设计了一个 Ruby 脚本来搜索通过 GitHub元 API发布的 GitHub IP 地址。它是有限的\xe2\x80\x94它跳过巨大的“操作”IP地址范围,并且仅适用于IPv4,但希望它可以帮助其他人不必按yes
很多次。
https://gist.github.com/jcward/5a64c17a6b61de0f7a4d85d004e7679e
\n出于存档目的,将其复制于此:
\nssh-keygen -R github.com\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
84239 次 |
最近记录: |