現象

AWS上でWebサバを構築しています。リリース時は、新規サーバを起動して、sshで接続して、ヘルスチェックのパスに問題ないかをチェックします。問題ない場合、ALBのターゲットグループを新規サーバに切り替えてから、旧サーバを削除します。

次のようなエラーメッセージが出てSSH接続が失敗してしまいます。
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

原因

AWS上でサーバを作ったり消したりしていると同じIPアドレスでサーバが用意される事があります。

SSHで接続する際には接続先毎にローカルに情報(RSA公開鍵のフィンガープリント)が保管されるため、SSH接続時には、以前保存したこの情報と、いままさに接続しようとしているサーバの情報が一致しているかを確認することで、ユーザ(クライアント)が別のサーバへ接続してしまうことを防ぐ。そのため、IPアドレスの振り直しやOS再インストールなどでホスト鍵が変わってしまった場合、エラーが出ます。

検証

ssh接続したことがない場合、known_hostsを確認する

確認コマンド:

find / -name known_hosts

結果:
なし

ssh接続してから、known_hostsを確認する

確認コマンド:
find / -name known_hosts
結果:
/root/.ssh/known_hosts

cat /root/.ssh/known_hosts
10.20.0.180 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBAIoQWaVPAlTJnkt6d0pLs/CBZKNRObbwZUKVOHE27sTIXTbPdJMgCqoZkwrL59US2X3Ax42KcR2yIx5jn5rnxw=

この状態で、同じIPで新規サーバを起動し、ssh接続するとエラーが出ます。

ssh ec2-user@10.20.0.180 -i Bastion01.pem
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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 RSA key sent by the remote host is
9a:33:31:63:13:85:d3:32:c1:bb:d9:0f:cc:d9:c5:f6.
Please contact your system administrator.
Add correct host key in /Users/hideaki/.ssh/known_hosts to get rid of this message.
Offending RSA key in /Users/hideaki/.ssh/known_hosts:51
Password authentication is disabled to avoid man-in-the-middle attacks.
Keyboard-interactive authentication is disabled to avoid man-in-the-middle attacks.
Permission denied (publickey,password,keyboard-interactive).

解決方法

下記のコマンドを実行して、ローカルに保存しているknown_hostsファイルにある10.20.0.180の行を削除します。
コマンド:
ssh-keygen -R [IPアドレス]

実行例:

ssh-keygen -R 10.20.0.180
# Host 10.20.0.180 found: line 1
/root/.ssh/known_hosts updated.
Original contents retained as /root/.ssh/known_hosts.old
[root@ip-10-20-0-101 WORK]#
[root@ip-10-20-0-101 WORK]# cat /root/.ssh/known_hosts
[root@ip-10-20-0-101 WORK]#

ssh ec2-user@10.20.0.180 -i Bastion01.pem
The authenticity of host '10.20.0.180 (10.20.0.180)' can't be established.
ECDSA key fingerprint is SHA256:ZH3+tL8C0qdKb7DOgVd6+GtgQuUbVOPiRa9X6gd6vQ0.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.20.0.180' (ECDSA) to the list of known hosts.
This system is not registered to Red Hat Insights. See https://cloud.redhat.com/
To register this system, run: insights-client --register

Last login: Tue Jun 22 13:24:26 2021 from 10.20.0.101
[ec2-user@ip-10-20-0-180 ~]$
Last modified: 2021-06-24

Author