2009/09/02(水)SSHの自動再接続

SSHの自動再接続のメモ


かなり用途限定なので、個人的メモとして。一応前提条件があって以下の通り。
  1. LAN内にサーバーが置いてあって、外部に公開しない。
  2. でもたまに外からメンテナンスしたい。
  3. サーバーといっても常時起動されているわけではなく、アドレスもDHCPで取得。
  4. USB-HDDだったりするので、物理的にあちこち移動して起動される。
こんなサーバーなので、サーバー自身でLANの外側へSSHコネクションを張ってもらい、それをたどって外側からLAN内のサーバーにアクセスするようにする。当然外側にはSSHを受けるマシンが必要となる。



自動再接続と言ってるが、これを自動接続と再接続で分けて考える。

まずは自動接続の部分。
接続時にパスワードを要求されるといろいろ面倒なので、最初はその辺りの設定から。
参考
sshでパスワードなしにログインするには
http://www.atmarkit.co.jp/flinux/rensai/linuxtips/447nonpassh.html
この辺を参考に、よく設定し忘れるのはchmodなので注意。googleでssh パスワードなしとかで検索するとこれでもか、ってぐらい出てくるので適当にいくつか見ておけば問題ないと思う。


次に、起動時のsshの実行だが、これは起動時に実行すればいいので、/etc/rc.localに書く。今回のサーバーはUbuntuデスクトップなので、システム>設定>セッション、に記載。
参考
システム起動時に SSH トンネルを掘らせる
http://d.hatena.ne.jp/kamicup/20090619/1245405583
fとNオプションは使ったことなかったのでmanを見ると、backgroundで実行するのと、コマンドを実行させないようにするためのものらしい。ちなみにpでポートを80に指定しているのは、LAN内から外部に出るとき22が宛先だと出れない設定にしてあるから、という個人的事情な追加設定。これでnblog.jpマシンからlocalhostの10022にsshでアクセスするとLAN内のサーバーに接続される。
/usr/bin/ssh -f -N -p80 username@nblog.jp -R 10022:localhost:22


次に再接続の部分。
同じようなことを考える人はいるもので、いろいろスクリプトを書いてる人がいて苦労しそうかなと思いきや、今はautosshというコマンドで一発解決。使い方は単純でsshを単にautosshに置き換えるだけ。というわけで以下のコマンドを起動時に実行するように設定。
/usr/bin/autossh -f -N -p80 username@nblog.jp -R 10022:localhost:22

これで、LAN内のサーバーを起動すると、起動時に外側にSSHコネクションを張るようになり、また回線が切断されても復帰時に再接続してくれる、とても便利。