sshのポートフォワーディングを毎回コマンド打って起動するのが面倒なので,接続を維持するためのシェルスクリプトを書いた.
#! /bin/sh while true; do # ここにフォワーディングのコマンドを書く ssh -C -N -L 50143:localhost:143 hostname sleep 1 done
といっても,たいしたことなくて,無限ループの中でプロセスを起動してるだけ.プロセスがなんらかの理由で終了したらループが回って起動しなおす.
このままだと,ネットワークがないとsshが失敗しまくって無駄が多いので,一定試行回数を超えたらしばらくおとなしくなるようにする.
#! /bin/sh TRYCOUNT=0 TRYMAX=5 while true; do # ここにフォワーディングのコマンドを書く ssh -C -N -L 50143:localhost:143 hostname TRYCOUNT=`expr $TRYCOUNT + 1` sleep 1 # TRYMAX回,接続を試みる if [ "$TRYCOUNT" -ge "$TRYMAX" ]; then TRYCOUNT=0 sleep 600 # ネットワークが回復まで10分くらい待ってみる fi done
これを,とりあえず,forwarding.shという名前で保存して,
$ forwarding.sh &
とかで動かしてみている.
特定のプログラムを起動しつづけるって,良くある処理だと思うんだけど,もっと良い方法があればぜひ教えて欲しいところです.
追記
autosshというコマンドをmrmtさんに教えてもらった!mrmt++
$ autossh -f -M 50000 -C -N -L 50143:localhost:143 hostname
とかやると,うえのスクリプトと同じようにssh接続を維持してくれるようです.コマンドいっぱつでできたのね.これは便利.-Mで指定しているポートはsshがちゃんと繋がっているかをautosshが確認するために使っているようです.なので,適当なポートを指定すればOK.