web-dev-qa-db-ja.com

SSHセッションでの壊れたパイプメッセージの意味

SSHセッションがWrite failed: Broken pipeメッセージで切断されることがあります。どういう意味ですか?そして、どうすればセッションを開いたままにできますか?

screenについては知っていますが、それは私が探している答えではありません。これはsshd設定オプションだと思います。

107
Peter Stuifzand

サーバーが長時間アイドル状態の接続を閉じている可能性があります。クライアント(ServerAliveInterval)またはサーバー(ClientAliveInterval)のいずれかを更新できます

 ServerAliveInterval
         Sets a timeout interval in seconds after which if no data has
         been received from the server, ssh(1) will send a message through
         the encrypted channel to request a response from the server.  The
         default is 0, indicating that these messages will not be sent to
         the server.  This option applies to protocol version 2 only.

 ClientAliveInterval
         Sets a timeout interval in seconds after which if no data has
         been received from the client, sshd(8) will send a message
         through the encrypted channel to request a response from the
         client.  The default is 0, indicating that these messages will
         not be sent to the client.  This option applies to protocol
         version 2 only.

サーバーを更新するには(そしてsshdを再起動するには)

echo "ClientAliveInterval 60" | Sudo tee -a /etc/ssh/sshd_config

またはクライアント側:

echo "ServerAliveInterval 60" >> ~/.ssh/config 
92
Gert

別の解決策は mosh-モバイルシェル を使用することです。 sshとは対照的に、UDPを介して接続し、ローミングをサポートします。自宅でセッションを開始し、ラップトップを一時停止し、それを職場/友人/他のインターネット環境に持ち帰り、ラップトップの一時停止を解除して、何も起こらなかったかのように作業を続けることができます。これは、インターネット接続が粗い場合に特に役立ちます。キーストロークがサーバーに到達せず、接続の再確立を継続的に試行すると、即座にフィードバックが表示されます。

インストールと設定は簡単です。現在のすべてのLinux(およびLinux以外のいくつかの)ディストリビューションに含まれており、以前のssh接続を介してセッションの初期化と認証を調整します。したがって、ssh user@server経由で接続できる場合、moshパッケージが両端にインストールされていれば、mosh user@serverを呼び出すだけでmoshに接続できる可能性が非常に高くなります。

接続障害の主な理由は、moshが機能するために、UDPポート(デフォルトの範囲:60000〜61000)でサーバーにアクセスする必要があるためです。したがって、サーバーがファイアウォールの背後にある場合、自分で穴を開けることができなければ、ほとんどの場合不運です( セキュリティへの影響 )。

6
Perseids

接続期間を長くしたい場合は、クライアントに次を追加します。

echo 'ServerAliveInterval 30' | tee -a ~/.ssh/config
echo 'ServerAliveCountMax 1200' | tee -a ~/.ssh/config

ServerAliveCountMaxのデフォルトは3に設定されています。したがって、ServerAliveIntervalが3つの小さな情報パックをサーバーに送信すると、自動的にログアウトします。 1200に設定すると、このプロセスは少なくとも1200回発生する必要があります。つまり、少なくとも30 * 1200秒(10時間)接続する必要があります。

5
Francisco Costa

通常、ネットワーク(TCP)接続がリセットされたことを意味します。例えば。あなたのインターネットプロバイダーがあなたまたはこのような何かを再接続しました。

2
maxschlepzig

私は同じ問題を抱えていましたが、予想通りではありません。同じネットワーク上で別のサーバーが同じIPアドレスを試行していることがわかった場合、同じ問題に直面することになります。これを解決するには、同じIPアドレスを使用する他のサーバーがあるかどうかを確認する必要があります。これは、arpコマンドを使用して行うことができます。

私はDebianを使用しているため、別のサーバーが実際に同じIPアドレスを使用しているかどうかを判断するために使用するコマンドのサンプルを次に示します

apt-get install arp-scan
arp-scan -I eth0 -l | grep 192.168.1.42
  192.168.1.42 d4:eb:9a:f2:11:a1 (Unknown)
  192.168.1.42 f4:23:a4:38:b5:76 (Unknown) (DUP: 2)

同じIPアドレスを使用する2セットのMACアドレスが表示されます。 1つを別のIPアドレスに設定することにより、競合を回避します。

1
Bill Ang

「ブロークンパイプメッセージ」のもう1つの原因は、別のマシンがホストと同じIPを使用しようとしていることです。

他の誰かがそのIPを使用しているかどうかをテストする簡単な方法:

  1. ホストをオフにする
  2. 同じIPにpingして、別のマシンがそのIPを使用しているかどうかを確認する

ネットワーク上にあるマシンを見つけるには、次のUnixおよびLinuxの質問タイトルを使用できます: ローカルネットワークに接続されている他のマシンを見つける方法

0
Josir