SSH接続時の「REMOTE HOST IDENTIFICATION HAS CHANGED!」エラー

YK
2025-03-06
2025-03-06

こんにちは。
たまにはMagento以外の事も書いてみようと思います。

みなさんは、SSH接続時に
 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! 
の警告エラーが表示された事はありませんか?

私は結構このエラーに出会うので、自分用のメモも兼ねて、この原因と対応方法について今回まとめてみました。

エラーの発生と原因

今回の私のケースでは、
対象のサーバーは、AutoScalingで生成したEC2インスタンスで、デプロイのたびにIPアドレスがランダムに付与される仕組みになっています。

IPアドレスはある程度決められた範囲内で割り当てるよう制限しているので、たまに昔に使ったIPアドレスが再度付与されてしまう事があるんですよね。

そんな時にSSHでサーバーに接続しようとすると、以下のようなエラーが表示されます。

[testuser@futurespirits]$ ssh -i  testuser@XX.XX.XX.XX
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@       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 ECDSA key sent by the remote host is
SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXX.
Please contact your system administrator.
Add correct host key in /home/testuser/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /home/testuser/.ssh/known_hosts:5
ECDSA host key for XX.XX.XX.XX has changed and you have requested strict checking.
Host key verification failed.

このエラーは、
「XX.XX.XX.XX」サーバーに接続しようとしたときに、以前記録したホストキーの情報と、今回接続しようとしているホストキーの情報が違うけど大丈夫なん?、という事を警告しています。

一度接続したサーバーのホストキー
は、SSHクライアントが保持している known_hosts ファイルに保存されます。
なので、昔接続した事のあるIPアドレスが、新しいサーバーに再付与された場合、以前のホストキーが known_hostsに残っている為、この警告エラーが表示されてしまう訳です。

 

対応方法

このエラーを解消するためには、SSHクライアントが保持している known_hostsファイルから、問題のあるサーバーのエントリを削除する必要があります。

 

方法1:known_hostsから手動削除する

エラーメッセージをよく見ると、問題のある箇所を教えてくれています。
例えば以下のように表示されている場合、 known_hostsファイルの5行目に問題があります。

・・・
Offending ECDSA key in /home/testuser/.ssh/known_hosts:5

この場合、昔のホストキーの設定が5行目に記録されているので、5行目を削除しましょう。

テキストエディタやvi等で known_hostsファイルを開き、該当の行を削除するか、
または以下のようなsedコマンドを使って、該当行を削除します。

sed -i '5d' ~/.ssh/known_hosts

 

方法2:SSHのコマンドで削除

以下のコマンドを実行すると、特定のホストのエントリのみ削除できます。

ssh-keygen -R  XX.XX.XX.XX(サーバーのホスト名またはIPアドレス

一発で消せるし、削除前のknown_hostsも自動バックアップしてくれるので結構便利でおすすめです。