概要
タイトルの通りなぜこのエラーが発生して、どうやって解決するかです。
ssh x.x.x.x @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
解決策
~/.ssh/known_hosts を削除してもいいですが以下のコマンドで解決できます。
ssh-keygen -R x.x.x.x
原因
~/.ssh/known_hosts に記録されている以前の接続時とサーバの公開鍵が変わっている場合に表示されるエラーメッセージです。
IPが同じだが別サーバ
よくあるのがステージング環境とプロダクション環境で同じプライベートIPを使っており、ステージング環境に入ったあとプロダクション環境に入ると、
ステージング環境とプロダクション環境で同じIPなのに鍵情報が違うためエラーが発生します。
MITM (Man In The Middle) 攻撃 (中間者攻撃)
本来は攻撃の可能性があるため警告が出ています。
攻撃者がクライアントとサーバの間に介入し、通信を傍受しようとしている場合にこのエラーが発生する可能性があります。
1.攻撃者の位置付け
攻撃者はクライアントとサーバの間に入り込みます。ARPスプーフィング間のNWに入る込む技術を使用することが想定されます。
2.公開鍵の取り換え
クライアントが初めてサーバに接続する際、サーバは公開鍵をクライアントに送信します。
攻撃者はこの公開鍵を自分の公開鍵に置き換えてクライアントに送ります。クライアントは攻撃者の公開鍵を受け取り、この公開鍵をサーバの公開鍵と勘違いしてしまいます。
3.通信の傍受と転送
クライアントは攻撃者の公開鍵を使用してデータを暗号化しそのデータを攻撃者に送信します。そして攻撃者はそのデータを複号化します。その後盗んだ正当なサーバの公開鍵で再び暗号化してサーバに転送します。これを逆方向でも同様に行い攻撃者は通信全体を傍受することができます。
対策
このようにクライアントとサーバの間に入り込むことで通信を傍受されてしまいます。
これを対策するために既知の公開鍵と異なる公開鍵を提示された場合は接続を拒否し WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
とエラーメッセージを出すのでした。