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 6060秒ごとに確認パケットを送信します。
ServerAliveCountMaxとは
応答がない場合に何回まで再試行するか指定します。
ServerAliveCountMax 360秒設定の場合は約3分後に切断されます。
ClientAliveIntervalとは
SSHサーバ側の設定です。
サーバからクライアントへ確認パケットを送信します。
設定ファイルです。
/etc/ssh/sshd_config
以下のように設定します。
ClientAliveInterval 300ClientAliveCountMaxとは
サーバ側で利用する再試行回数です。
ClientAliveCountMax 3応答がない場合に切断されます。
ServerAliveとClientAliveの違い
| 項目 | ServerAlive | ClientAlive |
|---|---|---|
| 設定場所 | クライアント | サーバ |
| 送信元 | クライアント | サーバ |
| 目的 | 接続維持 | 接続管理 |
用途が異なるため混同しないようにしましょう。
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 3SSHトンネルやVPN環境では特に有効です。
環境に応じて調整しましょう。
まとめ
SSH KeepAlive設定は、無通信状態による不要な切断を防ぐための重要な機能です。
ServerAliveIntervalやClientAliveIntervalを利用することで、VPN環境やクラウド環境でも安定したSSH接続を維持できます。
一方でSSHタイムアウト設定とは目的が異なるため、両者を適切に理解して使い分けることが重要です。
快適で安全なSSH運用のために、KeepAlive設定を活用してみましょう。






