ヘッドレス起動したVirtualBoxにホストOSからSSH接続する方法を紹介します。
この記事は誰に向けてか?
VirtualBoxで構築したゲストOSをCUIで操作したい人向けです。
その中でもゲストOSが物理的に離れた場所のハードウェアに構築されていたり、そもそもGUI操作する必要が無い方向けです。
VirtualBoxとは
オープンソースの仮想化ソフトウェアです。
既存のOS上で、別のOSを実行するのに使う仮想環境(仮想マシン)を構築できます。
https://www.virtualbox.org/
動作環境
ホストOS
- Ubuntu 22.04.5 LTS (Jammy Jellyfish)
- OpenSSH_8.9p1 Ubuntu-3ubuntu0.13, OpenSSL 3.0.2 15 Mar 2022
ゲストOS
- Debian GNU/Linux 10 (buster)
- OpenSSH_7.9p1 Debian-10+deb10u4, OpenSSL 1.1.1n 15 Mar 2022
VirtualBox
- 7.1.8 r168469 (Qt6.5.3)
ヘッドレス起動について
VirtualBoxをCUIからのみ操作するのであれば、ヘッドレス起動がおすすめです。
ヘッドレス起動とは、仮想マシンをコンソール画面を表示せずにバックグラウンドで起動する方法です。
VirtualBoxのコンソール画面を表示しないため、ホストOSのリソースを節約できます。
ヘッドレス起動の手順は以下の通りです。
- 事前に仮想OS名を確認しておきます。
例として、この記事では「MyVirtualBox」というOS名で記載していきます。
ubuntu@user:~$ VBoxManage list vms
"MyVirtualBox" {36bec838-2efb-44e5-a227-5ce5b2371733}
- 上記で確認したOS名でヘッドレス起動を行います。
ubuntu@user:~$ VBoxManage startvm MyVirtualBox --type headless
Waiting for VM "MyVirtualBox" to power on...
VM "MyVirtualBox" has been successfully started.
これだけでヘッドレス起動ができます。
- ViratulBoxの終了もコマンドから実行可能です。
ubuntu@user:~$ VBoxManage controlvm MyVirtualBox poweroff
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
ホストOSからVirtualBoxにSSH接続する
事前にゲストOSにSSHサーバーをインストールしておく
既にゲストOSにSSHサーバーがインストールされている方は読み飛ばしてください。
未インストールの場合は、任意のSSHサーバーをゲストOSにインストールします。
ここでは例としてDebian系LinuxディストリビューションでOpenSSHサーバーをインストールするためのコマンドを記載します。
- OpenSSHサーバーをインストールします。
sudo apt install openssh-server
- SSHサービスを有効にし、再起動します。
sudo systemctl enable ssh
sudo service sshd restart
ホストOSからSSH接続するための設定を行う
ヘッドレス起動の動作確認と、ゲストOSでのOpenSSHサーバーのインストールが完了したら、ホストOSからSSH接続するための設定を行います。
- (ホストOS上で)ポートフォワードの設定を行います。
※ホストOSのポートは任意でOKです。ここでは例として「54321」とします。
VBoxManage modifyvm MyVirtualBox --natpf1 "guestssh,tcp,,54321,,22"
このコマンドはホストOSのポート54321に到着するTCPトラフィックを、ゲストOSのポート22に転送する設定を行っています。
これにより、ホストOSのポート54321を通じてゲストOSのSSHサービス(通常ポート22で動作)にアクセスできるようになります。
本設定はVirtualBoxのGUIからも可能です。
- (ホストOS上で)最後に、ホストOSからゲストOSに対してSSH接続します。
ssh -p 54321 v_box_user@localhost
おわりに
Virtual BoxのGUIはホストOSのリソースを多く使用します。
ホストOSのスペックにも依存しますが、3Dアクセラレーションを有効にしないとまともに動かない、なんてことも多々あると思います。
また、共有サーバーなどにゲストOSの環境構築がされていた場合など、物理的に離れた場所からの操作時にも役立つと思います。