GitHubは2023年3月23日(米国現地時間)に「github.com」のRSA SSH秘密鍵が漏洩したことを発表しました。
3月24日午前5時頃にRSA SSHホスト鍵を交換したので、問題は解決されたとのことですが、これまでRSA SSHでGitHubにアクセスしていた方は、GitHubにpushやGitHubからfetch/pullなどをしようとすると下記のエラーが出て混乱された方もいるかと思います。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 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.
The fingerprint for the RSA key sent by the remote host is
SHA256:uNiVztksCsDhcc0u9e8BujQXVUpKZIDTMczCvj3tD2s.
Please contact your system administrator.
Add correct host key in /Users/shingo/.ssh/known_hosts to get rid of this message.
Offending RSA key in /Users/shingo/.ssh/known_hosts:4
Host key for github.com has changed and you have requested strict checking.
Host key verification failed.
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
先に解決方法を述べると、交換されたのはGitHub側の鍵なので、
「GitHubの古い公開鍵を削除して新しい鍵を登録する」
必要があります。
間違った手順として
「自分が作成してGitHubに登録している公開鍵とペアになる秘密鍵を作り直してGitHubに登録し直す」
ということをしてしまう方がいるかもしれませんが、後者の方法では解決しないのでご注意ください。
公式ブログ の手順に沿って行えば解決できますので、順を追って実行していきます。
GitHub のホスト鍵ペアの公開鍵の情報は、過去にコンソールからgithub.comへの接続経験があれば~/.ssh/known_hosts
に格納されています。
まず、自分のPC内の~/.ssh/known_hosts
に入っている古いGitHubの鍵を削除するため、TerminalやPowershellなどのコンソール上で、下記のコマンドを入力して実行します。
$ ssh-keygen -R github.com
次にvimなどのエディタで ~/.ssh/known_hosts
に新しいGitHubの公開鍵を登録します。
今回更新されたのは、RSAの鍵なので、下記の値を ~/.ssh/known_hosts
のファイルの一番下の行などに書き込んで保存します。
github.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCj7ndNxQowgcQnjshcLrqPEiiphnt+VTTvDP6mHBL9j1aNUkY4Ue1gvwnGLVlOhGeYrnZaMgRK6+PKCUXaDbC7qtbW8gIkhL7aGCsOr/C56SJMy/BCZfxd1nWzAOxSDPgVsmerOBYfNqltV9/hWCqBywINIR+5dIg6JTJ72pcEpEjcYgXkE2YEFXV1JHnsKgbLWNlhScqb2UmyRkQyytRLtL+38TGxkxCflmO+5Z8CSSNY7GidjMIZ7Q4zMjA2n1nGrlTDkzwDCsw+wqFPGQA179cnfGWOWRVruj16z6XyvxvjJwbz0wQZ75XK5tKSb7FNyeIEs4TT4jk+S4dhPeAUC5y+bDYirYgM4GC7uEnztnZyaVWQ7B381AK4Qdrwt51ZqExKbQpTUNn+EjqoTwvqNj4kqx5QUCI0ThS/YkOxJCXmPUWZbhjpCg56i+2aB6CmK2JGhn57K5mj0MNdBXA4/WnwH6XoPWJzK5Nyu2zB3nAZp+S5hpQs+p1vN1/wsjk=
もしくは、エディタで~/.ssh/known_hosts
を編集せずに、下記のコマンドをコンソール上で実行しても同様にGitHubの鍵を更新することができます。
$ curl -L https://api.github.com/meta | jq -r '.ssh_keys | .[]' | sed -e 's/^/github.com /' >> ~/.ssh/known_hosts
※上記のコマンドはGitHubの公式ブログから転記していますが、情報が古くなったり間違っている可能性もありますので、念の為コピー元はGitHubの公式ドキュメントや公式ブログを参照するようにしてください。
以上の手順で、再びコンソールからgit push / git fetch / git pullなどのコマンドを実行すると正常に実行できるかと思います。
ちなみに、今回交換されたのは「github.com」のRSA SSH鍵のみで、問題となるのはSSH経由で「Git」を利用するケースです。ECDSAやEd25519を利用している場合は影響はありません。「github.com」のWebトラフィックやHTTPS経由の「Git」操作にも影響しませんので、RSA SSH以外の手順では特になにか設定をしなくてもこれまで通り利用できると思います。