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

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 300

300秒ごとに確認を行います。

ClientAliveCountMaxとは

応答がない場合に何回まで許容するか設定します。

ClientAliveCountMax 3

3回応答がなければ切断します。

原因5 TCPKeepAlive設定

TCPレベルで接続維持を行う設定です。

TCPKeepAlive yes

通常は有効になっています。

原因6 クライアント側のKeepAlive未設定

クライアント側にもKeepAlive設定があります。

SSH設定ファイルで指定できます。

ServerAliveInterval 60

60秒ごとに応答確認を送信します。

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 -ant

TCPセッションの状態が表示されます。

デバッグモードで確認する

クライアント側で実行します。

# ssh -vvv user@server

切断直前の状況を確認できます。

tmuxやscreenを利用する

長時間作業では非常に重要です。

# tmux

または
#screen

SSH切断後も作業を継続できます。

実務で最も多い原因

経験上は以下が多く見られます。

  • NATタイムアウト
  • VPN切断
  • KeepAlive未設定
  • Wi-Fi不安定
  • サーバ高負荷

まずここを確認しましょう。

実務で推奨される設定

サーバ側です。
ClientAliveInterval 300
ClientAliveCountMax 3

クライアント側です。

ServerAliveInterval 60
ServerAliveCountMax 3

接続維持に効果があります。

まとめ

SSH接続が途中で切断される原因は、ネットワーク機器、VPN、ファイアウォール、KeepAlive設定、サーバ負荷など多岐にわたります。

特に実務ではNATタイムアウトやKeepAlive未設定が原因となるケースが多く見られます。

まずはSSHログやデバッグオプションを利用して原因を切り分けることが重要です。

また長時間作業を行う場合はtmuxやscreenを併用し、万一の切断に備えた運用を行いましょう。