简单记录一下 GitHub SSH 主机密钥失效的问题解决

3月23日的的时候 GitHub 错误地更新了主机的 SSH 密钥。这导致基于 SSH 的 Git 操作直到本地更新密钥之前都会失效。

由于我的博客是通过 Hexo-Git 部署的,所以这次一提交,也掉坑里了。

直接 hexo d,首先显示的是如下的错误消息(截取开头):

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!

接着阅读可以发现是检测到密钥不匹配,而且开启了强制密钥验证,为了防止中间人攻击,所以就报错了。因为我以前通过 SSH 方式进行过 Git 提交,所以本地的密钥数据库(.ssh/known_hosts)存在主机记录。所以先按那篇文章所说的,删除旧的密钥:

ssh-keygen -R github.com

执行完成后我再尝试推送,但遇到了另一个问题:

Error: Host key verification failed.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

因为此时我还没有手工通过 SSH 方式提交,所以数据库不存在记录。为了解决这个问题,我在 GitHub 上加回了本机的私钥(忘了是什么原因没掉了,之前是2017年设置的,呜呜)。但是这个问题仍然存在。有没有能不通过 SSH 进行一次 Git 拉取/提交而刷新 SSH 密钥的方法呢?(明显,直接 SSH Shell 上 GitHub 是不可能的。)

我对 SSH 工具不熟,所以还是找了一下。根据这篇文章的指示,运行一下 ssh-keyscan 就行:

ssh-keyscan github.com

然后将输出的内容加入到 known_hosts 里面。之后就正常了。

此外,还可以通过 -F 查询主机是否已知,或用 -l 列出所有已知主机:

ssh-keygen -F github.com
ssh-keygen -l
分享到 评论