LoginSignup
9
4

More than 1 year has passed since last update.

git pullして WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! が表示されたら

Posted at

git pullに失敗

GitHubで管理しているリポジトリでgit pullしたところ次のメッセージが表示され、git pullが中止されました。

image (1).png

これはどういう意味のメッセージで、どういう対応をしたらいいのでしょうか?
順を追って理解していきたいと思います。

ChatGPを使ってエラーメッセージを読む

まず最初にこのエラーメッセージ全文をChatGPTに貼り付けます。
すると、英語でエラーメッセージの意味を解説してくれます。

image (2).png

このまま読んでもいいのですが、日本語で説明してもらいます。

image (3).png

GitHubのSSHキーが交換されたためこのメッセージが表示されたことがわかります。

fingerprintsの確認

ChatGPTの説明にしたがって https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/githubs-ssh-key-fingerprints を開きます。

image (4).png

ここに表示されているfingerprintsの値を確認します。後ろに(RSA)がついている値を確認します。

SHA256:uNiVztksCsDhcc0u9e8BujQXVUpKZIDTMczCvj3tD2s.

この値が最初のメッセージに含まれる値と同じかどうかを確認します。

image (5).png

青線とで囲んだ部分の値を見ます。
同じです。なぜ、この確認が必要なのでしょうか?

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"

image (6).png

ふたたびgit pull

古いfingerprintsを削除できたら、もういちどgit pullします。

image (7).png

ここでも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の確認はもとめられません。

参考

9
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
4