SSHセッションがWrite failed: Broken pipe
メッセージで切断することがあります。どういう意味ですか?そして、どうすればセッションを開いたままにできますか?
私は知っていますがscreen
、それは私が探している答えではありません。これはsshd
設定オプションだと思います。
SSHセッションがWrite failed: Broken pipe
メッセージで切断することがあります。どういう意味ですか?そして、どうすればセッションを開いたままにできますか?
私は知っていますがscreen
、それは私が探している答えではありません。これはsshd
設定オプションだと思います。
回答:
サーバーがアイドル状態の接続を長時間閉じている可能性があります。クライアント(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
~/.ssh/config
私のMac上で、私はそこにそれを作成しなければならないのか、それがどこかにあるのですか?
~/.ssh
最初にディレクトリ()を作成する必要があります。だからmkdir -p ~/.ssh; chmod 700 ~/.ssh; touch ~/.ssh/config
別の解決策はmosh
、モバイルシェルを使用することです。sshとは対照的に、UDPを介して接続し、ローミングをサポートします。自宅でセッションを開始し、ラップトップを一時停止し、仕事/友人/他のインターネットに接続して、ラップトップの一時停止を解除し、何も起きていないかのように作業を続けることができます。インターネット接続がひどい場合は特に便利です。キーストロークがサーバーに届かず、接続の再確立を継続的に試行すると、即座にフィードバックが表示されます。
インストールとセットアップは簡単です。現在のすべてのLinux(およびいくつかの非Linux)ディストリビューションに含まれ、以前のssh接続を介してセッションの初期化と認証を調整します。したがって、moshパッケージが両端にインストールされている場合、を介して接続ssh user@server
できるmosh user@server
場合は、を呼び出すだけでmoshに接続できる可能性が非常に高くなります。
接続障害の主な理由は、moshが機能するためにUDPポート(デフォルトの範囲:60000-61000)でサーバーに到達する必要があることです。したがって、サーバーがファイアウォールの背後にある場合、自分で穴を開けることができない場合はほとんど運がありません(セキュリティへの影響)。
より長い接続期間が必要な場合は、クライアントで次を追加します。
echo 'ServerAliveInterval 30' | sudo tee -a ~/.ssh/config
echo 'ServerAliveCountMax 1200' | sudo tee -a ~/.ssh/config
ServerAliveCountMax
デフォルトでは3に設定されています。したがって、ServerAliveInterval
3つの小さな情報パックがサーバーに送信されると、自動的にログアウトされます。1200に設定すると、このプロセスは少なくとも1200回発生する必要があります。つまり、少なくとも30 * 1200秒(10時間)接続する必要があります。
通常、ネットワーク(TCP)接続がリセットされたことを意味します。例えば、あなたのインターネットプロバイダーはあなたまたはこのような何かを再接続しました。
私は同じ問題を抱えていましたが、期待どおりではありません。同じネットワーク上で別のサーバーが同じ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アドレスに設定することにより、競合を回避します。
「パイプの破損メッセージ」の別の原因は、別のマシンがホストと同じIPを使用しようとしていることです。
他の誰かがそのIPを使用しているかどうかをテストする簡単な方法:
ネットワーク上にあるマシンを調べるには、このUnix&Linuxの質問タイトルを使用できます。ローカルネットワークに接続されている他のマシンを見つける方法。