ラズパイなどにSSH接続していると、こんな警告が出てきて接続できない時があります。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: POSSIBLE DNS SPOOFING DETECTED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
The ECDSA host key for raspberrypi.local has changed,
and the key for the corresponding IP address 240d:1a:59e:6800:c653:38fe:7726:38ca
is unknown. This could either mean that
DNS SPOOFING is happening or the IP address for the host
and its host key have changed at the same time.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 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:t1cdwH1tupuBBxVcsWiXfKLhx+zpTnv+r6r8UnmJahU.
Please contact your system administrator.
Add correct host key in /Users/radical/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /Users/radical/.ssh/known_hosts:2
ECDSA host key for raspberrypi.local has changed and you have requested strict checking.
Host key verification failed.
ここでは警告が出る理由と解決方法についてまとめました。
目次
警告が出る理由
警告内容
警告内容は「なりすましの可能性があるよ!だって、記録しているホスト鍵と今接続しようとしているホスト鍵が違うんだもの!」という意味になります。
実はSSHでホストに初回接続したとき、"known_hosts" というファイルにホスト名とホスト鍵を対で記録しています。
そして再接続時、記録しているホスト鍵と今回接続時のホスト鍵を比較します。ここでホスト鍵が異なっていると警告がでます。
なぜなら、ホスト鍵が違うということは、以前接続したホストとは異なるホストに接続しようとしている可能性があるからです。つまりホスト名が悪用されて「なりすまし」に遭っている可能性があるということです。
警告が出る条件
警告が出る条件としてはこんな感じ。
- ホストに初めて接続(ホスト名とホスト鍵を "known_hosts" というファイルに記録)
- ホストのホスト鍵が変更
- ホストに再接続 ← このタイミングで警告発動
では、どういうときにホスト鍵が変わるかというと、以下のようなタイミングで変わります。
- ホストマシンが違う(なりすまし)
- IPアドレス変更
- OS再インストール
- ホスト鍵の再生成
など
たとえばよくあるケースとして、ラズパイをDHCPで接続していると警告に遭遇する可能性があります。DHCPによって割り振られるIPアドレスが変わってしまうためです。
解決方法
接続先が「なりすまし」ではないことが明白であれば、下記コマンドを実行すると解決できます。
ssh-keygen -R <接続先のホスト名>
たとえば冒頭の警告の場合、ホスト名が"raspberrypi.local"なので、コマンドは下記のようになります。
ssh-keygen -R raspberrypi.local
何をしているかというと、記録していたホスト名とホスト鍵の対を削除しています。これによりホスト鍵の比較が無くなるため、警告が出なくなるわけです。
ちなみに"-R"は"Remove"の頭文字です。
コメント
コメント一覧 (1件)
[…] 参考サイト:https://www.radical-dreamer.com/programming/ssh-warning/ […]