Write failed: Broken pipe が出るときの解決方法

  • URLをコピーしました!
目次

1. エラー概要

SSH 接続中に以下のようなエラーが表示され、セッションが強制的に切断されることがあります。

Write failed: Broken pipe

これは、クライアントとサーバ間でセッションがアイドル状態になった際に、サーバ側やネットワーク機器が接続を切断したことが原因です。
解決には、SSH の KeepAlive 設定 やサーバ側の ClientAliveInterval 設定を見直す必要があります。

2. 主な原因と確認方法

2-1. サーバ側の ClientAliveInterval 未設定/短すぎる

  • 対象ファイル
    /etc/ssh/sshd_config
  • 原因
    サーバ側が一定時間応答のないクライアントを切断している。

2-2. ネットワークの不安定さ

  • Wi-Fi や VPN を経由している場合に通信断が発生しやすい。
  • 長時間アイドル状態でパケットが途切れると Broken pipe が発生。

2-3. クライアント側の KeepAlive 未設定

  • 対象ファイル
    ~/.ssh/config
  • 原因
    クライアントから定期的にパケットを送っていないため、サーバや NAT 機器がセッションを切断。

3. 解決方法

3-1. サーバ側で ClientAliveInterval を設定する

  1. SSH 設定ファイルを開く。 sudo vi /etc/ssh/sshd_config
  2. 以下の設定を追加/修正する。 ClientAliveInterval 60 ClientAliveCountMax 3
    • ClientAliveInterval 60 → サーバが60秒ごとにクライアントへ確認メッセージを送信
    • ClientAliveCountMax 3 → 3回応答がなければ切断
  3. SSH を再起動。 sudo systemctl restart sshd

3-2. クライアント側で KeepAlive を設定する

  1. SSH クライアント設定ファイルを編集。 vi ~/.ssh/config
  2. 接続対象のホストに以下を追加。 Host * ServerAliveInterval 60 ServerAliveCountMax 3
    • ServerAliveInterval → 60秒ごとにサーバにパケット送信
    • ServerAliveCountMax → 3回連続で応答がなければ切断

3-3. ネットワーク環境を改善する

  • Wi-Fi が不安定な場合は 有線接続 を利用。
  • VPN 経由で切れる場合は VPN サーバの KeepAlive 設定を確認。
  • クラウド環境の場合は、ロードバランサやファイアウォールの アイドルタイムアウト 設定を延長する。

4. まとめ

  • サーバ側設定:ClientAliveIntervalClientAliveCountMax を調整
  • クライアント側設定:ServerAliveInterval を設定
  • ネットワーク改善:Wi-Fi → 有線、VPN や FW のタイムアウト設定を見直す

多くのケースでは、サーバまたはクライアントで KeepAlive を有効化するだけで解決します。

目次