目次
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 を設定する
- SSH 設定ファイルを開く。
sudo vi /etc/ssh/sshd_config
- 以下の設定を追加/修正する。
ClientAliveInterval 60 ClientAliveCountMax 3
ClientAliveInterval 60
→ サーバが60秒ごとにクライアントへ確認メッセージを送信ClientAliveCountMax 3
→ 3回応答がなければ切断
- SSH を再起動。
sudo systemctl restart sshd
3-2. クライアント側で KeepAlive を設定する
- SSH クライアント設定ファイルを編集。
vi ~/.ssh/config
- 接続対象のホストに以下を追加。
Host * ServerAliveInterval 60 ServerAliveCountMax 3
ServerAliveInterval
→ 60秒ごとにサーバにパケット送信ServerAliveCountMax
→ 3回連続で応答がなければ切断
3-3. ネットワーク環境を改善する
- Wi-Fi が不安定な場合は 有線接続 を利用。
- VPN 経由で切れる場合は VPN サーバの KeepAlive 設定を確認。
- クラウド環境の場合は、ロードバランサやファイアウォールの アイドルタイムアウト 設定を延長する。
4. まとめ
- サーバ側設定:
ClientAliveInterval
とClientAliveCountMax
を調整 - クライアント側設定:
ServerAliveInterval
を設定 - ネットワーク改善:Wi-Fi → 有線、VPN や FW のタイムアウト設定を見直す
多くのケースでは、サーバまたはクライアントで KeepAlive を有効化するだけで解決します。
あわせて読みたい


SSH接続で Permission denied が出るときの確認ポイント~鍵認証・権限設定・sshd_configの見直し~
LinuxサーバへSSH接続しようとしたとき、 Permission denied (publickey,password). と表示されてログインできないことがあります。これはSSHで最もよくあるトラブルの…
あわせて読みたい


SSH 接続がタイムアウトする場合の原因と解決方法
SSH でサーバに接続しようとしたときに タイムアウト することがあります。これは「サーバが応答していない」ことを意味し、クライアントからのリクエストが届いていな…
あわせて読みたい


ssh_exchange_identification: read: Connection reset by peer の原因と対処
1. エラー概要 SSH 接続を試みた際に以下のエラーが表示され、接続が拒否されることがあります。 ssh_exchange_identification: read: Connection reset by peer このエ…