[Mac OS X] Mac OS X で daemontools を使って ssh トンネルや ssh socks を張る
■ [Mac OS X] Mac OS X で daemontools を使って ssh トンネルや ssh socks を張る

daemontools-wrapper.zip
(daemontools のためのラッパー)
これは [Mac OS X] シェルスクリプトとかの CUI アプリケーションを Mac OS X 方式の .app にする方法 [簡単 5 ステップ] の応用ネタです。
まとめると、シェルスクリプトを .app 形式にすると Dock から「ログイン時に起動」が選択できてお手軽だねという。
■ daemontools とは
daemontools はサーバプログラムを自動起動するためのプログラムです。 そして、起動したプロセスを監視し続け、たとえプロセスが突然死しても自動的に再起動してくれます。
daemontools 自体のインストールは MacPorts で一発なので簡単です。
% sudo port install daemontools
クセがあるので、動作について理解するまで慣れがいるかもしれませんが、 単機能のプログラムなので一度覚えてしまえば使うのも簡単です。
【参考リンク】
■ 活用例
daemontools に ssh のトンネルや ssh socks の起動をまかせています。
こうすると、 ssh の起動に失敗したときや、ネットワークが切断されたときも daemontools による自動再起動が行われるので、 トンネルの状態を気にする必要が無くなります。
ちなみに ssh socks を使うと、アクセス制限がかかっていたり LAN 内にあったりして、直接アクセス出来ないサーバに対しても、踏み台を利用して透過的にログインすることが可能になります。
■ 問題点
daemontools を使うためには最初に svscan を実行する必要があります。
システム全体に影響するものであれば /etc/rc.local に書けば良いと思いますが、 個人的な ssh トンネルを張るための daemontools を /etc/rc.local に書くのはちょっと……。
crontab の @reboot を使えば良いのですが、 crontab は環境移行時に抜け落ちやすい項目 No.1 なので気が引けます。 テストも面倒です。
■ で
svscan の実行は Dock の「ログイン時に起動」を使用することにします。
[Mac OS X] シェルスクリプトとかの CUI アプリケーションを Mac OS X 方式の .app にする方法 [簡単 5 ステップ] の方法で svscan を起動する .app を作って、ログイン時に起動するようにすれば OK。

■ 実際の .app
使い方
1) MacPorts から daemontools をインストールします。
2) DaemonTools.app を適当な場所にコピーします。
(/Applications とか ~/Applications)
その後、Dock に DaemonTools.app を入れて「ログイン時に起動」するようにします。
3) ~/unix/service を作って、unix/service/svscan.sh をコピーします。
$ mkdir ~/unix/service $ cp unix/service/svscan.sh ~/unix/service
4) ~/unix/service 以下に daemontools 用のプログラムを置いていきます。 以下のような感じになります。
$ find ~/unix/service ~/unix/service/ssh-socks-gardenia ~/unix/service/ssh-socks-gardenia/run ~/unix/service/ssh-tunnel-irc ~/unix/service/ssh-tunnel-irc/run ~/unix/service/ssh-tunnel-pop3 ~/unix/service/ssh-tunnel-pop3/run ~/unix/service/ssh-tunnel-smtp ~/unix/service/ssh-tunnel-smtp/run ~/unix/service/svscan.sh
■ ssh トンネルや socks の書き方
ssh のトンネルの run は以下のようになります。
(gardenia.tkym.org の 10025 番ポートをローカルの 20025 に持ってくる)
#!/bin/sh exec /usr/bin/ssh -oNumberOfPasswordPrompts=0 -N -L 20025:localhost:10025 tekezo@gardenia.tkym.org
ssh で socks するには
#!/bin/sh exec /usr/bin/ssh -oNumberOfPasswordPrompts=0 -N -D 1080 tekezo@gardenia.tkym.org
■ 一口メモ
Dock から起動できる .app の場合、特別な対策をしないと 2 重、3 重の起動が可能になります。
svscan が複数起動すると面倒なので、DaemonTools.app では svok で二重起動を防いでいます。
svdir=`dirname $0`
for d in $svdir/*; do
if [ -d "$d" ]; then
svok "$d" && exit 1
fi
done
Comments for This Page. Date: 2007-07-18 00:00 (JST)