GitHub接続時における「REMOTE HOST IDENTIFICATION HAS CHANGED」エラーの解決方法
問題
GitHubへのSSH接続時に以下の警告が表示される場合:
bash
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.
このエラーはGitHubが2023年3月24日にRSA SSHホストキーを更新したことが原因です(公式発表)。クライアント側に保存されている旧キーとサーバーの新キーが不一致となり、セキュリティ警告が発生します。
注意
この警告は中間者攻撃の可能性を示すため、以下の解決前には必ずGitHub公式のフィンガープリントとの照合を行ってください。
標準解決手順
1. 既存のGitHubキーを削除
ターミナルで以下のコマンドを実行:
bash
ssh-keygen -R github.com
正常に削除されると/.ssh/known_hosts updated.
と表示されます。
2. 新規接続とキーの確認
Git操作(push/pull)を再試行:
bash
$ git push
The authenticity of host 'github.com (140.82.112.4)' can't be established.
ECDSA key fingerprint is SHA256:p2QAMXNIC1TJYWeIOttrVc98/R1BUFWu3/LiyKgUfQM.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
3. フィンガープリントの検証
表示されたフィンガープリントがGitHub公式フィンガープリントと一致することを確認:
SHA256:p2QAMXNIC1TJYWeIOttrVc98/R1BUFWu3/LiyKgUfQM
(ECDSA)SHA256:uNiVztksCsDhcc0u9e8BujQXVUpKZIDTMczCvj3tD2s
(RSA)SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU
(Ed25519)
4. 新キーの承認
確認後、yes
と入力して接続を許可:
bash
Warning: Permanently added 'github.com' (ECDSA) to the list of known hosts.
追加対策(標準手順で解決しない場合)
IPアドレス関連エラーへの対処
github.com
削除後もIPベースのエラーが継続する場合(旧OpenSSHバージョン特有の現象):
bash
Warning: the ECDSA host key for 'github.com' differs from the key for the IP address '192.30.255.113'
方法1: known_hostsファイル全体の更新
bash
mv ~/.ssh/known_hosts ~/.ssh/known_hosts.bak
次回接続時に全ホストの再承認が必要になります。
方法2: GitHub関連IPの一括削除
公式APIを利用したスクリプト:
ruby
# gist.github.com/jcward/5a64c17a6b61de0f7a4d85d004e7679e
require 'json'
meta = JSON.parse `curl -s https://api.github.com/meta`
# スクリプト本体(入力データのRubyコードをそのまま利用)
# IP範囲をスキャンし該当エントリを削除
bash
ruby github-ip-cleaner.rb
OS別操作ガイド
Windows (PowerShell)
powershell
Remove-Item "$env:USERPROFILE\.ssh\known_hosts"
macOS
bash
# ファイルを直接編集
open /Users/ユーザー名/.ssh/known_hosts
# github.com/bitbucket.org関連行を削除後保存
Ubuntu/Linux
bash
# バックアップ作成
cp ~/.ssh/known_hosts ~/.ssh/known_hosts_backup
# 特定ホストキー削除(推薦)
ssh-keygen -R github.com
補足情報
発生原因の技術的背景
- SSH接続ではホスト認証のために公開鍵を使用
- クライアントは初回接続時に鍵を
known_hosts
に保存 - サーバー鍵の変更はセキュリティ上重要なイベント
- GitHubの鍵変更:RSA鍵更新の詳細
予防策
bash
# 公式キーを事前取得(任意)
curl -L https://api.github.com/meta | jq -r '.ssh_keys | .[]' | sed -e 's/^/github.com /' >> ~/.ssh/known_hosts
セキュリティのベストプラクティス
- プロンプトで
yes
と入力する前に必ずフィンガープリントを確認 - 信頼できない環境ではSSH接続を行わない
- 定期的に
~/.ssh/known_hosts
のクリーンアップを実施