Windows Virtual PC に Debian をインストールし、SSH の設定をする

ServersMan@VPS の Entry プランを試しに申し込んでみようかと思っているものの、先日起きた個人情報流出に巻き込まれてしまって普段使っているカードが一時的に使えなくなっているので、取りあえず予行練習ということで Windows Virtual PCDebian をインストールしてみようと思う。

元々 Windows 以外の OS に関してはそんなに詳しくはないものの、Ubuntu は多少使ったことがあるので CentOS よりは Debian の方が慣れやすいだろう、というところで Debian を選んだ。

取りあえずメモリは ServersMan@VPS の Entry プランの基本になる 256MB に。HDD は検索したところによると容量可変のHDDを使うと VirtualPC 2007 で問題が起こっていたらしいので、取りあえず「詳細オプションを使用して仮想ハードディスクを作成する」を選んで、「固定サイズ」、10240MB の HDD を作成。

Debian は 150MB 程の小さい ISO イメージをダウンロードした。
仮想マシンを起動したら ISO イメージを選択。インストーラの起動画面まで到達できた。


2007 だとここからもまだ Kernel Panic が起こったりして noreplace-paravirt というオプションが必要になったりするらしい話も見かけたものの、手元の環境では何も指定しなくても問題なさそうだ。

まず言語選択。ここは迷わず English を選択する。大抵の場合 English の方が都合がいいから。

次に「Choose a country, territory or area」と言われるが、ここでは「other」を選ぶ。
すると「Choose a continent or region」と言われるので、選択肢の中から「Asia」を選ぶ。
こうすると次の「Choose a country, territory or area」ではさっき存在しなかった「Japan」が選べるので選ぶ。

続いてキーボードレイアウトを選ぶ。日本語キーボードを使っているので「Japanese」を選ぶ。

少しの間色々と進行して、ネットワークの設定が始まる。Hostname を決めろと言われるが、その辺は好みで。今回はめんどいので debian にした。ドメイン名は空欄のまま進めた。

次にハードディスクのパーティション設定。全部自動設定にしたいところだが、現状 ServersMan@VPS では swap が使えないようだ(対応を検討中だとか)。
近い環境にするため「Guided - use entire disk」で「IDE1 master (hda) - 10.7 GB Virtual HD」、「All files in one partition (recommended for new users)」と選んで取りあえず分けてもらったあとで「Finish partitioning and write changes to disk」を選ぶ前に swap を消す(カーソルを上に移動すると swap 領域が選べるので、そこで「Delete the partition」すればいいだけ)。swap 領域がない状態で 256MB のメモリではなかなか心細いはずで、インストーラも「Do you want to return to the partitioning menu?」と確認してくるのだが、あえて似た環境にするために No を選んで次に進んでしまう。
次の画面に進むと変更点をディスクに書き込んでいいか確認されるので、ここで Yes と答えると HDD の準備が整い、基本となるシステム部分のインストールが進行する。

ここまで終わると root のパスワードを聞かれる。好みで強固なパスワードを入力。
パスワードの確認もあるので再度パスワードを入力。
更にユーザアカウントの作成に進む。ここも適当に入力。パスワードは root とは違うものを。

次にパッケージマネージャの設定。ミラーサーバーを選ぶ。
オススメらしいので「Japan」「ftp.jp.debian.org」と選んで、proxy は今回は必要ないので空欄で。
あとはネットワークからアレコレ落としてきて勝手にインストールが始まるのでしばらく待つ。

ある程度進むと「Participate in the package usage survey?」と言われるが、今回は No に。

次にインストールするものを選ぶ画面になる。取りあえず全部外す。
最後に GRUB boot loader を MBR に書き込むか聞かれる。これはもちろん Yes で。

これでインストールの工程は全て完了。再起動されてログイン画面まできた。


取りあえず root でログインして、SSH をインストールする。
apt-get install ssh
上手く行ったら、ssh の設定を弄る。作業順としてはポート変更、root でのログインを禁止して、一般ユーザ側で秘密鍵を使ってログインできるようにしたら、パスワードログインも無効化する。
cd /etc/ssh
cp sshd_config sshd_config.default #バックアップ
vim sshd_config #Ubuntuで使い慣れているのでvim
これで sshd_config ファイルが編集できるようになるので、以下の書き換えをしていく。
vim では基本的には i を押して挿入モードにして、方向キーでカーソル移動、
終わったら ESC を押して挿入モードを終了し、:wq を入力して上書き保存する。
#Port 22
Port [任意の数字]
#PermitRootLogin yes
PermitRootLogin no
設定ファイルの書き換えが終わったら sshd に設定を再読み込みさせる。
invoke-rc.d ssh reload
ここまでやったら、テストも兼ねて ssh 経由で一般ユーザアカウントでログインしてみる。
ssh -p [ポート番号] localhost #rootは無効化したので、パスワード入れてもログインできなければ成功
ssh -p [ポート番号] [一般ユーザアカウント名]@localhost
ssh 経由でログインできたら、ユーザ用の鍵ファイルを作成する。
ssh-keygen
保存先を聞かれるが、取りあえずそのまま Enter を押してデフォルト位置へ(~/.ssh/id_rsa)。
次に鍵用のパスフレーズを聞かれるので設定する。なしにもできるけどもちろん設定するに越したことはない。
確認用にもう一度入力すると、実際に秘密鍵と公開鍵のペアが作成される。

次に作成した公開鍵を sshd が読み取れるように設定する。
パーミッションを適切に設定しないと sshd に無視されるので注意。
cd .ssh
touch authorized_keys
chmod 600 authorized_keys
cat id_rsa.pub >> authorized_keys
これで鍵で認証するための準備が整ったが、肝心の秘密鍵をファイルを普段使用するマシンに渡さなければ何もできない。
なのでパスワードログインを無効化する前にパスワードログインして鍵ファイルをダウンロードする。
取りあえずもう一般ユーザからの SSH での操作は必要なくなったので、SSH での接続を終了して root に戻り、SSH の接続先になるIPアドレスを確認する。
exit
ifconfig
eth0 の inet addr に仮想マシンのIPアドレスが表示される。
作業マシンが Windows なので SSH クライアントには PuTTY を使いたい。PuTTY ごった煮版をダウンロードして解凍、psftp.exe を起動する。


「open [IPアドレス] [ポート番号]」のように入力するとサーバに接続される(IPとポート番号はスペースで区切る)。
ログインするアカウントを聞かれるので、ここでもまた一般ユーザアカウント名とパスワードを入れ、接続に成功するとログインしたアカウントのホームディレクトリで「psftp>」のプロンプトで待機状態になる。
cd .ssh !::.sshディレクトリに移動
get id_rsa !::ローカルのディレクトリに id_rsa ファイルをダウンロード
rm id_rsa* !::必要なくなった id_rsa と id_rsa.pub を削除
exit
※「!::」はコメント的なもの

普通に psftp を起動していれば恐らく同じディレクトリに id_rsa が作られているはず。
ただし PuTTY だと OpenSSH 形式の鍵ファイルは直接は扱えないので、puttygen.exe で変換する必要がある。
起動してメニューから [変換] > [鍵のインポート] を選び、さっきダウンロードした id_rsa を開く。


パスフレーズを指定していればパスフレーズを聞かれるはずなので入力する。あとはメニューから [ファイル] > [秘密鍵の保存] を選べば Putty で使える ppk ファイルが保存できる。
この生成された秘密鍵ファイルを使って SSH に接続テストをする。

まず pageant.exe を起動する。するとタスクトレイにアイコンが追加されるので、それをダブルクリックすると「Pageant 鍵の一覧」というダイアログが表示される。


ここで [鍵の追加] を押してさっき生成した *.ppk ファイルを選ぶと、またパスフレーズの入力がある。パスフレーズを保存しておくと、今後は入力する手間を省くことができる。さらに、この Pageant の起動と鍵登録の作業は Windows の起動のたびに必要になるので、この辺を参考にスタートアップに登録しておけばそれも自動化できて便利。もちろんパスワードを自動保存する危険性も含めてその辺はノーリスクというわけではないので、安易に使うのも危ないので注意。

鍵の登録が終わったら、putty.exe を起動する。ホスト名にはさっき ifconfig で調べたIPアドレス、ポート番号には自分で設定したポート番号を入力する。更に左側のツリーから [接続] > [データ] を選んで、「自動ログインのユーザ名」という入力欄があるので、ここに一般ユーザアカウント名を入れておく(入れなくてもいいけど入れた方が便利。ただこの辺もいちいち打った方がもちろん安全ではある)。
そして下にある [開く] ボタンを押すとログインしようとするが、その際 Pageant が「次の鍵への照会を許可しますか?」と聞いてくる。ここで許可すると、パスワードを入れないままログインに成功するはず。

ログインが上手くいけば設定も問題ないようなので、必要なくなったパスワードログインを無効化するため、実験も兼ねて Putty 上で一般ユーザから root へ su で切り替えて、sshd の設定ファイルを再度いじりに行く。
su
Password: [rootのパスワードを入力] #※これはsshでrootにログインしているわけではないので成功する
vim /etc/ssh/sshd_config
設定ファイルの編集画面になるので、パスワードでのログインを無効化する。
#PasswordAuthentication yes
PasswordAuthentication no
設定を書き換えたので sshd で設定ファイルを再読み込みさせる。
invoke-rc.d ssh reload
これで ssh ではもうパスワードでのログインはできないはずなので、試しに ssh で一般ユーザにパスワードログインしてみる。
ssh -p [ポート番号] [一般ユーザアカウント名]@localhost
ログイン出来なければ成功。

これで ssh 周りの設定が完了。これから先は ssh 経由で触ればいいので、仮想PC本体のコンソールは exit でログアウトし、ログイン待ちの状態まで戻しておく。
PuTTY で who コマンドを打つと、PuTTY から接続しているクライアントだけが見えていれば成功。
who
結構長くなったなあ。