2014年8月18日月曜日

VirtualBoxにインストールしたゲストOSへホストOS上からSSHでログインする方法

VirtualBoxのコンソール画面は使いにくいよね


VirtualBoxには標準でコンソール画面がついている。ので、ここから必要な操作を行うことは可能である。可能ではあるが使いにくい。ホスト側に便利で使い慣れたターミナルアプリケーション(*1)がインストールされているならば、使い慣れたそれを使いSSHでゲストOSにログインして作業したいと考えるのが人情というもの。

そこでこれらのターミナルアプリケーションでゲストOSにログインしようと試みるのだけれど、ゲストOSのネットワークを「NAT」にしている場合はこの試みはうまくいかない。ちょっとした設定が必要になる。

設定自体はサクッといける


設定自体は簡単。まずVirtualBoxを起動し、「設定」をクリック。


設定ダイアログが表示されたら、「ネットワーク」を選択する。「アダプター1」が有効化されておりNATになっていることを確認(*2)。「高度」をクリックしてオプション設定を表示させる。


オプション設定が表示されたら、「ポートフォワーディング」をクリック。


下記のような画面になったら、右側にある緑色の「+」なアイコンをクリック。


1行追加されるのでホストポート(*3)を「8022」、ゲストポート(*4)に「22」と入力し「OK」ボタンをクリックする。

これで、ホストマシンの「8022」ポートに接続すると、ゲストマシンの「22」ポートに転送されるようになる(*5)。この「8022」は別に空いていれば何でも良い。「2222」とかでもいい。


この状態でVMを起動する。起動が終わったら、ホスト側にインストールされているターミナルアプリケーションより「ssh -l root -p 8022 localhost」(*6)のように入力し、エンターキーをッターンする。

初回接続時のみ(*7)、「Are you sure you want to continue connecting(yes/no)?」というプロンプトが表示されるので、「yes」と入力しエンターキーをッターンする(*8)。


すると、ログインユーザ(今回はroot)のパスワードを聞かれるので、入力してからエンターキーをッターンする。このタイミングでMacならキーチェーンのダイアログが表示されるかもしれないけど、その時はキャンセルをクリック。


SSHでログインできるはず。ためしにいろいろなコマンドをタイプして、確かにゲストOSにログインしていることを確認してみる。


これで作業がやりやすくなった。

VirtualBoxのコンソール画面が邪魔!


さて、こうなるとVitrualBoxに標準で用意されているコンソール画面が邪魔である。単純に起動するとコイツが必ず出てくるし、閉じようとするとVMがシャットダウンされてしまう。

幸いなことにコンソール画面を表示せずにVMを起動する方法が用意されている。

VBoxManageコマンドを使う方法


ホストのターミナルからVBoxManageコマンドを使うって方法があるらしい。コマンドの書式は「VBoxManage startvm {VM名 | UUID} ---type=headless」。この「--type=headless」というのがキモ。

たとえば、「CentOS7」という名称で作ったVMなら下記のコマンドで起動することができる。

$ VBoxManage startvm "CentOS7" --type=headless
Waiting for VM "CentOS7" to power on...
VM "CentOS7" has been successfully started.

ちなみに終了は「VBoxManage controlvm "CentOS7" poweroff」でできる。細かいオプションは「VBoxManage help」で確認できる。いろいろコントロールできるっぽいので、みておくとよいかも。このコマンドについてはVirtualBoxのGUIを起動していなくても使えるので、一度VMさえ作ってしまえばコマンド一発で起動できるので便利。

VBoxHeadless


もうひとつターミナルから使えるコマンド。それが「VBoxHeadless」。コマンドの書式は「VBoxHeadless --startvm {VM名 | UUID}」。

たとえば、「CentOS7」という名称で作ったVMなら下記のコマンドで起動することができる。

 VBoxHeadless --startvm "CentOS7"
Oracle VM VirtualBox Headless Interface 4.3.14
(C) 2008-2014 Oracle Corporation
All rights reserved.

前述の「VBoxManage」との違いは、「VBoxManage」がすぐにプロンプトに戻ってくるのに対して「VBoxHeadless」はフォアグランドで実行され続けるという点。「VBoxHeadless」で起動した場合はCtrl+C等で抜けるとVMが中断状態になる。

ネット上でいろいろ調べた範囲では、こちらのコマンドだと詳細なログが見られるらしく、起動時の問題解決などに便利だとか。ので通常は前述の「VBoxManage」を使った方がよさげな気がする。ちなみにこのコマンドもVirtualBoxを起動する必要はない。

Shiftキーを押しながら「起動」


これはVirtualBoxのGUIを起動した状態でのお話。やり方は簡単でShiftキーを押下しながら「起動」をクリックするだけ。これでOK。


*1:Mac OS Xなら標準で「ターミナル」ってのがあるし、ボクはiTermってのを愛用している。WinならPuttyとかTera Termとかあるよね
*2:別にアダプター1である必要性もないんだけど、とりあえず普通に進めていればコイツがNATになっているはずなので
*3:すなわちVirtualBoxがインストールされている今自分が触っているマシン
*4:すなわちVirtualBox上にインストールされたOS
*5:ゲストOSのWebサーバにホストからアクセスしたい場合は、ホストポートを「8080」、ゲストポートを「80」等にすればOKって理屈
*6:「-l」がログインユーザの指定、「-p」がポートの指定な
*7:正確にはホスト側のknown_hostsにゲスト側の情報が保存されていないか前回保存された内容と異なる場合のみ聞かれる
*8:本当はこの作業はちゃんとフィンガープリントを確認してやらなきゃいけないんだけども、今回は接続先が正しいことが明白であるので割愛する

0 件のコメント:

コメントを投稿