あ、どもー。よく雨降りましたー
えと
前回の記事にてXperiaから覗けるリモートジュークボックスサーバを
Windows+subsonicで構築しました。
今回は課題の一つだった、屋外からxperiaを使ってこのメディアサーバの電源を入れるとこを実装しようと思います。
シャットダウンまでやっちゃいました。
設定してしまえばなんという事もないわけですが、
今回はネットワーク系に加え、かなりUNIXなシェルも触ることになりますので、
敏感肌なあなたでしたら
「ほぉ、こんなことも出来るんだ、ふーん・・・」
みたく、つまみ食い程度で眺めてクダサイ(ちょ
まずPC側ですが、LAN上に特殊なパケットを流して電源をリモートで起動させるWake On Lanというのを設定して終わり、ですです。
いろんなサイトで説明がありますのでここは省略。
流れはBIOSでWake On Lan系のサービスを有効にし、
ワイヤレスデバイスの設定をデバイスマネージャからやるかんじ。
誤動作防止の為、マウス、キーボードその他からの電源レジュームを禁止しておくとよいです。
↑の設定がきちんと出来ていれば、
LAN内の他の端末からはWOLに対応したソフト等で起動出来るようになります。
問題なのはインターネット側からのルータを経由した電源投入。
マシンを起こす為にMagicPacketという特殊なパケットを
眠っているPCに確実に送る必要があるんですね。
最近のルータであれば問題なくこのあたり設定が可能なのです。
ところが! 我が家のルータは性格が律儀で有名なCTU様なのです。
まー癖がある、を通り越してほぼ「つかえn」
CTU単体ではインターネット外部からWOLの実現は不可能なんです。
という事で、以前から自宅内で動作していたFONに目をつけました。
んでこっからが一応手順?
まず、freeWLANを利用して
FONをちょこっと改造します。あくまで自己責任です、ええ。
freeWLANに関するドキュメントは
http://fon-wiki.maniado.com/index.php?FreeWLANhttp://wiki.fon.com/wiki/FreeWLAN/jaとかを参考に。
物理LANと無線LANをブリッジ接続出来るようになったり、WOLの機能が使えるようになる優れもの。
導入の流れは
http://dex.qp.land.to/pukiwiki/index.php?Memo/FreeWLANここが詳しい。
リビジョン戻してssh使えるようにして、アップデート、ですね。
補足として、freeWLANをインストールする際のスクリプトが
バージョン0.9.6aで固定っぽいので、
wikiのファイルをそのまま使ってしまうとインストール失敗します。
http://addons.freewlan.info/installer/addons-0.9.6_full.tar.gzをDLしてきて、名前を
addons-0.9.6a_full.tar.gz
に変えてからスクリプトまわすといいです。
FONの改造がうまくいきましたら。
管理画面がこんな感じに

とりあえず日本語化とかしたい方はこちら
http://w1.oroti.org/~ant/fwljp/ブリッジ接続しておくと、FONの管理が有線LANから行えるのでおすすめです。
じゃ次。
ばーじょんあっぷしたFONさんにsshでログインします。
ログインIDはroot、パスワードはWEB管理画面のパスワードです。
#最初はadminかも
ログイン後にパスの通っているフォルダ
/bin
とかでいいですね、こちらにリモートPCの起動スクリプトを作ります。
vi /bin/up
とかで。
で、この中身として以下の一行
wol -i 255.255.255.255 起動させたいPCのMACアドレス
MACアドレスは
00:AA:BB・・・こんなのです。
ipconfig /allとかで物理LANインターフェースのMACアドレスが調べられますね。
次に、作成したスクリプトに実行権限を与えます。
chmod 700 /bin/up
次はXperiaのマーケットで高性能sshクライアントの
ConnectBot
をインストールします。
起動後、下のウィンドウ

のところに、この形式を守ってFONのアドレスを入力。
root@FONのIP:22
パスワードはFONの管理パスワードで。
これでXperiaからFONにsshログインできますので
up
と打てば指定したWindows端末が起動します。WOLの設定完璧なら。
試しに起動してるか、テストしておくとよいでしょう。
#FONのwebインターフェースごりごりいじるのも考えましたが
#セキュリティ的な事とかめんd(ry事とか考慮してこの形に・・
んでは次。sshのセキュリティを確保します。
このままrootでパスワードログインをさせるのは
いろーんな意味でコワイのです。
まず、公開鍵の設定をしていきます。
Xperia側で対の鍵を作ります。
http://www.yuriko.net/arc/2009/10/27/connectbot/が参考になりますので、DSAで作ります。
パスフレーズはまーなしでも。のほうがXperiaからだと楽です。
作った公開鍵をメール等でPCに送ります。
送られてきた文字列
ssh-dsa AA・・・とか書いてあるものをすべてクリップボードにコピー。
PCのsshクライアントを利用してFONにログインし、
cd /etc/dropbear
に移動。
vi authorized_keys
とでもしてファイルを作成、クリップボードの内容をペーストします。
chmod 0600 authorized_keys
として属性変更、セキュリティ対策。
このへんは公式のヘルプ(英語)が詳しくて参考になります
http://nuwiki.openwrt.org/oldwiki/DropbearPublicKeyAuthenticationHowtoこれでXperia側から、作成した鍵情報を使ってログインするように
EditHostのところから設定します。
PC側のsshクライアントでも同様に対の鍵を作っておくと楽です。
上のヘルプには
You can repeat this step with every new public key. Each key is appended to the
/etc/dropbear/authorized_keys
file.
とあるので、putty等で対の鍵を作って公開鍵の情報をペーストし、
authorized_keysに追記する感じですね。
cat >> で流し込むか、鍵と鍵の文字列の間がきちんと改行されていればおK。
かならずPCのsshクライアントで鍵を使ったログインが出来るようになっている事を確認してクダサイ。
で、次重要な設定。
FONへの「パスワードログインを禁止」します。
順当にfreeWLANを構築した場合、
/etc/init.d/以下に
S50dropbear
というファイルが出来ているはずです。
dropbearというのがsshサーバの事で、この起動スクリプトを編集します。
vi S50dropbear
case $1 in
start)
というところに
/usr/sbin/dropbear
とか
/usr/sbin/dropbear -p 22 -p $ssh_port
とかsshサーバプログラム本体を呼び出すところがあるので、ここを
/usr/sbin/dropbear
-s/usr/sbin/dropbear
-s -p 22 -p $ssh_port
という風に編集して保存、終了。
一度FONを再起動
reboot
します。-sはパスワードログインを禁止するオプションです。
このへんは
http://mizupc8.bio.mie-u.ac.jp/pukiwiki/index.php?OpenWrt/dropbearが参考になりました。
再起動後、PC等から普通にssh、ログインユーザとしてrootとすると、

こんなメッセージが出てパスワードログイン出来なくなっていればおK。
以降は公開鍵を使ったログインしか出来ないようになります。
#鍵にパスフレーズを設けなかった場合はXperiaからサーバを選択するだけでsshログインでき、非常にスムーズになります!
#鍵オトサナイデネ
ここまでセキュリティを強化したらCTU管理画面にログインし、
外部ポート22へのアクセスをFONにポートフォワード設定します。
CTUは相変わらず律儀、というかアレなんで、
CTUでDHCPを稼働させ、MACアドレスを指定してIPを払い出しするように
設定を行っていないとうまくフォワード出来ないのでこのようにします。
FONのweb管理画面でInternetConnectionをDHCPにしときます。
このあたりは環境依存な話で。
んで、最後。ついでにシャットダウンも実現しときましょう。
FONからWindows7をシャットダウンするには
WindowsにTelnetサーバを構築します。
http://axela5004.blog74.fc2.com/blog-entry-422.htmlファイアウォールの設定のところで、接続許可するIPアドレスとして
ローカルLANのセグメント全体か、FONのアドレスのみ、とかにしておきましょう。
再びFONのsshコンソールからの作業。
対話型のプログラムをスクリプト化する為に
expectを導入します。
zenさんという方が若干内部バージョンが違うっぽいですが
FON用のパッケージを作って下さっているので(感謝!)
http://ugokeba.seesaa.net/article/128341609.htmlここを参考にして、
http://kzen.my-sv.net/fon-ipk/ここから
tcl_8.4.19_mips.ipk
と
expect_5.43_mips.ipk
をとってきて、tcl→expectの順番でインストールします。
$ cd /tmp
$ wget
http://kzen.my-sv.net/fon-ipk/PACKAGE FILE NAME
$ ipkg install PACKAGE FILE NAME
このインストール作業は結構時間かかります。
途中Timeoutとかしてる場合があり、
/tmpの中身が揮発?している可能性もあるので、
DLし直して根気よく再セットアップで。
expectが無事インストールされるとスクリプトを作っていきます。
/bin/down
とかでいいでしょう。
vi /bin/down
#!/bin/expect
set timeout 10
spawn telnet 落としたいマシンのIPアドレス
expect "login: "
send -- "ユーザ名\r"
expect "password: "
send -- "パスワード\r"
expect "C:\Users\ユーザ名>"
send -- "shutdown /s\r"
expect eof
上記を保存。
パスワードをテキストファイルに直接書いてるので
ユーザおよびパスワードの扱いには注意で。
このスクリプトの意味は、
「Windows7にてるねっとして、loginって聞いてきたらユーザ名返して、ぱすわーど?って聞いてきたらパスワード返して、
DOSのプロンプトが帰ってきたらシャットダウンコマンドを実行して
ログアウトしてね」
という感じです。後は同様に
chmod 700
で実行権限付与。
ハイ、もう脳バーンになりそうな程行程長かったですが、
ここまで出来れば
XperiaでFONにsshログイン(公開鍵仕様、パスワード無しで簡単ワンクリックログイン(はぁと))
upでメディアサーバ(Windows7)をWOLで起動
downでメディアサーバにTelnetでシャットダウン
が実現出来ます。。。ながっ
作っちゃえば多分専用ブラウザとか起動してFONのwebインターフェースつつくより数段楽だと思いますので、環境ある方は是非チャレンジ!