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
別の解決策は mosh
-モバイルシェル を使用することです。 sshとは対照的に、UDPを介して接続し、ローミングをサポートします。自宅でセッションを開始し、ラップトップを一時停止し、それを職場/友人/他のインターネット環境に持ち帰り、ラップトップの一時停止を解除して、何も起こらなかったかのように作業を続けることができます。これは、インターネット接続が粗い場合に特に役立ちます。キーストロークがサーバーに到達せず、接続の再確立を継続的に試行すると、即座にフィードバックが表示されます。
インストールと設定は簡単です。現在のすべてのLinux(およびLinux以外のいくつかの)ディストリビューションに含まれており、以前のssh接続を介してセッションの初期化と認証を調整します。したがって、ssh user@server
経由で接続できる場合、moshパッケージが両端にインストールされていれば、mosh user@server
を呼び出すだけでmoshに接続できる可能性が非常に高くなります。
接続障害の主な理由は、moshが機能するために、UDPポート(デフォルトの範囲:60000〜61000)でサーバーにアクセスする必要があるためです。したがって、サーバーがファイアウォールの背後にある場合、自分で穴を開けることができなければ、ほとんどの場合不運です( セキュリティへの影響 )。
接続期間を長くしたい場合は、クライアントに次を追加します。
echo 'ServerAliveInterval 30' | tee -a ~/.ssh/config
echo 'ServerAliveCountMax 1200' | 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アドレスに設定することにより、競合を回避します。
「ブロークンパイプメッセージ」のもう1つの原因は、別のマシンがホストと同じIPを使用しようとしていることです。
他の誰かがそのIPを使用しているかどうかをテストする簡単な方法:
ネットワーク上にあるマシンを見つけるには、次のUnixおよびLinuxの質問タイトルを使用できます: ローカルネットワークに接続されている他のマシンを見つける方法 。