SSH接続が途中で切断される原因|セッションが落ちる時の確認ポイントと対処法

目次
SSH接続が途中で切断される原因と対処方法を理解しよう
SSHでLinuxサーバを操作していると、突然接続が切断されることがあります。
特に長時間作業をしている最中や、大きなファイル転送中に発生すると大きな問題になります。
SSH接続が途中で切断される原因は一つではありません。
ネットワーク機器、SSH設定、ファイアウォール、VPN、クラウド環境など、さまざまな要因が考えられます。
本記事ではSSHセッションが途中で切断される代表的な原因と、その確認方法や対処法について解説します。
まず確認すべきこと
SSH接続が切断された場合は以下を確認します。
- 切断までの時間
- 毎回発生するか
- 特定環境だけか
- エラーメッセージの内容
原因の切り分けに重要な情報になります。
よくあるエラーメッセージ
Connection reset by peer
Connection closed by remote host
Broken pipe
Connection timed outメッセージによって原因が異なる場合があります。
原因1 ネットワーク切断
最も基本的な原因です。
Wi-Fiの切断や回線不安定によってSSHセッションが失われます。
特にモバイル回線やテザリング環境で発生しやすいです。
原因2 VPN切断
VPN経由でSSH接続している場合です。
VPNセッションが切断されるとSSHも同時に切断されます。
企業環境では非常に多い原因です。
原因3 NATタイムアウト
家庭用ルーターやファイアウォールでは一定時間通信がない接続を破棄することがあります。
これをNATタイムアウトと呼びます。
長時間操作しないと接続が切れる場合はこの可能性があります。
原因4 SSHタイムアウト設定
OpenSSHにはアイドル接続を切断する機能があります。
代表的な設定です。
ClientAliveInterval
ClientAliveCountMax設定内容によっては一定時間後に切断されます。
ClientAliveIntervalとは
サーバ側からクライアントへ生存確認を送る間隔です。
例えば以下です。
ClientAliveInterval 300300秒ごとに確認を行います。
ClientAliveCountMaxとは
応答がない場合に何回まで許容するか設定します。
ClientAliveCountMax 33回応答がなければ切断します。
原因5 TCPKeepAlive設定
TCPレベルで接続維持を行う設定です。
TCPKeepAlive yes通常は有効になっています。
原因6 クライアント側のKeepAlive未設定
クライアント側にもKeepAlive設定があります。
SSH設定ファイルで指定できます。
ServerAliveInterval 6060秒ごとに応答確認を送信します。
ServerAliveCountMaxとは
応答がない場合の許容回数です。
ServerAliveCountMax 3接続維持に役立ちます。
クライアント設定例
以下は実務でよく利用される設定です。
Host *
ServerAliveInterval 60
ServerAliveCountMax 3~/.ssh/configへ設定します。
原因7 firewalldの影響
ファイアウォールがアイドル接続を切断する場合があります。
特に企業ネットワークでは発生することがあります。
ログ確認が重要です。
原因8 クラウドロードバランサ
AWSやAzureではロードバランサのタイムアウトが影響することがあります。
長時間接続で発生するケースがあります。
原因9 サーバ負荷
サーバ負荷が高い場合です。
CPUやメモリ不足によってSSHサービスが応答できなくなります。
以下で確認します。
# top原因10 sshd再起動
管理者がsshdを再起動した場合です。
既存セッションが切断されることがあります。
運用中に発生することがあります。
原因11 OS再起動
当然ですがOS再起動でも接続は切断されます。
クラウドの自動更新なども確認しましょう。
原因12 SELinuxの影響
SELinuxポリシーによって通信が制限されるケースがあります。
頻度は高くありませんが確認対象です。
原因13 MTU問題
VPN環境で発生することがあります。
通信途中でパケット断片化が発生し、接続が不安定になります。
特殊なケースですが実務で遭遇することがあります。
原因14 無線LAN環境
Wi-Fiの電波状況が悪い場合です。
通信品質が不安定になり接続が切れることがあります。
ログ確認方法
まずSSHログを確認します。
# journalctl -u sshd
または
# tail -f /var/log/secure切断時刻付近を調査します。
接続状態を確認する
現在の接続状態を確認します。
# ss -antTCPセッションの状態が表示されます。
デバッグモードで確認する
クライアント側で実行します。
# ssh -vvv user@server切断直前の状況を確認できます。
tmuxやscreenを利用する
長時間作業では非常に重要です。
# tmux
または
#screenSSH切断後も作業を継続できます。
実務で最も多い原因
経験上は以下が多く見られます。
- NATタイムアウト
- VPN切断
- KeepAlive未設定
- Wi-Fi不安定
- サーバ高負荷
まずここを確認しましょう。
実務で推奨される設定
サーバ側です。
ClientAliveInterval 300
ClientAliveCountMax 3
クライアント側です。
ServerAliveInterval 60
ServerAliveCountMax 3接続維持に効果があります。
まとめ
SSH接続が途中で切断される原因は、ネットワーク機器、VPN、ファイアウォール、KeepAlive設定、サーバ負荷など多岐にわたります。
特に実務ではNATタイムアウトやKeepAlive未設定が原因となるケースが多く見られます。
まずはSSHログやデバッグオプションを利用して原因を切り分けることが重要です。
また長時間作業を行う場合はtmuxやscreenを併用し、万一の切断に備えた運用を行いましょう。






