わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

VirtualBox 4.0の勘所(4):仮想マシンにSSH接続

仮想マシンとしてVine Linuxを入れ,ログインできるようになり,Guest Additionsをインストールしたのですが,そのままではホストから仮想マシンへのアクセスができません.とくに,SSHは使えるようになりたいものです.
ホスト側で,ポート転送(port forwarding)の設定をすれば,いいようです.まずは

を読みながら,手元であれこれしてみたものの,どうもうまくいきません.しかし,ここで得た知識と,

を組み合わせると,あっさり成功したので,ここで報告します.

手順

1. 仮想マシンはシャットダウンし,「VirtualBox マネージャー」も終了させます.
2. 仮想マシンのvboxファイルを探します.「デフォルト 仮想マシン フォルダ」から見つければいいのですが,仮想マシンを入れたあとで,デフォルトのフォルダを変更した場合には,環境変数HOMEの下のVitualBox VMsを探す必要もあるでしょう*1
3. vboxファイルをテキストエディタで開きます.中身はXML文書です.
4. 「」の直前の行に,例えば以下の記述を挿入し,保存します.

      <ExtraDataItem name="VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/GuestPort" value="22"/>
      <ExtraDataItem name="VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/HostPort" value="2222"/>
      <ExtraDataItem name="VBoxInternal/Devices/pcnet/0/LUN#0/Config/ssh/Protocol" value="TCP"/>

補足:

  • 仮想マシンのネットワーク設定で,「アダプタ 1: PCnet-FAST III(NAT)」とだけ書かれていれば,上の内容をそのままでOKだと思います.なお,ネットワーク設定がどうなっているかを見るだけなら,VirtualBox マネージャーを起動して,仮想マシンを選択すれば参照できます*2
  • 3箇所ある「ssh」は,設定ファイル内で同一文字列にしていれば任意と思われます.GuestPortの値の「22」を例えば「80」に変え,仮想マシン側でサーバを立ち上げれば,HTTPアクセスも可能です.複数の仮想マシンで別々に入りたければ,「2222」の数値を変更しておくべきですね.
  • 「pcnet/」の直後の数字について,「1」では失敗,「0」で成功しました.それと,Intelもののアダプタを選択した際,「pcnet」を「e1000」に変更したのでは,うまくいきませんでした.
  • 不適切な設定をした場合,仮想マシンのシャットダウン時(おそらくスナップショット作成時にも),その設定がvboxファイルから削除されます*3

5. ホストの2222番ポートが,仮想マシンの22番ポートに結びつけられたので,例えばホスト側でCygwinを起動し,「ssh -p 2222 localhost」を実行すると,おなじみの,SSHサーバ鍵の確認メッセージが出ました.あとは所定の手続き(パスワード入力を含む)で,SSHログイン完了です.
うまくいかなかった場合は,以下の点を確認するのがいいと思います.

  • ホスト側のポート番号は,上記設定の「(略)HostPort」の値と一致しているか
  • 仮想マシンSSHサーバが動いているか*4

複数の仮想マシンを起動し(もちろんホスト側ポート番号は別々に設定しておき),同時にSSHログインできることも,確認しました.少々不気味なのは,それぞれで/sbin/ifconfigを実行すると,「inetアドレス:10.0.2.15」と同じIPアドレスが表示されることです.繰り返しになりますがそれでも,同時SSHログインに成功したわけですし,それぞれでapt-get updateなどの外部アクセスもできました.

*1:終わってしまえば馬鹿馬鹿しい話.HOMEの下に.VirtualBox(先頭のドットに注意)というフォルダもでき,その中にVirtualBox.xmlというファイルがあるのですが,これは全体設定と思われます.今回の作業では,いじりません.翌朝追記:この中で「.vbox」を探すと,所在が簡単に見つかりました.

*2:ただし設定を変更したいだとか,どんな選択肢があるのかを見たいときには,仮想マシン起動中や,スナップショットを「保存」している状態ではダメで,仮想マシンをシャットダウンしておく必要があります.

*3:NTEmacsで開いたあと,M-x auto-revert-modeをしていたので,容易に気づきました.このモード,便利すぎますね.

*4:仮想マシンで端末を起動し,「ssh localhost」を実行すれば,確認できます.