GitHub SSH 主机密钥变更警告
问题陈述
当通过 SSH 连接至 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.
此问题于 2023 年 3 月 24 日 集中出现,原因是 GitHub 官方主动更新了其 RSA SSH 主机密钥以应对潜在的密钥泄露风险。虽然警告属于安全机制的正常反应,但需及时处理以恢复 Git 操作功能。
解决方案
基础解决步骤(推荐)
适用系统
Linux、macOS、Windows (Git Bash/WSL)
清除旧密钥记录:
bashssh-keygen -R github.com
成功执行后终端将显示:
bash# Host github.com found: line 1 .ssh/known_hosts updated.
首次重连验证: 随后执行任意 Git 操作(如
git push
),系统会提示验证新指纹:bashThe 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])?
务必核对指纹是否匹配 GitHub 官方公布的以下值之一:
- RSA:
SHA256:uNiVztksCsDhcc0u9e8BujQXVUpKZIDTMczCvj3tD2s
- ECDSA:
SHA256:p2QAMXNIC1TJYWeIOttrVc98/R1BUFWu3/LiyKgUfQM
- Ed25519:
SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU
- RSA:
输入确认: 验证无误后输入
yes
即可完成密钥更新。
进阶场景处理
特殊情况
若基础步骤后仍出现 IP 地址警告,可能因历史记录中有 GitHub 的 IP 密钥残留
方案一:删除整个 known_hosts
文件
(适用于密钥记录较少的环境)
mv ~/.ssh/known_hosts ~/.ssh/known_hosts.bak
touch ~/.ssh/known_hosts
方案二:多平台手动清理
▸ macOS:
- 打开文件:
open /Users/{用户名}/.ssh/known_hosts
- 删除含
github.com
或bitbucket.org
的行 - 保存并重试 SSH 连接
▸ Windows PowerShell:
Remove-Item "C:\Users\<用户名>\.ssh\known_hosts"
方案三:脚本清理残余 IP 密钥
(通过 GitHub API 获取 IP 并批量清理)
#!/usr/bin/env ruby
require 'json'
meta = JSON.parse `curl -s https://api.github.com/meta`
# ...完整脚本见 GitHub Gist:
# https://gist.github.com/jcward/5a64c17a6b61de0f7a4d85d004e7679e
密钥主动更新方案
预防性维护
在解决警告后,可通过此命令预加载 GitHub 最新密钥:
curl -L https://api.github.com/meta | jq -r '.ssh_keys | .[]' | sed -e 's/^/github.com /' >> ~/.ssh/known_hosts
原理解释
密钥变更背景
2023 年 3 月 24 日,GitHub 主动更替 RSA SSH 主机密钥以应对私钥意外暴露风险。此次变更 仅影响 SSH 协议的 RSA 密钥,HTTPS 和网页访问不受波及。
安全机制必要性
SSH 客户端通过 ~/.ssh/known_hosts
存储远程服务器的公钥指纹。当服务器密钥变更时:
- 客户端检测到指纹不匹配
- 触发警告防止中间人攻击
- 需人工确认以更新信任记录
安全提示
切勿跳过指纹验证!恶意攻击者可能伪造此警告诱导用户接受虚假密钥。始终通过官方指纹列表核对真实性。
跨平台要点总结
系统 | 推荐方案 | 备选方案 |
---|---|---|
Linux | ssh-keygen -R github.com | 脚本清理 / 重建 known_hosts |
macOS | 同上 + 手动验证 | 编辑 known_hosts 文件 |
Windows | Git Bash 执行基础步骤 | PowerShell 删除 known_hosts |