SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
技術者募集中

【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を再起動する。

関連するメモ

コメント