English | Japanese
このページの内容は英語版ページとは違います。 パッチのダウンロードは英語版 の方から行ってください。
以下は NetNews (fj.sources) に投稿した文書になります。 `##' で始まる行は追記したものです。
最近無線LANを使い始めまして、やはり盗聴が恐いので Secure Shell で接続しています。 無線LANは電波状況など によってたまに通信路が切れてしまうことがあるのですが、 クライアント側が死んでも、サーバ側のログインシェルがいつ までも残り続けてしまい(*)、なにかと不便だったり、精神的にも 不安だったりします。 (*) TCP socket の keepalive を使っていて、対話処理のアイ ドル状態で切断された場合は、2時間程度でシェルが死にます。 ## 2時間でもシェルが死なないで、システムを止めるまで ## ずっと残り続けることもあります。この方が多いかも ## しれません。 ## 接続中に無線LANカードを引き抜いたりして試してみましょう :) ssh.com SSH1 の sshd には IdleTimeout というオプションが ありますが、これでタイムアウトの時間を極端に短くするだけで は、操作の手を休めることができません。 また、データをクラ イアントに送り続けるプログラムが走っていると、ログインシェル が死ななくなってしまいます。ssh.com SSH2 にはタイムアウト の機能がありません。 そこで、OpenSSH のサーバにタイムアウト機能を付けるパッチを 作成してみました。 無線LANのゲートウェイになるマシンで使うと 便利です。 パッチは以下のサイトから拾ってください。 (ドキュメントは英語で書いてしまって、日本語版は作っていません。 すみません。) http://www.ecip.tohoku.ac.jp/~hgot/sources/openssh-watchdog.html このパッチは ssh に Heartbeat (Keepalive) の機能を、sshd に watchdog timeout の機能を追加します。 ssh は定期的に SSH_MSG_IGNORE メッセージを sshd に送信するようになります。 sshd は入力チャネルを監視していて、一定時間以上何もデータが 届かなくなった時点で子プロセスを kill します。 PuTTY や MindTerm でも Keepalive (socket のとは違う) がサポート されているので、これらの SSH クライアントも使えます。 (TTSSH がサポートしてくれれば…。) また、先人の作った Keepalive の null パケット発信機能は、 元々は firewall 越しの接続が切れてしまうことを防止するのが 目的だったようです。 IPマスカレードやNAT、firewallを介した telnet や SSH の接続が、操作の手を休めている(1〜2時間)と 切れてしまうことがあります。 ssh に追加される Heartbeat 機能 は、こんな場合にも有用です。 例えば % ssh -o 'Heartbeat 1800' ssh_server_name -l user_id とすると、30分ごとに Heartbeat を出すようになります。 ## Firewall越えの接続がタイムアウトになる場合、Firewall ## の設定変更で対応できないかどうか、まずは管理者に相談 ## すべきです。 対策が無理な場合には Heartbeat を使います。