SSHを使用してリモートLinuxサーバーに接続する場合、SSHセッションをしばらく非アクティブにしてから再度使用しようとすると、SSHセッションが切断されて次のようなエラーメッセージが表示されます。
:client_loop: send disconnect: Broken pipe
一部のシステムでは、「書き込みに失敗しました:パイプが壊れています」または「リモートホストによって接続が閉じられました」と表示されます。
このエラーの原因と、SSH接続を維持する方法を見てみましょう。
SSHによる壊れたパイプエラーの修正
ご想像のとおり、SSH接続は非アクティブのために閉じられています。設定値はありませんが、通常5分程度です。
SSHセッションの切断を回避するためにできることは、サーバーからクライアントに「アライブメッセージ」を送信することです(ClientAliveInterval
)またはクライアントからサーバーへ(ServerAliveInterval
)特定の時間間隔で。
このように、クライアントとサーバーの間に通信があり、サーバーはクライアントがまだそこにあることを認識しているため、SSHセッションを存続させます。
現在、これを行うには2つの方法があります。生きているメッセージをクライアントからサーバーに送信するか、サーバーからクライアントに送信します。
- SSH経由で複数のサーバーに接続する場合は、マシンに設定します。
- あなたがシステム管理者であり、SSH接続が頻繁に切断されることについて何人かのユーザーから苦情が寄せられた場合は、サーバーに設定できます。
方法1:クライアント側のSSH構成の変更
最大10分(600秒)のアイドル時間でSSH接続を維持したいとします。
SSHを介してリモートLinuxシステムに接続しているときに、ServerAliveInterval
に言及できます。 このような値:
ssh -o ServerAliveInterval=600 [email protected]_ip_address
さて、これは機能しますが、サーバーに接続するたびにこのオプションを手動で入力するのは面倒です。永続的にしてみませんか?
SSH設定ファイルをご存知だと思います。クライアント側では、これを利用して、特定の接続またはそれらすべてに特定のSSHパラメーターを設定できます。ここでSSH構成ファイルについて詳しく説明しました。
まず、ssh設定ファイルがあることを確認してください。作成しない場合:
touch ~/.ssh/config
正しいファイル権限を与えることが重要です。そうしないと、SSH経由で接続しているときに権限拒否エラーが発生します。
chmodコマンドを使用して、次のファイル権限を追加します。
chmod 600 ~/.ssh/config
怠惰な気分や詳細を知りたくない場合は、次のコマンドを使用して、生存間隔を600秒(10分)に設定します。
echo "ServerAliveInterval 600" >> ~/.ssh/config
これにより、使用するすべてのSSH接続のServerAliveInterval値が10分に設定されます。必要に応じて試してみてください。
より適切なものにしたい場合は、次のように追加する必要があります:
Host *
ServerAliveInterval 600
方法2:サーバー側のSSH構成の変更
サーバーのSSH構成ファイルは通常/etc/ ssh/sshd_configにあります。
このファイルを開くと、ここに2つの重要なパラメーターがあります。
-
ClientAliveInterval
: これは、サーバーがssh接続されたクライアントにアライブメッセージを送信するまでの非アクティブ期間です。 -
ClientAliveCountMax
:これは、サーバーがアライブメッセージの送信を試行する回数です。
たとえば、ClientAliveInterval
を設定します 200秒までおよびClientAliveCountMax
これは、サーバーが200秒後にアライブメッセージを送信することを意味します。クライアントからのアクティビティがない場合、400秒後に再度アライブメッセージが送信されます。クライアントからの応答/アクティビティはなく、600秒後に別のアライブメッセージが送信されます。この後(600秒)、SSH接続が切断されます。
/etc/ssh/sshd_config
を編集できます Vimのようなお気に入りのターミナルベースのテキストエディタでファイルします。 ClientAliveIntervalおよびClientAliveCountMaxエントリを探します。行の先頭にある#キーを削除し、適切な値を指定します。
ファイルを保存して終了します。
SSH接続のタイムアウトを数時間に設定しないでください。それはリソースの無駄になります。
このチュートリアルが、SSH接続でのパイプの破損エラーの問題を修正するのに役立つことを願っています。フィードバックは大歓迎です。