はじめに
実務にて、VirtualBox に共有された OVA(Open Virtual Appliance)ファイルをインポートして仮想マシンを起動後、Visual Studio Code の Remote-SSH からゲスト OS に接続しようとしたところ Could not establish connection エラーが発生、それを解決した情報になります。
「Could not establish connection to “127.0.0.1”: Remote host key has changed, port forwarding is disabled.(127.0.0.1 “への接続を確立できませんでした。リモートホストキーが変更され、ポート転送が無効になっています。)」
環境
- Host OS : macOS Big Sur 11.6.4
- VirtualBox : 6.1.32
- Guest OS : CentOS 7.9.2009
解説
結論から言うと ~/.ssh/known_hosts
を削除して再接続することで解決しました。
known_hosts
とは、接続したことがあるホストキー(サーバーの公開鍵)を保存しているテキストファイルのことです。
下記のコマンドで known_hosts
からホストキーを削除することもできます。
ssh-keygen -R xxx.xxx.xxx.xxx
私の場合は下記のようなコマンドで削除できました。
ssh-keygen -R [127.0.0.1]:2222
エラーが発生した原因は、前に接続したサーバーのホストキーを使って、同じ IP アドレスの新しいサーバーに SSH 接続しようとしているからです。つまり、ホスト認証でサーバーから送信されたフィンガープリント(ホストキーのハッシュ値)が known_hosts
に登録されているホストキーと一致しないからですね。
だから known_hosts
を削除、又はホストキーを削除して再接続することで、新しい接続先のホストキーが known_hosts
に登録されて解決できたということです。
因みに、ターミナルから Guest OS に対して 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
SHA256:xxx.
Please contact your system administrator.
Add correct host key in /Users/xxx/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /Users/xxx/.ssh/known_hosts:3
ECDSA host key for [localhost]:xxx has changed and you have requested strict checking.
Host key verification failed.
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!(警告 : リモートホストの識別が変更されました!)
今回のように、共有されたイメージから開発環境を新しく構築した場合や接続先のサーバーで OS が再インストールされた場合などでホストキーの相違が発生しないか注意すると良いです。
以上です。
おわりに
フィンガープリントは日本語で「指紋」という意味です、そのまんまですね。