こんにちは、フルスタックエンジニアのryuです。
今回の記事では、SSH接続をした際に、”REMOTE HOST IDENTIFICATION HAS CHANGED”というエラーが出た場合の対処方法について解説します。このエラーを訳すと、「リモートホストの識別が変わりました」というエラーで、接続先は同じだけれどもSSHサーバーが変わった場合に起こるエラーです。今回はこのエラーの解決方法を解説します。
目次
“REMOTE HOST IDENTIFICATION HAS CHANGED”というエラーの解説
SSHコマンドを実行すると、以下のエラーが起こります。
$ssh user@www.test.com
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 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 ED25519 key sent by the remote host is
SHA256:49BcvGbcQfiABJ93erHyGaKth0YiLtFJhGqqAmL0AAI.
Please contact your system administrator.
Add correct host key in /Users/user/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /Users/user/.ssh/known_hosts:66
Host key for localhost has changed and you have requested strict checking.
Host key verification failed.
これは、SSHサーバーに接続する際に、SSHサーバーの識別子が前回と変わっている場合に起こります。SSHサーバーが変更されたために、エラーが起きているのです。
エラーの対処方法
対処方法としては、以下の3つがあります。
- ~/.ssh/known_hostsの対象の箇所を消す
- ~/.ssh/known_hostsファイルを消す
- ssh-keygenコマンドで削除する
それぞれについて解説します。
対処方法1.~/.ssh/known_hostsの対象の箇所を消す
vi ~/.ssh/known_hosts
ファイルの中身には、IPアドレスと、ホストの鍵が格納されています。接続先のIPアドレスとホストキーを消すと、エラーが起こらなくなります。
対処方法2.~/.ssh/known_hostsファイルを消す
削除の箇所が分からない場合は、ファイルを消すのも1つの方法です。
rm ~/.ssh/known_hosts
ただし、他のサーバーのキーも消してしまうので、影響が出る可能性もあります。
対処方法3.ssh-keygenコマンドで削除する
ssh-keygenでも、known_hostsファイルの対象の箇所を消すことが可能です。
以下のように実行します。
ssh-keygen -R [接続先]
ssh-keygen -R www.test.com
そもそもknown_hostsファイルとは何なのか
エラーを対処するために、known_hostsファイルを編集してきました。そもそもこのknown_hostsファイルとは何なのでしょうか?
known_hostsファイルは、リモートサーバーに接続する際に使用される重要なファイルの1つです。
このファイルは、リモートサーバーのホストキー(公開鍵暗号の一部)と、そのホストキーが信頼できるものであるかどうかを確認するための情報を保存します
リモートサーバーに接続する際、SSHクライアントはサーバーの公開鍵を要求し、それがknown_hostsファイル内で一致するものであるかどうかを確認します。
もし一致しない場合、SSHクライアントは警告を表示し、接続を中止することがあります。これにより、中間者攻撃などのセキュリティリスクを軽減するのに役立ちます。
今回は、上記の原因でエラーが起きていたのです。
ちなみに、known_hostsファイルは通常、ユーザーのホームディレクトリ内に.ssh
ディレクトリ内に格納されます。
まとめ
今回は、SSH接続をした際に、”REMOTE HOST IDENTIFICATION HAS CHANGED”というエラーが出た場合の対処方法について解説しました。
SSHサーバーを構築しているとたまに起こるエラーなので、エラーが起きた際は参考にしてください。
さらにサーバーを学習をしたい人に向けて、InfraAcademyというインフラ学習サービスのご紹介です。
「Linuxの実践的な内容を学習したい」、「apacheの設定を学習したい」
そのようなご要望にお応えして、Linuxやネットワークが学習できるサイト「InfraAcademy」をリリースしました!
InfraAcademyの特徴は以下の通り。
- Linuxやネットワークの知識が体系的に学べる
- LINEやZoomでエンジニアに質問可能
- 全ての講座が閲覧できて、2,480円
- 購入から1週間以内であれば全額返金
Linuxの参考書を購入すると、3,000円以上するものもあります。InfraAcademyでは、2,480円でコンテンツ見放題で現役エンジニアに質問できるサービスまで付いています。
また、購入から1週間以内であれば全額返金保証もあるので安心です。
InfraAcademyでは、一部のコンテンツは無料で閲覧できるので、興味のある方はお試しください。