VSCode の Remote-SSH でホストキーの変更によるポート転送の無効を解決する方法

はじめに

実務にて、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 “への接続を確立できませんでした。リモートホストキーが変更され、ポート転送が無効になっています。)」

環境

解説

結論から言うと ~/.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 が再インストールされた場合などでホストキーの相違が発生しないか注意すると良いです。

以上です。

おわりに

フィンガープリントは日本語で「指紋」という意味です、そのまんまですね。