私が見つけたこの問題ServerAliveInterval
、申し訳ありません。許可された応答に記載されている2つの変数の設定を理解していません。ClientAliveInterval
ローカルサーバーがタイムアウトした場合は、この値を0に設定する必要がありますか?それではタイムアウトは発生しませんか? 300秒または他の値に設定する必要がありますか?
私の問題は簡単です。応答を介してラップトップを一時停止してから一時停止を解除すると、一部の接続がタイムアウトし、Write failed: Broken pipe
他の接続はそうではありません。破損したパイプが失敗しないようにローカルsshdを正しく設定するにはどうすればよいですか?
答え1
サーバー活動間隔:秒顧客接続を維持するために、サーバーに空のパケットを送信する前に待ちます。
クライアントアクティビティ間隔:秒仕える人空のパケットをクライアントに送信する前に待ちます(接続を維持するため)。
値を0(デフォルト)に設定すると、これらの機能は無効になるため、長時間アイドル状態になっていると接続が切断される可能性があります。
ServerAliveIntervalは、接続を維持するための最も一般的な戦略のようです。パイプ破損の問題を回避するために.ssh / configファイルで使用されるSSH構成は次のとおりです。
Host myhostshortcut
HostName myhost.com
User barthelemy
ServerAliveInterval 60
ServerAliveCountMax 10
上記の設定は次のように機能します。
- クライアントは60秒(ServerAliveInterval時間)の間アイドル状態で待機した後、「no-op空のパケット」をサーバーに送信し、応答を待ちます。応答がない場合は、10(ServerAliveCountMax)回(600秒)まで上記のプロセスを続行します。サーバーがまだ応答しない場合は、クライアントのSSH接続が失われます。
サーバー側の ClientAliveCountMax も役に立ちます。これは、クライアントが切断する前に応答しない可能性がある時間制限です。デフォルトは3(3つのClientAliveIntervals)です。
答え2
これの説明は次のとおりです。sshd_config
手動( man sshd_config
):
ClientAliveInterval
クライアントからデータが受信されない場合、sshdは暗号化されたチャネルを介してメッセージを送信してクライアントから応答を要求するタイムアウト間隔(秒単位)を設定します。デフォルト値は 0 です。これは、これらのメッセージがクライアントに送信されないことを意味します。このオプションはプロトコルバージョン2でのみ利用可能です。
ClientAliveCountMax
デフォルトは 3 です。
ClientAliveInterval
(下記参照)15に設定してデフォルト値ClientAliveCountMax
のままにすると、応答しないSSHクライアントは約45秒後に切断されます。このオプションはプロトコルバージョン2でのみ利用可能です。
クライアントオプションについては、次のガイドラインを参照してくださいman ssh_config
。
ServerAliveInterval
ssh
サーバーからデータが受信されない場合は、サーバーに応答を要求するために暗号化されたチャネルを介してメッセージが送信されるタイムアウト間隔(秒単位)を設定します。デフォルトは 0 で、これはこれらのメッセージがサーバーに送信されないことを意味します。このオプションはプロトコルバージョン2でのみ利用可能です。
ServerAliveCountMax
デフォルトは 3 です。たとえば、
ServerAliveInterval
15に設定してデフォルトのままにすると、ServerAliveCountMax
サーバーが応答しない場合、ssh
約45秒後に接続が切断されます。このオプションはプロトコルバージョン2でのみ利用可能です。
上記によれば、ゼロは無効になることを意味します。したがって、これらの値を十分に高く設定して、次の問題が発生しないようにする必要があります。壊れたパイプ間違い。
答え3
Barthelemyの答えは素晴らしいですが、実際に問題の根本的な原因には達しません。コンピュータを中断してコンピュータを起動すると、SSHセッションがアクティブになりたいです。
接続を維持するための ssh の設定はありません。 SSHはTCPを使用するため、最初は3方向ハンドシェイクが必要で、アイドル時間が過ぎてもアクティブになります。シャットダウン/休止状態を実行すると、FINを介してすべてのTCP接続が閉じます。これを克服する方法はありません。
汚れた回避策の場合は、VPSまたは画面を含む他のオンラインボックスを使用して接続を維持できます。私のアドバイスは、セキュリティ上の理由からこれを実行しないことです。
答え4
長期実行セッションを画面内に配置します。詳細については、screen -hを参照してください。
これにより、SSHを使用してコンピュータに再接続し、スクリーンセッションに再接続できます。