「書き込みに失敗しました:パイプが壊れています」でフリーズするSSH接続


12

Ubuntu 11.04マシンからSSH経由でCentOS 5.5ボックスに接続しています。

接続は、アクティブに使用されている場合(つまり、遅延や損失がない場合)に期待どおりに動作するように見えますが、しばらく非アクティブのままにすると、フリーズして応答しなくなります。最終的に、「Write failed:Broken pipe」というエラーメッセージが返され、ローカルマシンのプロンプトに戻ります。

これをデバッグし、何が起こっているのかを見つけ、解決するためにどのようなことができますか?開発者であるため、これは私の人生を常に再接続することの苦痛にしています。

回答:


15

CentOSボックスのSSHD設定が、クライアントKeepAliveを実行するように設定されていないようです。

これらの2行をCentOS sshd構成(/ etc / ssh / sshd_config)にドロップし、再起動してお楽しみください!

KeepAlive yes
ClientAliveInterval 60

その間、Gnu screenを使用して、CentOS側でセッションを維持することをお勧めします。


1
KeepAliveはTCPKeepAliveに名前が変更され、デフォルト値のyesのままにすることができます。ClientAliveIntervalで十分なはずです。をご覧くださいman sshd_config
ypid

9

実際の答えは、ほとんどの場合、パスにある種のNATデバイス(通常はファイアウォール)があり、その状態テーブルのタイムアウトはかなり積極的です。ssh接続を一定期間アイドル状態のままにするため、NATデバイスは内部アドレスと送信元ポート番号、および一時的な外部NATアドレスとポート番号の間のマッピングを「忘れ」ます。

後でそのsshウィンドウで何かを実行しようとすると、新しい一時アドレス/ポートのペアが割り当てられます。これは、宛先sshサーバーが認識せず、応答しません。その後、ローカルタイムアウトが発生し、ローカルマシンによって接続が切断されます。

これに対する実用的な修正は、yuriismasterが提案するとおりに行うことです:KeepAlivesを有効にし(状態テーブルエントリを「くすぐる」定期的なトラフィックを確保します)、screenリモート側で使用します(イベントがドロップした場合に状態を保持します)。あなたは何が起こっているのか、それに対して何をすべきかを尋ねたので、私はこの答えを投稿するだけです。yuriismasterの提案が良いものである理由が明らかになることを願っています。


それは完全に理にかなっています!このボックスにはDMZセットアップを使用したNATがあります。タイムアウト構成を試してみて、それがうまくいくかどうかを確認します。ありがとう:)
スティーブンRC

あなたが問題の背後にある理由を理解するのを助けたので、私はあなたのものを受け入れます。ただし、修正のためにクレジットは@yuriismasterに移動する必要があります。
スティーブンRC

ヴァロリン:絶対にそうです、そして彼は最初でした。率直に言って、彼は私以上に受け入れるに値すると思います。しかし、それはあなたの質問なので、あなたが適切だと思うように行くべきです。いずれにせよ、フィードバックをありがとう。
MadHatter
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.