SSHの既存の鍵を消して、再度アクセスする

きっかけ

EC2のパブリックIPを固定IP(EIP)にアタッチして、SSH接続をしようとした際に発生しました。

解決方法

yourPC@mbp .ssh % ssh-keygen -f "/Users/yourPC/.ssh/known_hosts" -R "
XXX.XXX.XXX.XXX"

ssh-keygenという、Linuxコマンド(SSHの公開鍵と秘密鍵をつくる)を利用して解決を行う。

コマンド 内容
-f ファイルを指定する(生成または読み出すファイルを指定)。ただし、併用するオプションによって意味が変化する(通常は鍵ファイル)
-R 指定したホストに属する鍵を全て取り除く(-fオプションでknown_hostsファイルを指定可能

原因

SSH接続をする際、初回接続時にホストの公開鍵が保存される。(/Users/yourPC/.ssh/known_hosts)
次回ホストへ接続する際に、保存されている公開鍵を比較して同じホストか確認するが、今回はIPアドレスを振り直した状態(EIPによるIP変更)になったため、ホストの公開鍵自体が変わってしまったため、エラーメッセージが発生してしまいました。
なので、「-R」で公開鍵を消去してから、接続を計りました。

具体的な解決

1.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 /Users/yourPC/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /Users/yourPC/.ssh/known_hosts:14
ECDSA host key for XXX.XXX.XXX.XXX has changed and you have requested strict checking.
Host key verification failed.

@@@@@@@@@@@@@@@@@@@@@@@
警告:リモートホストの識別が変更されました!
@@@@@@@@@@@@@@@@@@@@@@@
誰かが何か厄介なことをしている可能性があります!
誰かが今あなたを盗聴している可能性があります(man-in-the-middle攻撃)!
ホストキーが変更されたばかりである可能性もあります。
リモートホストから送信されるECDSAキーのフィンガープリントは次のとおりです。
*******:***********************************************.
システム管理者に連絡してください。
このメッセージを取り除くには、/ Users / yourPC / .ssh / known_hostsに正しいホストキーを追加します。__
/Users/yourPC/.ssh/known_hosts:14の問題のあるECDSAキー
XXX.XXX.XXX.XXX__のECDSAホストキーが変更され、厳密なチェックを要求しました。
ホストキーの検証に失敗しました。

こちらの仕組みは中間者攻撃の対策としてとられている措置とのことでした(知りませんでした。)


2.ターミナルにエラーに表示されているように、14行目に問題がありそうです。ただしエディターで表示して逐一削除しなくとも、「-R」を利用してIPを記述すれば解決ができます。

yourPC@mbp .ssh % ssh-keygen -f "/Users/yourPC/.ssh/known_hosts" -R "XXX.XXX.XXX.XXX"

# Host XXX.XXX.XXX.XXX found: line 14
/Users/yourPC.ssh/known_hosts updated.
Original contents retained as /Users/yourPC/.ssh/known_hosts.old

3.改めてSSH接続をして、接続ができたら問題の解決です

yourPC@mbp .ssh % ssh -i 秘密鍵.pem ec2-user@XXX.XXX.XXX.XXX

The authenticity of host 'XXX.XXX.XXX.XXX (XXX.XXX.XXX.XXX)' can't be established.
ECDSA key fingerprint is ***:***********************************.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'XXX.XXX.XXX.XXX' (ECDSA) to the list of known hosts.
Last login: Fri Jun 11 12:25:01 2021 from 〜.net
__|  __|_  )
_|  (     /   Amazon Linux 2 AMI
___|\___|___|
https://aws.amazon.com/amazon-linux-2/

おわりに

AWSでEC2つくって、EIPつけてとポチポチ作成していますが中間者攻撃の対策であったりと、エラーから学べることは多いです。
それに今回はエラーメッセージそのものに、解決方法が書いてあったりしました。
こういったエラーやハンズオンを記事にしていければなと思います。


参考

「SSHホスト鍵が変わってるよ!」と怒られたときの対処

Last modified: 2021-06-14

Author