Heartbeat(KeepAlive)

SSH通信をしているとき,しばらく操作しないでいるとサーバから切断されることがある(らしい).これはサーバが接続されていないと判断して,SSH通信を終了してしまうかららしい.操作がなされなくとも接続を維持するために,KeepAliveあるいはHeartbeatと呼ばれる信号を送って接続が切れないようにする仕組みがある模様.

SSHでトンネルを掘ってリモートログインしているとき,しばらくリモート画面をいじっていないと切断されていることがある.これはKeepAliveを利用すれば回避できると予想.で,SSH通信のコマンドにオプションをつける.

$ ssh -o ServerAliveInterval=60 -CNfL 5901:192.168.2.38:5901 username@hogehoge.jp

こんな感じか? とりあえず試しに数時間つけっぱにしてみる.

クライアント側だけでなく,サーバ側でも設定をいじれる./etc/ssh/sshd_conf に

ClientAliveInterval 300
ClientAliveCountMax 6

とか書けば良いみたい.

なお,Debian系のsshにはパッチが当てられているらしく,~/.ssh/configに

ProtocolKeepAlives 300

のように書けば良い様子.KeepAlive yesだと,標準では2時間インターバル.長いよ・・・.そして設定かえるのが面倒そう.なお,Cygwin版は自分でパッチ当ててビルドしないとこの記述は使えない.Heatbeatコマンドも同じく使えない.

クライアント側のKeepAliveの間隔は,もちろんサーバが切断を始めちゃう間隔よりも短くなくてはいけない.

なお,puttyにはこの機能が付いているらしい.へぇ・・・.