Debian 13(Trixie)に SSH 接続したまま、しばらく操作せずに放置していると、 キー入力をしても反応せず「画面が固まったように見える」現象が起きることがあります。
一見すると SSH サーバーがフリーズしたように見えますが、 多くの場合これは SSH接続が裏で切断されているだけ です。
本記事では、Debian 13 で SSH 接続が切れてしまう原因と、 長時間放置しても安定して使えるようにするための設定方法を解説します。
なぜSSH接続は「固まる」のか
SSH はデフォルト設定のままだと、一定時間まったく通信がない場合、 以下のような流れで接続が切断されることがあります。
- ユーザー操作がなく通信が発生しない
- NAT / ルーター / FW が不要な接続と判断
- 通信経路のどこかで TCP セッションが破棄される
- SSH クライアントは切断を検知できず、操作不能になる
このため、実際には接続は切れているのに、 画面上では「固まった」ように見える状態になります。
これは Debian 13 固有の問題ではなく、 近年のネットワーク環境全般で起きやすい挙動です。
対策① SSHサーバー側で keepalive を有効にする(基本)
まずは Debian 13 側の SSH サーバー設定を変更します。
sudo nano /etc/ssh/sshd_config
以下を追記、またはコメントアウトを解除して設定します。
ClientAliveInterval 60
ClientAliveCountMax 3
それぞれの意味は以下の通りです。
- ClientAliveInterval:60秒ごとに生存確認パケットを送信
- ClientAliveCountMax:3回応答がなければ切断
定期的に通信が発生するため、途中のネットワーク機器に切断されにくくなります。
設定後は sshd を再起動します。
sudo systemctl restart ssh
対策② SSHクライアント側でも keepalive を設定する(最重要)
ネットワーク環境によっては、サーバー側設定だけでは不十分な場合があります。 そのため、クライアント側設定も併用するのが最も安定します。
一時的に指定する方法
ssh -o ServerAliveInterval=60 user@server
恒久的に設定する方法(おすすめ)
nano ~/.ssh/config
Host *
ServerAliveInterval 60
ServerAliveCountMax 3
これで、すべての SSH 接続に keepalive が適用されます。
補足① TCPKeepAlive について
sshd_config には TCPKeepAlive という設定もあります。
TCPKeepAlive yes
ただしこれは OS レベルの keepalive で、 通信間隔が非常に長く(数時間単位)、 実運用では効果が薄いことが多いです。
SSH の安定化には ClientAliveInterval / ServerAliveInterval の方が実用的です。
補足② それでも切れる場合
以下の環境では、60秒でも切断されることがあります。
- モバイル回線(LTE / 5G)
- 公衆Wi-Fi
- VPS事業者側のファイアウォール
- 自宅ルーターの厳しい TCP タイムアウト設定
その場合は、間隔を 30 秒に短くすると改善することがあります。
ClientAliveInterval 30
ServerAliveInterval 30
実務的対策:tmux を併用する
SSH はどれだけ対策しても、完全に切断を防ぐことはできません。 そのため、実務では tmux や screen の併用が必須です。
sudo apt install tmux
tmux
tmux を使えば、SSH が切れても作業セッションは保持され、 再接続後にそのまま作業を再開できます。
まとめ
Debian 13 で SSH 接続を放置すると固まる問題は、 SSH やネットワークの仕様によるもので、設定変更でほぼ確実に改善できます。
- sshd 側で
ClientAliveIntervalを設定 - クライアント側でも
ServerAliveIntervalを設定 - tmux を併用して作業を保護
この3点を押さえておけば、長時間のサーバー作業でも安心です。
コメント