SSH接続しようとしたら、めっちゃ怖い警告出た時の対応

半年くらい稼働させていた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

これで解決。

タイトルとURLをコピーしました