WindowsからVM上のLinuxをSSH経由で利用する開発環境の構築
VirtualBox orVMWare PlayerでLinux環境をWindows 7×64に構築するメモ
今回はVirtualBoxとTurnkey 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をダウンロードして使う。
VirtualBoxを起動してメニューの仮想アプライアンスのインポートから、先ほどのovfをインポートすると自動でTurnKey Coreが仮想マシン一覧に並ぶ。(設定するのは仮想マシンの名前ぐらい)
起動するとパスワードの設定などがあって、パスワード以外はEnter押してればいいと思う。
設定が終わると起動して下のようなメニュー画面が表示される。
メニューを終了させると、CUIで操作できるけどキーやマウスの関係で扱いにくいのでSSHからアクセスして操作する。
RLoginを起動して、サーバの接続から新規追加して、プロトコロルにSSH、アドレスにはLinuxサーバーのIPアドレス、ユーザーはrootで、パスワードは最初の起動時に設定したものを入力して接続する
こっからはサーバー{ゲスト側(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
後からログインシェルを決める場合はchsh -s /bin/bash などとする。
Ubuntu Serverを使って環境構築(改めて)
- VirtualBox(仮想化ソフトウェア)
- Ubuntu Server (ゲストOS)
- RLogin(SSHクライアント)
ホストOS |
任意のポートだけを開く感じで使えるのでこっちの方がいい気がします。同様の方法でWebのポートである8080もポートフォワーディングに設定しました。
- VirtualBox + CentOSでNAT接続のポートフォワーディングを行う方法 – 大人になったら肺呼吸
- VirtualBox4.04にCentOS5.5をインストール – sdhrの日記
- VirtualBox 4.0.2のゲストにsshで接続してみる。 « chocokanpan BLOG
注意点としては18.サーバーソフトウェアの選択画面でOpenSSH SERVERを選択してSSHでつなげるようにしておくと楽でいいです(スペースキーで選択チェックが入る)
忘れた場合でも
sudo apt-get install openssh-server
サーバのIPアドレスは
ifconfig
<p>
で、わかると思います。<br /> <br />初期設定なら、インストール時に入力したアカウントとパスワードでログインできると思います。<strong></strong>
</p>
<p>
<strong><br /> <br />SSHで鍵を使って接続</strong>
</p>
<p>
セキュリティ的にパスワードではなく鍵でSSHをつなぐのが普通だと思うので、SSHの鍵設定をします。
</p>
<div>
<pre id="codeSnippet" class="csharpcode">root@core ~<span class="rem"># cd /home/azu/</span>
# ユーザの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
<div>
鍵は生成して公開鍵(authorized_keys)の登録ができたので、秘密鍵をホスト側のPCに転送します。<br /> <br /><a href="http://nanno.dip.jp/softlib/man/rlogin/">RLogin</a>にファイル転機能がついてるので、.sshディレクトリにある秘密鍵(turnkey)をホスト側に移動させます。 </p> <p>
ゲスト側(Ubuntu)に秘密鍵は置いておく必要はないので、秘密鍵(turnkey)は転送したら削除します。</div> <div>
<a href="https://efcl.info/wp-content/uploads/2011/04/2011-04-20-ss15.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="2011-04-20-ss15" border="0" alt="2011-04-20-ss15" src="https://efcl.info/wp-content/uploads/2011/04/2011-04-20-ss15_thumb.png" width="240" height="115" /></a>
</div>
<div>
次にSSHの設定で、鍵以外でのログインはできないように/etc/ssh/sshd_configを書き換えます。
</div>
<div id="codeSnippetWrapper">
<pre id="codeSnippet" class="csharpcode"><span class="rem"># それぞれをnoに書き換える </span>
PermitRootLogin no
PasswordAuthentication no
UsePAM no
面倒だったので一度rebootした
<p>
自分はportも22から適当なものに変更しました。
</p>
</div>
<div>
後はRLoginに秘密鍵を登録してSSHログインするだけです。
</div>
<div>
SSH Identity keyに転送した秘密鍵をセットして、ポートを変えた場合はポートも任意のものに設定してから接続します。
</div>
<ul>
<li>
<a href="http://d.hatena.ne.jp/Fiore/20080228/1204174833">Ubuntuでsshdの設定をしてリモートから接続できるようにする – そ、そんなことないんだから!</a>
</li>
<li>
<a href="http://blog.myfinder.jp/2010/09/vpsssh.html">myfinder’s blog: さくらのVPSを借りたら真っ先にやるべきssh設定</a>
</li>
</ul>
<div>
<strong>共有フォルダの設定</strong>
</div>
<div>
Ubuntu Server にはGUIがないので、Guest AdditionsのインストールもCUIで行わないといけません。
</div>
<div>
ここで結構はまりました
</div>
<ul>
<li>
<a href="http://amis-annex.posterous.com/virtualbox-4xguest-ubuntu-server">virtualbox 4.x/Guest ubuntu-server で共有フォルダを使う – As mind is suitable…</a>
</li>
<li>
<a href="http://blog.brettalton.com/2010/04/28/installing-guest-additions-in-virtualbox-for-an-ubuntu-server-guest/">Articles • brettalton.com</a>
</li>
</ul>
<p>
が大変参考になった。
</p>
<p>
まずは適当な共有フォルダを設定しておく。
</p>
<p>
<a href="https://efcl.info/wp-content/uploads/2011/04/image1.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="https://efcl.info/wp-content/uploads/2011/04/image_thumb1.png" width="240" height="214" /></a>
</p>
<p>
そして、起動してるVMのメニューにある”<em>Guest Additionsのインストール</em>”を押しておく。
</p>
<p>
何にも起きてないように見えるが、CDドライブにCDが入った感じになる。
</p>
<pre id="codeSnippet" class="csharpcode">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
<div>
自動マウントするためにはユーザーをvboxsfグループというグループに加える必要があることに注意。<br /> <br />リブートすると/media以下にsf_フォルダ名が現れてアクセスできるようになる。
</div>
<div>
大体ここまで基礎的な環境ができあがるので、後は好きなソフトを入れていく感じになると思います。(一応スナップショットをとっておきました)
</div>
<div>
Ubuntu Server + VirtualBox GUIありでメモリ使用量は45MBぐらい、VBoxHeadless.exeで画面表示なしで起動させると30MBになって結構メモリ使用量は少ない。<br /> <br />VirtualBoxをタスクトレイに入れて管理するには<a href="http://www.toptensoftware.com/VBoxHeadlessTray/">VBoxHeadlessTray</a>がおすすめ。ヘッドレスモードやシャットダウンとなどの操作もタスクトレイで行えるのでとてもいい。
</div>
<p>
ついでにNode.jsの環境も作ってみる<br /> <br />Node.jsは直接入れるよりもバージョン管理するツールから入れるのがいいらしいので、naveかnvmを使う事にした。
</p>
<p>
<a href="https://github.com/isaacs/nave">nave</a>は何かインストールが面倒だったので、<a href="https://github.com/creationix/nvm">nvm</a>を使う事にした。
</p>
<p>
nvmは自動でnpmもインストールしてくれるので便利。
</p>
<div id="codeSnippetWrapper">
<pre id="codeSnippet" class="csharpcode">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$ cd .nvm/
azu@ubuntu:
azu@ubuntu:$ bash ./nvm.sh
azu@ubuntu:$ nvm install latest
# 最新のnodeをインストールする
azu@ubuntu:~$ node -v
v0.4.5