SSHを使用してホストOSからゲストOSに接続する
環境
ホストOS: Windows11 (23H2)
ゲストOS: Ubuntu (22.04.5 LTS)
仮想化ソフトウェア: VirtualBox (7.1.4)
※( )内はバージョン情報です。
このコンテンツでは、SSHを使用してホストOSから仮想化環境上に構築されたゲストOSに接続する方法について学習します。
SSHとは
SSH(Secure Shell)とは、リモートホスト間の通信において高いセキュリティを実現するプロトコル、またはソフトウェアを指します。
認証機能や暗号化により、リモート操作を安全に行うことが出来ます。
会社の個人PCから、遠隔にあるサーバーにログインする際などに使用します。
ここでは、ホストOS(Windows)のターミナルエミュレーターから、ゲストOS(Ubuntu VM)にSSHコマンドでログインする方法について説明していきます。
SSHを使用してホストOSからゲストOSに接続する
ターミナルエミュレータとOpenSSH Client (ホストOS側の準備)
今回は、ホストOSがWindowsなのでターミナルエミュレータとしてPowerShellを使用します。
また、SSHを使用する接続ツールとして、OpenSSH Clientが必要です。
こちら(OpenSSH をインストールする)を参考にインストールしてください。
OpenSSH Serverのインストールとポート転送設定(ゲストOS側の準備)
OpenSSH Serverのインストール (ゲストOS)
ゲストOS(Ubuntu)において、OpenSSH Serverをインストールします。
1 |
sudo apt update |
1 |
sudo apt install openssh-server |
NATを使用したポート転送の設定(VirtualBox)
VirtualBoxのデフォルトのネットワークモードは、NAT(Network Address Translation)です。
NATモードで、ホストOSからゲストOSに接続するためには、ポート転送の設定が必要になります。
詳細はこちら(6.3.1. Configuring Port Forwarding with NAT)を参照ください。
以下のように設定すると、ホストOSのポート222番への接続をゲストOSのポート22番に転送することができます。
※ ネットワークモードはNAT以外もあります。詳しくはこちら(6.2. Introduction to Networking Modes)を参照ください。
SSHでログイン
実際に、SSHコマンドを使用してホストOSからゲストOSへログインしてみましょう。
下記コマンドの<username>
には各自のユーザー名を設定してください。
接続先はホストOSのループバックアドレス127.0.0.1を使用しますが、ホストOSのIPアドレスでも構いません。
1 |
ssh -p 222 <username>@127.0.0.1 |
SSHでは、ユーザー認証の前に、サーバーの正当性を確認するためのホスト認証が行われます。
クライアント(今回の場合はホストOS)がSSH接続する際に、サーバー(今回の場合はゲストOS)の公開鍵がクライアント側に登録されている公開鍵と一致するか確認することで、偽サーバーへの接続を防止しています。
ただし、初回の接続ではサーバーの公開鍵がクライアント側に登録されていないので、以下のようなメッセージが表示されます。
「yes」と入力して公開鍵をクライアント側に登録しましょう。
1 2 3 4 |
PS C:\\Users\\Avinton\> ssh -p 222 <username>@127.0.0.1 The authenticity of host '\[127.0.0.1\]:222 (\[127.0.0.1\]:222)' can't be established. ECDSA key fingerprint is SHA256:spOwG14NaHEz5qdvCNv0xMuhXAlh0gfTiSfS8QCPvvI. Are you sure you want to continue connecting (yes/no/\[fingerprint\])? |
その後、ユーザー認証として、パスワード認証を行います。パスワードを入力すると、ゲストOSにログインできます。
以下のようにPowerShellからUbuntuに接続できていれば成功です。
トラブルシューティング
SSHによる接続が出来ない場合は、以下のコマンドがトラブルシューティングに有用です。
ホストOS側で-vオプションを使用するとデバックメッセージを表示できます。
1 |
ssh -p 222 <username>@127.0.0.1 -v |
ゲストOS側でssh.serviceのログを確認する。
1 |
journalctl -u ssh.service -f |