Write Failed: broken pipe
エラーを防ぐために、クライアントとサーバーの両方でSSHを構成するにはどうすればよいですか?クライアントコンピューターをスリープ状態にして後で再開した場合によく発生します。
screen
?を使用して復元できるものを探していますか?
Write Failed: broken pipe
エラーを防ぐために、クライアントとサーバーの両方でSSHを構成するにはどうすればよいですか?クライアントコンピューターをスリープ状態にして後で再開した場合によく発生します。
screen
?を使用して復元できるものを探していますか?
回答:
私はこれ/etc/ssh/ssh_config
をLinuxとMac で試しました:
Host *
ServerAliveInterval 120
これは、キープアライブメッセージをサーバーに送信する頻度(秒単位)です。それでもうまくいかない場合は、作業中に2分ごとにEnterキーを押すようにサルを訓練します。
あなたは、どちらかの設定ができServerAliveInterval
で/etc/ssh/ssh_config
、クライアントマシンのかClientAliveInterval
に/etc/ssh/sshd_config
サーバマシンの。それでもエラーが発生する場合は、間隔を短くしてください。
単一ユーザーの構成は~/.ssh/config
、サーバー側とクライアント側の両方でファイルに設定できます。ファイルに正しい権限があることを確認してくださいchmod 644 ~/.ssh/config
。
Bad configuration option: ClientAliveInterval
Bad configuration option
OSX 10.8.4でも同じエラーが発生します。
SSHセッションは、多数の避けられない理由により中断する場合があります。
これによって引き起こされる問題を軽減するために使用できる便利なユーティリティは、と呼ばれscreen
ます。Screenは、sshセッションとは独立して存続する複数の端末を制御できる強力なユーティリティです。たとえばscreen
、sshセッションで実行すると、新しいターミナルが開き、それを使用してジョブを実行できます。プロセスでsshセッションが停止したとしましょう。screen -d
その後、実行screen -r
すると最後のセッションが再開され、そこから続行できます。使用する前に、必ずドキュメントを読んでください。
screen -d -r
、最後のセッションを回復するために便利に実行できます。
screen -dr
。またはscreen -x
、何を計画しているかによって異なります。重要なのは、それらすべてのスイッチが何をするかを知って、インターネットの人々の提案に盲目的に従うのではなく、適切なスイッチを使用できるようにすることです。ここに利用可能なコンパクトな要約があります:ss64.com/bash/screen.html
クライアント構成
ファイルを作成してみてください:
~/.ssh/config
内容を追加します。
Host *
ServerAliveInterval 30
ServerAliveCountMax 5
サーバーにsshし、問題が修正されたかどうかを確認します。ClientAliveIntervalオプションは、sshサーバー(別名sshd)を構成する場合にのみ有用であり、sshクライアント側のことは変更しないため、上記の構成ファイルでは使用しないでください。
これにより、前の30秒間にパケットが受信されなかった場合(上記で指定したとおり)、サーバーにHello-are-you-there信号が送信されます。ただし、連続するhello-are-you-there信号の数がServerAliveCountMaxに達すると、sshはサーバーから切断します。この値はデフォルトで3に設定されているため(3 * 30 =サーバーアクティビティなしの90秒)、必要に応じて値を増やします。.ssh / configファイルにはさらに多くの設定オプションがあり、次のように読むことができます。
他のオプションの詳細については。この例が接続するすべてのサーバーにこれを適用したくない場合があります。または、行Host *
をHost <IP>
(IPアドレスで置き換え、ssh_configのマニュアルページを参照)に置き換えて、特定のサーバーのみに制限します。
サーバー構成
同様に、サーバーにクライアントに優しいことを伝えることができます。構成ファイルは/etc/ssh/sshd_config
です。
ClientAliveInterval 20
ClientAliveCountMax 5
あなたは設定して、それを無効にすることができますいずれかClientAliveInterval
に0
または微調整ClientAliveInterval
し、ClientAliveCountMax
プローブに応答することなく、最大のsshクライアントの非アクティブを設定します。TCPKeepAliveに対するこの設定の利点の1つは、信号が暗号化されたチャネルを介して送信されるため、なりすましの可能性が低くなることです。
Ubuntuサーバーをリモートから明快から正確にアップグレードし、アップグレードの途中で「Write failed。Brocken pipe」というメッセージでssh接続を失いました。ClientAliveIntervalとServerAliveIntervalは何もしませんでした。解決策は、クライアントsshでTCPKeepAliveオプションを有効にすることです。
TCPKeepAlive yes
に
/etc/ssh/ssh_config
クライアントの場合、次のように~/.ssh/config
(または/etc/ssh/ssh_config
)ファイルを編集します。
Host *
TCPKeepAlive yes
ServerAliveInterval 120
TCPKeepAlive-システムがTCPキープアライブメッセージを相手側に送信するかどうかを指定します。それらが送信された場合、接続の切断またはマシンの1つのクラッシュが適切に通知されます。ただし、これは、ルートが一時的にダウンした場合に接続が切断されることを意味し、一部の人はそれが迷惑だと感じます(デフォルトは「yes」です)。
ServerAliveInterval-サーバーからデータを受信していない場合、ssh(1)は暗号化されたチャネルを介してメッセージを送信し、サーバーからの応答を要求するまでのタイムアウト間隔を秒単位で設定します。デフォルトは0で、これらのメッセージがサーバーに送信されないことを示します。
サーバーの場合、次のように編集します/etc/ssh/sshd_config
。
ClientAliveInterval 600
ClientAliveCountMax 0
sshクライアントを10分(600秒)後に自動的に終了(タイムアウト)したい場合。
ClientAliveCountMax –これは、sshクライアントから応答を取得せずにsshサーバーによって送信されたcheckaliveメッセージの総数を示します。デフォルトは3です。
ClientAliveInterval –これはタイムアウトを秒単位で示します。x秒後、sshサーバーはクライアントに応答を求めるメッセージを送信します。デフォルトは0です(サーバーは確認のためにクライアントにメッセージを送信しません)。
参照:オプションServerAliveInterval
とClientAliveInterval
sshd_configの正確な動作は?
私は絶対にモッシュが大好きです。私は頻繁にサーバーにsshし、ラップトップを閉じてカフェに行き、開いて、何も変わらないように続けます。
モッシュ(モバイルシェル)
ローミングを許可し、断続的な接続をサポートし、ユーザーのキーストロークのインテリジェントなローカルエコーとライン編集を提供するリモートターミナルアプリケーション。
MoshはSSHの代替品です。特にWi-Fi、セルラー、および長距離リンクを介した、より堅牢で応答性に優れています。
Moshは、GNU / Linux、FreeBSD、Solaris、Mac OS X、およびAndroidで利用できるフリーソフトウェアです。
私にとっては、Write failed: Broken pipe
vimやシェルプロンプトで積極的に入力しているときでも取得できました。私もしばらくインターネットをローカルで閲覧することができませんでした。(ターミナルを使用してUbuntuにリモートで接続していました。)
私のネットワークの他の人は、Netflixや他の場所から多くのビデオをストリーミングしています。私はそれを証明することはできませんが、ISPまたはルーターの問題を疑っています。たとえば、VerizonとNetflixは、顧客のネットワークの問題について互いに指を指し合っています。
ダイヤルアップ接続を使用していて、同時にSSHまたはtelnet接続でビデオまたは音楽をストリーミングしている場合、ある時点で壊れたパイプメッセージが表示されます。ISPのブロードバンドパッケージをアップグレードすると、接続が切断される頻度が少なくなるようです。
Ubuntu VMではないので、ここに答えを投稿しました。
ssh -o IPQoS=throughput user@host
sshを呼び出すたびに、これらの引数を追加できます。 -o ServerAliveInterval=15 -o ServerAliveCountMax=3
これを行う場合、/ etc / ssh / * configファイルを編集する必要はありません。
これを簡単にするために、bashエイリアス、関数、またはスクリプトを作成できます。
たとえば、これらのbash関数は、.bashrcに追加できます。do_sshはキープアライブを有効にするために手動で使用されます。do_ssh_ptyはスクリプト内で使用され、ptyを設定してプロンプトを回避します。
do_ssh() {
ssh -o ServerAliveInterval=15 -o ServerAliveCountMax=3 $*
}
do_ssh_pty() {
ssh -tt -o "BatchMode=yes" -o "StrictHostKeyChecking=no" -o ServerAliveInterval=15 -o ServerAliveCountMax=3 $*
}
これdo_ssh user@host
で使用できるようになりdo_ssh user@host <args> <command>
、キープアライブがアクティブになります。