TL;DR(結論)
この問題は ~/.ssh/known_hosts
に同一のIPの古い接続情報が残っているために発生します。
解決方法は簡単です。
- 該当ファイルの確認
cat $HOME/.ssh/known_hosts
- 確認したIPを以下で削除
ssh-keygen -R {対象IPアドレス}
このコマンドを実行してから再度SSHを試みることで、問題が解消されます。
遭遇するケース
この問題に遭遇する一般的なケースには以下があります
- AWSのElastic IPを使い回している場合
- 異なるEC2インスタンスに同じElastic IPを割り当てると、ホストキーが変更されます。
- EC2インスタンスのアクセスキーを変更した場合
- セキュリティ上の理由でアクセスキーを更新すると、ホストキーも変更されます。
- EC2インスタンスを再作成した場合
- 同じIPアドレスを使用しても、新しいインスタンスは異なるホストキーを持ちます。
問題の詳細な説明
SSHクライアント(例:VSCode、ターミナル)は、接続先のサーバーの公開鍵を確認します。
この公開鍵は通常、初回接続時に ~/.ssh/known_hosts
ファイルに保存されます。
サーバーのIPアドレスが同じでもホストキーが変更されると(上記のケースなど)、SSHクライアントはセキュリティ上の理由から接続を拒否します。
コマンドの説明
ssh-keygen -R {IPアドレス}
-R
オプションは "remove" の意味です。- 指定したIPアドレスに関連する既知のホスト鍵を
~/.ssh/known_hosts
ファイルから削除します。 - これにより、次回の接続時に新しいホストキーを受け入れることができます。
セキュリティ上の注意
新しいホストキーを受け入れる際は、そのホストが本当に期待しているものであることを確認することが重要です。
特に重要なシステムに接続する場合は、ホストキーのフィンガープリントを別の安全な方法で確認することをお勧めします。
まとめ
SSH接続時の「リモート ホスト キーが変更された」エラーは、主にサーバー側の変更によって引き起こされます。
ssh-keygen -R
コマンドを使用することで、簡単かつ迅速に問題を解決できます。
以上、どなたかの参考になれば幸いです。