SSH KeepAlive設定の仕組み|接続切断を防ぐための設定方法を解説

SSH KeepAlive設定の仕組み

SSH KeepAlive設定の仕組みを理解して安定した接続を実現しよう

SSH接続を利用してサーバ管理を行っていると、しばらく操作していないだけで接続が切断されたり、VPN環境やクラウド環境でセッションが突然終了したりすることがあります。

このような現象は必ずしもSSHサーバの問題とは限らず、途中に存在するルータやファイアウォール、NAT機器などが原因となるケースも少なくありません。

こうした問題を軽減するために利用されるのがKeepAlive設定です。

KeepAliveを適切に設定することで、SSH接続の維持や不要な切断の防止が可能になります。

本記事ではSSH KeepAliveの仕組みや設定方法、タイムアウト設定との違いについて詳しく解説します。

KeepAliveとは

KeepAliveとは、接続が生存していることを定期的に確認する仕組みです。

SSH通信では一定時間通信が行われないと、中継機器が接続を切断することがあります。

そこで定期的に通信を発生させることで接続状態を維持します。

特に以下の環境で効果があります。

  • VPN接続
  • クラウド環境
  • NAT環境
  • 長時間ログ監視
  • SSHトンネル利用時

なぜ接続が切断されるのか

SSHサーバが正常でも接続が切断されることがあります。

主な原因です。

  • ファイアウォールのセッションタイムアウト
  • NATテーブルの削除
  • VPN装置のタイムアウト
  • 無通信状態の長時間継続

SSH自体ではなくネットワーク機器が原因になることも多くあります。

KeepAliveの種類

SSHには主に2種類のKeepAlive設定があります。

  • ServerAliveInterval
  • ClientAliveInterval

名前は似ていますが役割が異なります。

ServerAliveIntervalとは

SSHクライアント側の設定です。

クライアントからサーバへ定期的な確認パケットを送信します。

接続維持で最も利用される設定です。

ServerAliveIntervalの設定例

クライアント設定ファイルです。

~/.ssh/config

設定例です。
Host *
    ServerAliveInterval 60

60秒ごとに確認パケットを送信します。

ServerAliveCountMaxとは

応答がない場合に何回まで再試行するか指定します。

ServerAliveCountMax 3

60秒設定の場合は約3分後に切断されます。

ClientAliveIntervalとは

SSHサーバ側の設定です。

サーバからクライアントへ確認パケットを送信します。

設定ファイルです。

/etc/ssh/sshd_config

以下のように設定します。
ClientAliveInterval 300

ClientAliveCountMaxとは

サーバ側で利用する再試行回数です。

ClientAliveCountMax 3

応答がない場合に切断されます。

ServerAliveとClientAliveの違い

項目ServerAliveClientAlive
設定場所クライアントサーバ
送信元クライアントサーバ
目的接続維持接続管理

用途が異なるため混同しないようにしましょう。

TCP KeepAliveとは

SSHにはTCPレベルのKeepAliveも存在します。

設定例です。

TCPKeepAlive yes

ただし現在はServerAliveIntervalが利用されることが多くなっています。

TCPKeepAliveとServerAliveIntervalの違い

TCPKeepAliveはOSのTCP機能を利用します。

一方でServerAliveIntervalはSSHプロトコルレベルで動作します。

現在はServerAliveIntervalの方が信頼性が高いとされています。

SSHトンネル利用時の重要性

ポートフォワーディングではKeepAlive設定が重要です。

例えば以下のような接続です。

# ssh -L 3306:localhost:3306 user@server

長時間利用する場合はKeepAlive設定が推奨されます。

VPN環境での活用

VPN環境では無通信状態が続くと接続が切断されることがあります。

その場合は以下のような設定が有効です。

ServerAliveInterval 30
ServerAliveCountMax 3

接続維持に役立ちます。

AWSやAzureでの利用

クラウド環境でもKeepAlive設定は有効です。

特に踏み台サーバ経由で長時間作業する場合に利用されます。

安定した接続を維持できます。

実務でよく使われる設定

一般的な例です。

Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3

多くの環境で利用されています。

設定確認方法

現在の設定を確認できます。

# ssh -G server | grep alive

適用されている設定が表示されます。

よくあるトラブル

KeepAliveを設定しても切断される

途中のネットワーク機器が原因の場合があります。

  • VPN装置
  • ロードバランサ
  • ファイアウォール

ネットワーク全体を確認しましょう。

接続が頻繁に再接続される

間隔が短すぎる可能性があります。

適切な値へ調整しましょう。

タイムアウト設定との違い

前回解説したSSHタイムアウト設定との違いです。

タイムアウト設定は「放置セッションを切断する」ための設定です。

KeepAlive設定は「接続を維持する」ための設定です。

目的が正反対である点に注意しましょう。

セキュリティ面での考慮

KeepAliveは利便性向上に役立ちますが、長時間接続を維持することになります。

そのため以下との組み合わせが推奨されます。

  • 公開鍵認証
  • タイムアウト設定
  • MFA
  • アクセスログ監査

バランスの良い運用が重要です。

実務でのおすすめ設定

一般的には以下が利用されます。

ServerAliveInterval 60
ServerAliveCountMax 3

SSHトンネルやVPN環境では特に有効です。

環境に応じて調整しましょう。

まとめ

SSH KeepAlive設定は、無通信状態による不要な切断を防ぐための重要な機能です。

ServerAliveIntervalやClientAliveIntervalを利用することで、VPN環境やクラウド環境でも安定したSSH接続を維持できます。

一方でSSHタイムアウト設定とは目的が異なるため、両者を適切に理解して使い分けることが重要です。

快適で安全なSSH運用のために、KeepAlive設定を活用してみましょう。