【ssh】Keep Alive(定期的にパケットを流して切断を防ぐ)
問題
なにもしないで数分経過すると、ssh 接続が固まったり、切断されたりします。
packet_write_wait: Connection to xxx.xxx.xxx port 22: Broken pipe
vimでファイルを開きっぱなしにしてそのままにしていた時など、まあまあ面倒です。
切断されないようにできますか?
答え
クライアント側でできる対応
OpenSSH FAQ に以下のように書いてあった。
これはふつう、通信がないと TCP 接続をタイムアウトさせてしまう パケットフィルタか NAT デバイスの影響です。サーバ側の sshd_config にある ClientAliveInterval を許可するか、あるいはクライアント側の ssh_config にある ServerAliveInterval を許可してください。
上のいずれかのオプションを許可し、送信間隔をその接続のタイムアウト時間よりも 短く設定することで、接続テーブル内でつねにその接続を「新鮮」に保つことができるようになります。
ある環境の、クライアント側でやってみたら、確かに固まらなくなった。
ServerAliveInterval 60(適当な値に)
サーバーから応答がないときに再試行してほしいときは回数を指定できる。
ServerAliveCountMax 3 (適当な値に)
サーバー側でできる対応
VPS環境などサーバー側の設定が自由に変更できるなら、サーバー側からクライアント側に応答確認をするように設定できる。
設定例) /etc/ssh/sshd_config
ClientAliveInterval 60
ClientAliveCountMax 3
設定を変更したら、設定を反映させるためにsshdを再起動する。
コメント