半年くらい稼働させていたEC2インスタンスに久々にSSH接続しようとした時の話。
めっちゃ怖い警告出てビビり倒したので、次に出くわした時のために、原因と解決策をメモしておく。
結論から言うと、そんなにビビる必要はない警告でした。
めっちゃ怖い警告
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 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
*******************************.
Please contact your system administrator.
Add correct host key in /var/root/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /var/root/.ssh/known_hosts:5
ECDSA host key for ********.amazonaws.com has changed and you have requested strict checking.
Host key verification failed.
一部抜粋して和訳すると、
誰かが何か厄介なことをしている可能性があります! 誰かが今あなたを盗聴している可能性があります(man-in-the-middle攻撃)!
怖い!!!
何が原因?
上では、怖い部分だけ和訳したので、その下も
ホストキーが変更されたばかりである可能性もあります。 ~(省略)~ システム管理者に連絡してください。 このメッセージを取り除くには、/var/root/.ssh/known_hostsに正しいホストキーを追加してください。 /var/root/.ssh/known_hosts:5の問題のあるECDSAキー ********.amazonaws.comのECDSAホストキーが変更され、厳密なチェックを要求しました。 ホストキーの検証に失敗しました。
要するに、ローカルに保存してるホストキーがサーバのものと違うよ!ってことですね。
SSH接続は、「初回接続時に接続先の公開鍵をローカルに保存しておき、次回以降は公開鍵を比較して、前回と同じホストに接続したかを確認する」仕組みになっています。
そのため、IPアドレスの振り直しやOS再インストールなどで公開鍵が変わってしまった場合、このようなエラーメッセージが出るようです。
で、心当たりを考えてみたところ、自動停止・自動起動のテストをしたり、ElasticIPをつけたり消したりと、いろいろ検証のためにいじったので、インスタンスのIPが変わってしまっていたようです。
解決策
ローカルの公開鍵とサーバのものが違うから、文句を言われているわけなので、ローカルのものを削除してしまえば良いのです。
SSH接続に使用されるローカルの公開鍵は、~/.ssh/known_hosts
に書いてあります。
viとかで開いて、該当する部分を削除しても良いのですが、ミスって別のとこ削除しちゃったりすると、まためんどくさいことになる可能性があるので、コマンドで削除してやりましょう。
$ ssh-keygen -R <対処のホスト名>
# Host example.com found: line 5 type RSA
/Users/salad/.ssh/known_hosts updated.
Original contents retained as /Users/salad/.ssh/known_hosts.old
これで解決。