SSH接続がタイムアウトで自動的に切断されないようにする

SSH接続がタイムアウトで自動的に切断されないようにする サーバー

SSHでAWSやconohaのVPSに接続している際に、一定期間何もしないとタイムアウトで自動的に接続が切れる。

そのたびに何度も再接続するのは手間が掛かるので自動的に切断されないようにする設定です。

自動切断の原因

もともとSSHは接続を持続するように設計されているのですが、SSHでクライアントからサーバーに接続している経路上に存在するルーターやファイヤーウォールが一定時間通信のないコネクションを切断してしまうことにより、SSHの自動切断という現象が起こります。

つまり、SSHの自動切断の原因はルーターやファイヤーウォールです。しかし一定時間通信のないコネクションを切断するというのはいたって正常な行為であり、SSHの自動切断を防止するには一定期間で定期的に通信を行えば自動切断を回避できます。

対策

対策方法は2通りあります。どちらの対策を行ってもSSHの自動切断が回避可能です。

SSHサーバー側での対策

SSHには「ClientAliveInterval」と「ClientAliveCountMax 」という設定値があり、設定された秒数ごとに応答確認を行い、応答が無い場合は自動的にタイムアウトで切断するという機能があります。この機能をSSHの自動切断回避に利用します。

それぞれの機能の詳細です。

  • 「ClientAliveInterval」:ここで指定した秒数ごとに応答確認を行う。
  • 「ClientAliveCountMax 」:応答確認を行う回数。

何も設定しない場合のデフォルト値は以下の通りです。

  • 「ClientAliveInterval」のデフォルト値:0(※0だと何もしない)
  • 「ClientAliveCountMax 」のデフォルト値:3

つまり、何も設定していない場合は応答確認を行わず、その結果SSHの接続が切れてしまうので以下の設定をSSHの設定ファイルに追加します。

追加したらSSHを再起動します。

これでOKです。

今後は120秒ごとに応答確認の通信を行いますのでクライアント側からSSHを切断しない限りタイムアウトにはならずに接続は維持されます。

もし何かしらの原因によりネットワークが切断されてしまった場合などでも、3回繰り返して応答が無ければ自動切断してくれるのでSSHの「ゴーストユーザー」が残る事もなく安心です。

SSHクライアント側での対策

SSH接続で利用するターミナルソフトの簡単な設定でSSHの自動切断を回避することができます。

PuTTYでの設定方法

メニューの「Connection」をクリックし、「Options controlling the conection」画面を開きます。

「Sending of null packets to keep session active」の「 Seconds between keepalive (0 to turn off)」の値をデフォルトの「0」から任意の値(120など)に変更して「Open」をクリックして接続します。

PuTTYでのSSHタイムアウト防止設定

Tera Termでの設定方法

メニューの「設定」→「SSH」を開きます。

Tera TermでのSSHタイムアウト防止設定(1)

ハートビート(keep-alive)の秒数を設定して「OK」をクリックします。(デフォルト値:60)

Tera TermでのSSHタイムアウト防止設定(2)

メニューの「設定」→「設定の保存」をで設定した内容を保存します。

Tera TermでのSSHタイムアウト防止設定(3)

RLoginでの設定方法

「Server Select」から選択してサーバーを「編集」をクリック。(※新規サーバーの場合は[新規(N)]をクリック)

RLoginでのSSHタイムアウト防止設定(1)

「プロトコル」→「SSH」の「KeepAliveパケットの送信間隔(sec)」にチェックを入れて秒数を設定して「OK」をクリックします。(デフォルト値:300)

RLoginでのSSHタイムアウト防止設定(2)

まとめ

SSH接続の自動切断を防止する際は、SSHサーバーの設定変更が可能ならば設定ファイル(/etc/ssh/sshd_config)を編集してSSHサーバー再起動。

SSHサーバーの設定を変更できないなら利用しているターミナルソフトの設定変更で対応。

以上で解決です。

タイトルとURLをコピーしました