WindowsからVM上のLinuxをSSH経由で利用する開発環境の構築

VirtualBox orVMWare PlayerでLinux環境をWindows 7×64に構築するメモ
今回はVirtualBoxTurnkey Linux coreを使って構築した。

と見せかけて、最終的にはUbuntu Server使う事にしたので途中まで飛ばしていいです。

なんでVMを使ってまでやるかというと
WIndowsでのCUIはConsole+NYAOSでコンソールとしていいのですが、node.jsなど実行できないものが出てきたので、VM上に環境を作ることにしました。
Cygwin : 食わず嫌いでしたが、食ったら嫌いでした。
coLinux : 64 bitが非対応でした。

必要なもの

  • VirtualBox(仮想化ソフトウェア)
  • TurnKey Core(サーバー、そこら辺の便利なソフトが入ってる感じのディストリビューション)
  • RLogin(SSHクライアント)

Turnkey Linux coreはVM向けにovf形式でも配布してるので、OVFと書かれてるリンクからturnkey-core-バージョン-lucid-x86-ovf.zipをダウンロードして使う。

2011-04-20-ss11

VirtualBoxを起動してメニューの仮想アプライアンスのインポートから、先ほどのovfをインポートすると自動でTurnKey Coreが仮想マシン一覧に並ぶ。(設定するのは仮想マシンの名前ぐらい)

2011-04-20-ss8

起動するとパスワードの設定などがあって、パスワード以外はEnter押してればいいと思う。
設定が終わると起動して下のようなメニュー画面が表示される。

2011-04-20-ss12
メニューを終了させると、CUIで操作できるけどキーやマウスの関係で扱いにくいのでSSHからアクセスして操作する。

RLoginを起動して、サーバの接続から新規追加して、プロトコロルにSSH、アドレスにはLinuxサーバーのIPアドレス、ユーザーはrootで、パスワードは最初の起動時に設定したものを入力して接続する

2011-04-20-ss13

2011-04-20-ss9

こっからはサーバー{ゲスト側(Ubuntu)}の設定

まずはrootだとあんまりよくないので、ユーザー(azuという例で)を追加、そのユーザーのパスワードを設定する。

root@core ~# useradd -m -s /bin/bash azu
# ユーザーazuを追加する。mオプションがないとHOMEディレクトリが追加されなかった
root@core ~# ls /home/     
azu/
# HOMEディレクトリがあるのを確認
root@core ~# passwd azu
# パスワードの設定
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
useraddの-sオプションでログインシェルを決めないとかなり不自由な感じになります。

後からログインシェルを決める場合はchsh -s /bin/bash などとする。
と、このままTurnkey Linuxを使おうと思っていたんだけど、ファイル共有でどうしても上手くGuest Additionsのインストールが上手くできないのと、なんかroot前提なような環境で他とは少し違った感じで躓く事がありそうだったので、Ubuntu Serverに切り替えました。
 

Ubuntu Serverを使って環境構築(改めて)

(ちょこちょログにTurnkeyが出てくるのはそのときの名残です。プロンプトの文字は無視してください)
(Turnkey Linuxの事は忘れてください)
必要なもの

ホストOS

ゲストOS

Windows 7 64bit

Ubuntu Server

で環境を作っていきます。
Ubuntu Serverのisoをダウンロードしてきて、新規仮想マシン作成から適当な配分で仮想マシンを作りますが、ネットワークをブリッジ接続に変更しないとUbuntu ServerのIPアドレスが10.0.2.25とかいう感じになってSSH接続できなかったので、ネットワークをブリッジ接続に変更して作成しました。
image
追記: ネットワークがNATでもポートフォワーディングすればSSH接続できました(こっちの方がいいかも)
ネットワークの設定をNATにしてから、高度の設定でポートフォワーディングにホストには任意のポート、ゲストにはUbuntu側に設定したSSHのポート番号(デフォルト22)を設定します。
2011-04-23-ss1
この状態で、RLoginに接続IPアドレスに127.0.0.1 or localhost で、ポート番号にはホストに設定したポート番号を入力すればSSH接続できます。

任意のポートだけを開く感じで使えるのでこっちの方がいい気がします。同様の方法でWebのポートである8080もポートフォワーディングに設定しました。

 

仮想マシンを起動したUbuntu Serverのインストール画面でユーザーアカウントの作成ができるので、下のガイドに従って入力していくだけで先ほどのTurnkey Linux でのユーザーアカウント追加までと同じ事ができます。

注意点としては18.サーバーソフトウェアの選択画面でOpenSSH SERVERを選択してSSHでつなげるようにしておくと楽でいいです(スペースキーで選択チェックが入る)

忘れた場合でも

sudo apt-get install openssh-server
とすればいいだけなので、そこまで問題ないです。
Ubuntu Serverはそのまま使うと文字化けして扱いにくいので、RLoginを使ってアクセスすれば文字化け対策をしなくてもいいので、最初からRLoginを使って作業します。

サーバのIPアドレスは

ifconfig

で、わかると思います。

初期設定なら、インストール時に入力したアカウントとパスワードでログインできると思います。



SSHで鍵を使って接続

セキュリティ的にパスワードではなく鍵でSSHをつなぐのが普通だと思うので、SSHの鍵設定をします。

root@core ~# cd /home/azu/
# ユーザのHOMEへ
root@core /home/azu# mkdir .ssh
root@core /home/azu# cd .ssh
# .sshディレクトリを作って移動
root@core azu/.ssh# ssh-keygen -t rsa
# 鍵を生成する
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): turnkey # ファイル名は適当に
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in turnkey.
Your public key has been saved in turnkey.pub.
root@core azu/.ssh# ls
turnkey  turnkey.pub
# .sshディレクトリに秘密鍵と暗号鍵が生成される
root@core azu/.ssh# mv turnkey.pub authorized_keys
# turnkey.pub を authorized_keysにリネームする
root@core azu/.ssh# ls
authorized_keys  turnkey
鍵は生成して公開鍵(authorized_keys)の登録ができたので、秘密鍵をホスト側のPCに転送します。

RLoginにファイル転機能がついてるので、.sshディレクトリにある秘密鍵(turnkey)をホスト側に移動させます。

ゲスト側(Ubuntu)に秘密鍵は置いておく必要はないので、秘密鍵(turnkey)は転送したら削除します。

2011-04-20-ss15
次にSSHの設定で、鍵以外でのログインはできないように/etc/ssh/sshd_configを書き換えます。
# それぞれをnoに書き換える 
PermitRootLogin no  
PasswordAuthentication no  
UsePAM no
# 面倒だったので一度rebootした

自分はportも22から適当なものに変更しました。

後はRLoginに秘密鍵を登録してSSHログインするだけです。
SSH Identity keyに転送した秘密鍵をセットして、ポートを変えた場合はポートも任意のものに設定してから接続します。
共有フォルダの設定
Ubuntu Server にはGUIがないので、Guest AdditionsのインストールもCUIで行わないといけません。
ここで結構はまりました

が大変参考になった。

まずは適当な共有フォルダを設定しておく。

image

そして、起動してるVMのメニューにある”Guest Additionsのインストール”を押しておく。

何にも起きてないように見えるが、CDドライブにCDが入った感じになる。

sudo apt-get install build-essential linux-headers-`uname -r`
sudo apt-get install xserver-xorg xserver-xorg-core
#必要なものを先にインストールしておく
###################
# ここまでにGuest Additionsのインストールを押してマウントの準備が必要
###################
mkdir /tmp/cdrom
sudo mount /dev/sr0 /tmp/cdrom
# Guest Additionsのディスクをマウントする
cd /tmp/cdrom
sudo bash VBoxLinuxAdditions.run  --nox11
sudo addgroup --system --quiet vboxsf
sudo usermod -a -G vboxsf azu # ユーザーをvboxsfグループに加える
sudo reboot
# リブート

azu@ubuntu:/media$ ls
cdrom  sf_azu
自動マウントするためにはユーザーをvboxsfグループというグループに加える必要があることに注意。

リブートすると/media以下にsf_フォルダ名が現れてアクセスできるようになる。
大体ここまで基礎的な環境ができあがるので、後は好きなソフトを入れていく感じになると思います。(一応スナップショットをとっておきました)
Ubuntu Server + VirtualBox GUIありでメモリ使用量は45MBぐらい、VBoxHeadless.exeで画面表示なしで起動させると30MBになって結構メモリ使用量は少ない。

VirtualBoxをタスクトレイに入れて管理するにはVBoxHeadlessTrayがおすすめ。ヘッドレスモードやシャットダウンとなどの操作もタスクトレイで行えるのでとてもいい。

ついでにNode.jsの環境も作ってみる

Node.jsは直接入れるよりもバージョン管理するツールから入れるのがいいらしいので、naveかnvmを使う事にした。

naveは何かインストールが面倒だったので、nvmを使う事にした。

nvmは自動でnpmもインストールしてくれるので便利。

azu@ubuntu:~$ sudo apt-get install build-essential libssl-dev git-core 
azu@ubuntu:~$ sudo apt-get install curl
# 必要なものを先にインストールしておく
azu@ubuntu:~$ git clone git://github.com/creationix/nvm.git ~/.nvm          
azu@ubuntu:~$ cd .nvm/
azu@ubuntu:~$ bash ./nvm.sh
azu@ubuntu:~$ nvm install latest
# 最新のnodeをインストールする
azu@ubuntu:~$ node -v           
v0.4.5

毎回 bash ./nvm.sh 実行するのは手間なので。

.bashrc を編集して、

. ~/.node/nvm.sh
nvm use latest

を書き加えておきます。

雑記

VMWareはスタートアップにいろんなもの生やすし、ダウンロードも登録必要で面倒なので、VMWareよりもVirtualBoxの方が好みでした。

目標としては、Cygwin HereみたくWindowsのエクスプローラー上のコンテキストメニューから、SSHクライアントを開いてそのときに同時に共有フォルダのsf_azu以下にある同じフォルダまで移動したいのだけど、お客様の中でよい方法をお知りな方がいらしゃったらお願いします。

e.g)

windows : C:\Users\azu\Downloads のコンテキストメニューからSSHクライアントを開く

Ubuntu   : 渡されたパスを元に /media/sf_azu/Downloads をカレントディレクトリにする

SSHクライアントのマクロみたいので実現するのかな。

Turnkey Linuxの

JavaScriptに関する最新の情報はJSer.infoで週一で配信しています。

プロフィール: azu(アズ)
JavaScriptやObjective-CやWeb系色々について。
  • OS:Windows Vista, 7、Max OS X
  • ブラウザ:Firefox
  • Twitterのアカウントはこちら
  • azu_re
  • メールアドレス(Twitterの方が確実)
  • info@ドメイン名
リンク