SSHセッションでBroken pipeメッセージは何を意味しますか?


103

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

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

回答:


89

サーバーがアイドル状態の接続を長時間閉じている可能性があります。クライアント(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 

時々「* AliveInterval」では十分ではないことに注意してくださいstackoverflow.com/questions/10665267/…–
rogerdpack

1
そこにはではありません~/.ssh/config私のMac上で、私はそこにそれを作成しなければならないのか、それがどこかにあるのですか?
AGamePlayer

5
@AwQiruiGuoはい、~/.ssh最初にディレクトリ()を作成する必要があります。だからmkdir -p ~/.ssh; chmod 700 ~/.ssh; touch ~/.ssh/config
ゲルト

6

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

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

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


3

より長い接続期間が必要な場合は、クライアントで次を追加します。

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

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


5
現在のユーザーに属するファイルまたはまだ存在しないファイルにsudoを使用する理由
ヒューバートグルジェスコヴィアック

2

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


1

私は同じ問題を抱えていましたが、期待どおりではありません。同じネットワーク上で別のサーバーが同じ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アドレスに設定することにより、競合を回避します。


0

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

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.