1. はじめに
自身のAWS検証環境にて踏み台(Bastion)経由で SSH 接続していたところ、
以下のような警告が出ました。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Host key for [localhost]:2222 has changed and you have requested strict checking.
Host key verification failed.
見慣れない方にとっては「セキュリティ事故か!?」と思うかもしれません。
そこで今回は、この警告の原因と安全な対処法をまとめておきます。
(個人の検証環境での経験ベースです。)
2. 警告の原因
SSH ホストキーとは
SSH は接続先サーバーを認証するために「ホストキー(公開鍵)」を利用します。
初回接続時にこのキーを記録し、次回接続時に一致するかをチェックします。
一致する → 信頼できるサーバーと判断して接続
不一致 → 「サーバーがすり替わっているかもしれない」と警告
つまり、「REMOTE HOST IDENTIFICATION HAS CHANGED!」は
過去に記録したホストキーと異なるキーを検出したことを意味します。
3. 踏み台構成での典型的な原因
プライベートサブネット上の EC2 にローカルから直接アクセスできない場合、
踏み台ホストを経由してポートフォワーディングを行うケースがあります。
(ローカルPC)
|
| ssh -L 2222:private-ec2:22 ec2-user@bastion
|
(Bastion)
|
└── Private EC2
このとき、SSH は「[localhost]:2222」としてホストキーを保存します。
つまり、
・EC2を再起動
・踏み台経由の経路変更
・Auto Scaling による再作成
などにより、実際に接続先となるEC2のホストキーが変化すると、
SSHは「[localhost]:2222のキーが変わった」と誤認し、警告を出します。
4. 解決方法
一時的な対応(検証環境向け)
ローカルPCの known_hosts に記録された古いキーを削除します。
C:\Users{ユーザー名}.ssh\known_hosts
5. まとめ
・踏み台+ポートフォワード構成では、環境変更時に発生しやすい
・検証環境では known_hosts の更新でOK
・本番では Elastic IP + 固定ポート で安定運用を推奨