git pullに失敗
GitHubで管理しているリポジトリでgit pull
したところ次のメッセージが表示され、git pull
が中止されました。
これはどういう意味のメッセージで、どういう対応をしたらいいのでしょうか?
順を追って理解していきたいと思います。
ChatGPを使ってエラーメッセージを読む
まず最初にこのエラーメッセージ全文をChatGPTに貼り付けます。
すると、英語でエラーメッセージの意味を解説してくれます。
このまま読んでもいいのですが、日本語で説明してもらいます。
GitHubのSSHキーが交換されたためこのメッセージが表示されたことがわかります。
fingerprintsの確認
ChatGPTの説明にしたがって https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/githubs-ssh-key-fingerprints を開きます。
ここに表示されているfingerprintsの値を確認します。後ろに(RSA)
がついている値を確認します。
SHA256:uNiVztksCsDhcc0u9e8BujQXVUpKZIDTMczCvj3tD2s.
この値が最初のメッセージに含まれる値と同じかどうかを確認します。
青線とで囲んだ部分の値を見ます。
同じです。なぜ、この確認が必要なのでしょうか?
ChatGPTの説明にある
中間者攻撃の兆候である可能性もあります。
かどうか確認するためです。
中間者攻撃とは、SSHでgithub.comと通信する経路の途中に偽の通信相手が割り込む攻撃です。
SSHで経路を暗号化しても、間に偽の通信相手が入ると、暗号化した通信内容を偽の通信相手に見られてしまいます。
これを防ぐ為に通信相手を確認する必要があります。
今回はGitHubが公式ページで公開しているfingerprintsと、SSHの通信相手が送ってくるfingerprintsを目で見比べて確認しました。
古いfingerprintsを削除
確認が出来たら、github.com用の古いfingerprintsを削除します。
fingerprintsは通常、ユーザーディレクトリの.ssh/known_hosts
に保存されています。
エラーメッセージやChatGPTの説明通りつぎのコマンドで削除できます。
ssh-keygen -f "/home/ledsun/.ssh/known_hosts" -R "github.com"
ふたたびgit pull
古いfingerprintsを削除できたら、もういちどgit pull
します。
ここでもfingerprintsが正しい相手のものか確認します。
よく見ると、最初のエラーメッセージとは別の値になっています。
SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU
です。
これはSSHの暗号化に使う鍵の方式がRSAとEd25519でちがうために起きています。
fingerprintsを確認できたらyes
と入力します。
git pull
が実行されます。
このときよく見ていると次のようなメッセージが表示されます。
Warning: Permanently added 'github.com' (ED25519) to the list of known hosts.
新しいfingerprintsが保存されたことがわかります。
次のgit pull
ではfingerprintsの確認はもとめられません。
参考
- https://github.blog/2023-03-23-we-updated-our-rsa-ssh-host-key/ にGitHub公式の説明があります。