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