Skip to content

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

セキュリティのベストプラクティス

  1. プロンプトでyesと入力する前に必ずフィンガープリントを確認
  2. 信頼できない環境ではSSH接続を行わない
  3. 定期的に~/.ssh/known_hostsのクリーンアップを実施