【SSH接続エラー】WARNING: REMOTE HOST IDENTIFICATION HAS CHANGEDの原因と解決方法
みなさんこんにちわ。
ペスケです。
今回は、サーバーの入れ替えの時に起こったちょっとしたトラブルを紹介します。
この記事で解決できること:
- サーバー入れ替え・OS再インストール後にSSH接続できなくなった
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!というエラーが出たssh-keygen -Rコマンドの使い方を知りたい
このエラーはなぜ起きる?
サーバーのOSを再インストールしたり、IPアドレスを別のマシンに付け替えたりすると、SSHのホスト鍵(known_hosts)と実際のサーバーの鍵が一致しなくなります。
SSHには、初回接続時にサーバーの公開鍵を ~/.ssh/known_hosts に記録しておき、次回接続時に照合するというセキュリティ機能があります。
仕組みを整理するとこうなります:
- ホストPCの
~/.ssh/known_hostsに「192.168.1.36 はこの鍵である」という記録がある - 今接続した 192.168.1.36 は別の鍵を持っている(OSを入れ直したため)
- SSHが「なりすましかもしれない」と判断してブロックする
これはセキュリティ上の正常な動作であり、バグではありません。
エラーの全文(こんな表示が出たら該当します)
text@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Host key verification failed.
このエラーが出たら、known_hostsに保存された古い鍵情報を削除するだけで解決します。
解決方法:コマンド一発で直す
Mac / Linux の場合
ターミナルを開いて、以下のコマンドを実行します。
bashssh-keygen -R サーバーのIPアドレス
実行例:
bashssh-keygen -R 192.168.1.36
成功すると、こんなメッセージが表示されます。
text/home/username/.ssh/known_hosts updated.
Original contents retained as /home/username/.ssh/known_hosts.old
~/.ssh/known_hosts から該当IPの古い鍵情報だけを削除し、バックアップ(.oldファイル)も自動作成してくれます。
Windows の場合
コマンドプロンプト(または PowerShell)を開いて実行します。
textssh-keygen.exe -R 192.168.1.36
Macとの違いは .exe の拡張子が必要な点だけです。
削除後の再接続方法
古い鍵を削除したら、通常通りSSH接続します。
ssh ユーザー名@サーバーのIPアドレス
初回接続と同様に「接続を続けますか?(yes/no)」と聞かれるので、yes と入力すれば完了です。
⚠️ 重要な注意点
このコマンドを実行する前に、本当に自分が管理するサーバーかどうかを必ず確認してください。
| ケース | 対応 |
|---|---|
| 自分でOSを入れ替えた・IPを移したサーバー | ✅ 安全。コマンド実行でOK |
| 自分で構築していないサーバー | ⚠️ 要確認。本当になりすましの可能性あり |
| 本番環境・業務サーバー | ⚠️ システム管理者に必ず確認 |
このエラーは中間者攻撃(Man-in-the-Middle攻撃) の警告としても機能しています。 自分で管理していないサーバーで突然このエラーが出た場合は、安易にコマンドを実行しないようにしましょう。
よくある質問(FAQ)
Q. サーバー側で直そうとしたけどできなかった
A. これはホスト(クライアント)側のエラーです。サーバー側を操作しても解決しません。コマンドはSSH接続元のPC(ターミナルを開いている機器)で実行してください。
Q. ssh-keygen -R と手動でknown_hostsを編集するのはどちらがよい?
A. ssh-keygen -R がおすすめです。該当行だけを正確に削除し、バックアップも自動作成してくれるため、手動編集よりミスが少ないです。
Q. ポート番号が標準(22番)以外の場合は?
A. ポートを指定する場合は以下のように記述します。
bashssh-keygen -R '[サーバーIP]:ポート番号'
まとめ
サーバー入れ替えやOS再インストール後の WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! エラーは、クライアント側のknown_hostsを更新するだけで解決します。
解決手順まとめ:
- ターミナル(またはコマンドプロンプト)を開く
ssh-keygen -R [サーバーのIPアドレス]を実行- 再度
ssh ユーザー名@IPアドレスで接続、yesと入力して完了
自宅のお遊びサーバーや学習環境なら気軽に試せますが、本番環境では必ず安全確認を忘れずに!
