RAMディスクブートのOpenMicroServerでもsshdを使う。¶
OpenMicroServerでsshdを使用するには、ファイルサイズの関係から、普通はCFなどにHDDイメージを展開し、CF/HDDブートしないと出来ない。が、ルータ兼ファイアウォールとして使う場合、それはちょっと無駄が多いので、今まではCFを/mntにマウントして、netfilterのスクリプトを/etc/rc.localから実行する形にしていた。ファームウェアのアップデートには、/etc/inetd.confでコメントアウトしているftpの行を有効にして、/mntのCF領域にアップロードする、という具合。操作はその度に、RS-232でつないで作業する、という感じ。ファームウェアのアップデート程度ならそれでも良いのだけれど、ファイアウォールのポリシーの変更となると、もうちょい頻度が高いので不便。これはやってられん。
ということで、HDDイメージから、sshdのファイルを持ってきて/mntに置いておき、SSD/Linux起動時に展開してsshdを実行させるようにした。
HDDイメージのダウンロード¶
ぷらっとホームのFTPサイトから、ファームウェア一緒に配布されているHDDイメージをダウンロードする。例えば、 現在使用しているファームウェア は2010年4月9日リリースの最新のもの 1 なので、それと一緒にリリースされているHDDイメージ 2 から、base.tgz 3 , etc.tgz 4 をダウンロードする。
ファイルの抽出¶
次のようなスクリプトで抽出。
#!/bin/bash
tar zxvpf base.tgz `tar ztf base.tgz | egrep 'sshd|sftp-server|libpam.so|libcrypto.so|ssh-keygen'`
tar zxvpf etc.tgz `tar ztf etc.tgz | grep ssh`
tar zcvpf oms-ssh.tgz ./usr ./etc
oms-ssh.tgzを/mntの任意のディレクトリ 5 にFTPで転送しておく。
OMSでのファイル展開用スクリプトの用意¶
次のようなスクリプトを/mnt/sshdに用意する。 6
#!/bin/sh
tar zxpf oms-ssh.tgz
chown -R root:wheel usr etc
tar zcvpf distro-ssh.tgz usr etc
このスクリプトは、本来不要なのだが、Debianではwheelグループが無いので 7 chownがコケる。なので、OMS上で実行する必要がある。
ここまでの手順で作ったスクリプトは、ファームウェアがアップデートされる度に行うためのものだ。次のホストキーの作成のため、このスクリプトを実行しておく。
# cd /
# tar zxpf /mnt/sshd/distro-ssh.tgz
ホストキーの作成¶
先ほどの手順で、必要なライブラリとssh-keygenコマンドが展開されているので、ホストキーを作成する。
# ssh-keygen -f /etc/ssh/ssh_host_dsa_key -t dsa -N ''
# ssh-keygen -f /etc/ssh/ssh_host_rsa_key -t rsa -N ''
ユーザの公開鍵の登録¶
OMSではデフォルトでは、/home/user1になっているので、リネームして、.sshディレクトリを作成し、FTPで転送しておいた公開鍵を登録しておく。
# mv /home/{user1,mkouhei}
# usermod -d /home/mkouhei mkouhei
# mkdir /home/mkouhei/.ssh
# chmod 700 /home/mkouhei/.ssh
(mkouhei)# cd ~/.ssh
(mkouhei)# mv id_rsa.pub authorized_keys
/etc/ssh/sshd_configの設定は適宜実施するべし。
sshd起動スクリプトの作成¶
これで準備は整ったので、/mnt以下に、/mnt/sshd.shとして次のスクリプトを用意する。
#!/bin/sh
cd /
tar zpxf /mnt/sshd/distro-ssh.tgz
/usr/sbin/sshd
このスクリプト自体の実行は、/etc/rc.localの一番下にでも追記しておく。
(snip)
/mnt/sshd.sh
RAMディスクへの書き込み¶
今までの作業は、/mnt下以外の変更はリブートすると全てパァである。なので、リブートしてもちゃんと反映されるように変更しておく。/etc/flashcfgに下記を追記しておく。
/etc/ssh
/home/mkouhei
追記したら、RAMディスクに書き込んでおこう。
# flashcfg -s /etc/flashcfg
あとはリブートしてもちゃんと起動することを確認しておこう。
/usr/sbin/sshd等をRAMディスクに書き込めばよいのでは?¶
/usr/sbin/sshdだけならまぁ書き込めるのだが、sshdの起動に必要なlibpam.so, libcrypto.so, さらにsftp-serverなんかも入れると到底空き容量足りないのである。起動時に展開する方が無難。
Footnotes
- 1
- 2
ftp://ftp.plathome.co.jp/pub/OMS400/0.4-RELEASE-20100326/mipsel-oms400.ipv6/binary/
- 3
ftp://ftp.plathome.co.jp/pub/OMS400/0.4-RELEASE-20100326/mipsel-oms400.ipv6/binary/base.tgz
- 4
ftp://ftp.plathome.co.jp/pub/OMS400/0.4-RELEASE-20100326/mipsel-oms400.ipv6/binary/etc.tgz
- 5
ここでは/mnt/sshdとしておこう。
- 6
/mnt/sshd/extract.shとした。
- 7
代わりにadmグループを使う。