【対処ログ】`WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!`があらわれた!
2023/03/26追記:github関係で警告が出ている方へ
忙しい人向けの結論
何が起こったか
git push
しようとしたところ、WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
という警告が表示され、pushに失敗した。
% git push
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
# 以下省略
どうやって解決したか
以下の手順で作業を行い解決。
-
.ssh/known_hosts
からgithub.com
のホスト情報を削除する
% ssh-keygen -R github.com
- 再度GitHubにssh接続し、途中の選択肢で
yes
と回答する
% ssh -T git@github.com
# 中略
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
-
git push
を試す->解決
解説
何が起こったか
GitHubのリモートブランチへgit push
しようとしたところ、WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
という警告が表示され、pushに失敗してしまいました。
警告メッセージを読み解く
ここでは、警告メッセージの内容について説明します。具体的には以下の内容について説明します
- 警告メッセージの詳細
- 原因についての言及
- 対処法についての言及
警告メッセージの詳細
以下は警告メッセージの全文(一部修正)です。
% git push
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 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:xxxxx
Please contact your system administrator.
Add correct host key in /Users/xxx/.ssh/known_hosts to get rid of this message.
Offending RSA key in /Users/xxx/.ssh/known_hosts:1
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.
仰々しい警告なのでだいぶ驚きましたが、まずは落ち着いてDeepLさんに訳してもらいます。
以下はDeepLの訳になります。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
警告:リモートホストの識別が変更されました! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
誰かが何か悪さをしている可能性があります!
誰かが今まさにあなたのことを盗聴している可能性があります(中間者攻撃)!
また、ホストの鍵が変更されたばかりである可能性もあります。
リモートホストから送信されたRSA鍵のフィンガープリントは以下の通りです。
SHA256:xxxxx
システム管理者に連絡してください。
このメッセージを消すには、/Users/xxx/.ssh/known_hostsに正しいホスト鍵を追加してください。
/Users/xxx/.ssh/known_hosts:1に問題のあるRSAキーがあります。
github.comのホスト鍵が変更されたため、厳密なチェックを要求しています。
ホスト鍵の検証は失敗しました。
fatal: リモートリポジトリから読み取れませんでした。
正しいアクセス権を持っていることと、リポジトリが存在することを確認してください。
非常に怖いことを言っていますが、対処に必要そうな内容だけに注意を向けて読んでいきます。
原因についての言及
/Users/xxx/.ssh/known_hosts:1に問題のあるRSAキーがあります。
github.comのホスト鍵が変更されたため、厳密なチェックを要求しています。
ホスト鍵の検証は失敗しました。
fatal: リモートリポジトリから読み取れませんでした。
-> 問題のあるRSAキーがあり、ホスト鍵の検証に失敗。そのためリモートリポジトリからの読み取りにも失敗したようです。
対処法についての言及
/Users/xxx/.ssh/known_hostsに正しいホスト鍵を追加してください。
正しいアクセス権を持っていることと、リポジトリが存在することを確認してください。
-> ここは文字通りですね。正しいホスト鍵を追加して、正しいアクセス権とリポジトリの存在を確認すれば良さそうです。
原因の予想
先日別のPCからGitHubに同じアカウントで接続した際、うまくつながらずssh -T git@github.com
を実行して対処した記憶があったため、これが原因と予想しました。
※実際は違いました(本当の原因は後述)
どうやって対処したか
結論
以下の流れで解決しました。
- .ssh/known_hostsから
github.com
のホスト情報を削除する
% ssh-keygen -R github.com
# Host github.com found: line 1
/Users/xxx/.ssh/known_hosts updated.
Original contents retained as /Users/xxx/.ssh/known_hosts.old
- 再度githubにssh接続する(途中の選択肢で
yes
と回答する)
% ssh -T git@github.com
The authenticity of host 'github.com (xxx.xxx.xxx.xxx)' can't be established.
XX00000 key fingerprint is SHA256: xxxx
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'github.com' (XX00000) to the list of known hosts.
Hi user! You've successfully authenticated, but GitHub does not provide shell access.
-
git push
を試す->成功
原因
記事冒頭の追記にも書きましたが、今回の原因は、2023/03/23にgithub側でSSHホストキーが変更されたことが原因でした。
なので今回の警告メッセージが出るまでの流れは以下のようになります。
- ローカルの
.ssh/known_hosts
には、githubの2023/3/23より前のサーバ情報(SSHホストキー)が記載されていた。 - githubが2023/3/23にサーバー情報(SSHホストキー)を更新した(漏洩したらしい)
- 2の結果、今回のPCからgithubへ接続した際のサーバー情報が、1の
.ssh/known_hosts
に記載されていた情報と異なるという事態に。 -
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
発生!
私の場合、公式の告知を知ったのが対処後だったため、独自で対処していますが、同じ原因でこの警告が出た方はぜひ公式の対処法を参考にしてみてください。
参考記事
番外編(ChatGPTに原因を聞いてみた)
ChatGPTに今回の警告メッセージが発生した原因について相談してみました。
事前情報は、警告メッセージと、解決した時に自分がやったこと(結論で記載した内容)
ChatGPTの言うことはちゃんと確認する必要がありますが、今回は結構参考になりそうでした。
この場合の警告メッセージの原因として最も考えられるのは、github.comのSSHホストキーが前回接続したときから変更されたことです。
SSHは、ホストキーを使ってリモートサーバーを識別し、正しいサーバーに接続していることを確認します。リモートサーバーに初めて接続すると、SSHはサーバーのホストキーを確認し、そのキーを信頼するかどうかを確認するよう促します。ホスト鍵はその後、ローカルのknown_hostsファイルに保存されます。
リモートサーバーのホスト鍵が変更された場合、SSHはその事実を知らせるために警告を発します。あなたが見た警告メッセージは、github.comのホスト鍵が前回接続したときから変更されており、この変更が正当であることを確認する必要があることを示します。
場合によっては、サーバーの再設定や更新など、正当な理由によってホストキーが変更されることがあります。しかし、攻撃者がリモートサーバーとの通信を傍受し、偽のホスト鍵を提示する中間者攻撃により、ホスト鍵が変更された可能性もあります。攻撃されていないことを確認するために、新しいホストキーを確認することが重要です。
Discussion
ssh-keygen -R 20.27.177.113
も必要でした。ちょうど困っていたので非常に助かりました。
dewaさん情報ありがとうございます
% ssh-keygen -R github.com
の代わりに必要だった感じですかね?お役に立てて良かったです☺