ClientAliveInterval 等を設定している SSH サーバに接続すると、何も入力しないまま放置している接続は適当な間隔で強制切断される。
そんなわけでそんな感じのことをググると、ServerAliveInterval 云々を設定して回避しよう的なテクニックがよく出てくるのだが、しかしサーバ側にしてみれば放置したままの接続など切断するに決まってるに決まってるわけで、放置してるのに関わらず無駄にキープアライブパケットは送ってよこすとかそんな虫のいいことは困るのである。
従って、放置した接続が適宜切断されること自体はそれは正しい。ただしクライアント側で困るのは強制切断されて即 ssh が終了するわけではなく、数分間何も受け付けない状態になったあとでやっと Broken Pipe 云々が出る動作だ。これをどうにかできないか。
man ssh して ESCAPE CHARACTERS セクションを見れば全て書いてあるのだが、ssh での接続中には特別な入力シーケンスがあり、例えば Enter、~、. の順で入力するとクライアント側からの強制切断を行える。へー。なんとなく vim での編集中にやっちゃいそうなシーケンスのようなそうでないような。
* * *
適当なマシン A に ssh で接続し、さらにそこから別のマシン B に接続したりなんかしたりの場合。マシン B との接続が切られた際に上記のストロークを入力するとマシン A との接続が強制切断されてしまいますね。うーんまあそりゃそうだよね…。そうではないんだよなー。何をエスケープシーケンスの始まりとするか(上記の例で言う “~”)は接続の際に指定できるので1段めと2段めで変えればいいかもしれない。試してない。