我在 Github 中使用 Git 时不断收到此消息:
警告:'github.com' 的 ECDSA 主机密钥与 IP 地址 '20.248.137.48' 的密钥不同 /home/steve/.ssh/known_hosts:133 中 IP 的密钥不正确 /home/steve/.ssh/known_hosts:140 中主机密钥匹配 您确定要继续连接(是/否)吗?
我知道Github 的 SSH 主机密钥已更改并已更新我的~/.ssh/known_hosts
以包含新密钥,并三次检查该文件中没有其他条目。
当我更新它时,消息会消失一段时间(可能几个小时),然后不可避免地会再次出现。
这特别痛苦,因为如果我尝试从 VS Code 内部与 Github 交互(例如,推送分支),窗口就会挂起,大概是在等待我在一个看不见的终端里输入“是”。
我在 Windows 10 上的 WSL 2 上运行 Ubuntu 20.04.3。
答案1
当 GitHub 循环使用密钥时,它可能会落在任意数量的潜在 IP 地址上。这是因为 GitHub 使用整个主机和服务器阵列来存储其内容。没有办法正确过滤全部其中,所以您可能需要考虑将类似这样的内容添加到您的~/.ssh/config
文件中:
Host github.com:
StrictHostKeyChecking no
这尚未测试,但理论上应该在使用 GitHub 时禁用主机密钥检查。
答案2
我今天在做一件事的时候遇到了这个问题git clone
:
Warning: the ECDSA host key for 'github.com' differs from the key for the IP address '140.82.114.3'
Offending key for IP in /home/<user>/.ssh/known_hosts:Y
Matching host key in /home/<user>/.ssh/known_hosts:X
Are you sure you want to continue connecting (yes/no)?
(其中 X 和 Y 是行号)
我很困惑,因为我最近确实从这台计算机推送到了 GitHub(即在他们的 RSA 主机密钥改变之后)。
我检查了:
ssh-keygen -l -f ~/.ssh/known_hosts -F github.com
结果是:
# Host github.com found: line X
github.com ECDSA SHA256:p2QAMXNIC1TJYWeIOttrVc98/R1BUFWu3/LiyKgUfQM
基于GitHub 发布的密钥指纹,看上去是对的。
然后我从错误信息中检查了IP地址:
ssh-keygen -l -f ~/.ssh/known_hosts -F 140.82.114.3
这给出了:
# Host 140.82.114.3 found: line Y
140.82.114.3 RSA SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8
这里使用 RSA 密钥,并且没有与上面页面的匹配。所以这肯定是 GitHub 的旧 RSA 密钥。
我使用以下方法删除了它:
ssh-keygen -f ~/.ssh/known_hosts -R 140.82.114.3
之后git clone
没有任何提示就成功完成了,所以它一定只是使用了附加的 ECDSA 密钥github.com
。
我猜测原因是我删除了旧的 RSA 密钥github.com
,但由于某种原因,它也存储在每个 IP 地址下,因此当该服务器再次轮换出现时,它会抱怨。
我不知道有没有一种简单的方法可以自动获取所有 GitHub IP,但鉴于错误基本上说“该 IP 的密钥错误,但它与主机名匹配”,我只需删除 IP 条目就可以了。