短い紹介
私は何年もSSH接続で奇妙な動作を見てきましたが、今日まで質問するつもりは一度も試したことがありません。これについてたくさん探してみましたが、何らかの理由が見つかりませんでした。
環境
- デフォルトでは、アイルランド、ムンバイなど、さまざまな地域でさまざまなAWS EC2インスタンスを実行しています。
- 私にはMacがある。
- 私はインドにいます(誰かが何らかの理由でショックを受けた場合に備えて)。
問題の説明1
私のMacが4Gネットワークを介してプライベートホットスポット(SamsungデバイスまたはiPhone)に接続されていてSSHセッションがない場合は、デフォルトでSSH接続が理想的です。それで、矢印キーを押し続けなければ生きています。
問題ステートメント2(これは質問ではありません)
しかし、私のMacがWi-Fiブロードバンド接続に接続されている場合、この問題は発生しません。 Mac をスリープ状態で起動させても(ふたを開く)、SSH 接続は数時間接続されたままになります。
今日、Google検索に基づいて、TCPKeepAlive
次のオプションを使用してソリューションを提供するさまざまな記事を見つけましたServerAliveInterval
。
- sshd_configの `ServerAliveInterval`と `ClientAliveInterval`オプションは正確に何をしますか?
- SSHでtcp-keepaliveはどのように機能しますか?
- https://raspberrypi.stackexchange.com/questions/8311/ssh-connection-timeout-when-connecting
- https://patrickmn.com/aside/how-to-keep-alive-ssh-sessions/
ただし、この問題を説明する投稿が見つかりません。あなたはこの行動について考えている人ですか?私の4Gホットスポット接続について可能なすべての詳細を喜んで提供します。
答え1
私の考えでは、システムが接続状態を追跡して忘れてしまうことが原因のようです。 NAT を使用する場合(IPv6 を使用しない場合に頻繁に発生する)、NAT を実行するシステムには通常、応答を再送信する場所を記憶するためのメモリが必要です。 Wi-Fi ブロードバンドの場合、NAT を実行するシステムには、アクティブな接続を記憶するためのより長いメモリがある場合があります (たとえば、LinuxWebフィルタ~のつながるデフォルトでは、TCP接続は5日間記憶され、UDPストリームは2〜3分間記憶されます。 4GパスでNATを実行する同等のシステムのメモリは、300万個より少し少ない可能性があります。
この問題を解決するには、質問で見つけてリンクしたように特定のSSHパラメータを設定できます。ServerAliveInterval
アクティビティがない場合、空のデータは次のように定期的に(SSHプロトコルなど)送信されます。TCP接続の維持。これにより、NATを実行しているシステムは常に接続をアクティブに見て忘れないようにします。したがって、~/.ssh/config
ファイルに以下を追加できます。
ServerAliveInterval 115
115という値は、保守的な状態を維持するために2mnよりわずかに小さい値として選択された。これは、ルート上の目に見えないNATデバイス上のアクティブ接続の予想追跡期間よりも短くても低すぎません(下記参照)。そのため、スノーモーダルでトレース状態が削除されるまで5秒間残った場合、想定された寿命である120秒に戻ります。
欠点は、(とにかくWi-Fiブロードバンドアクセスで)しばらく接続が切断され、再起動すると、クライアントがリモートサーバーがダウンしていると考えて接続を閉じることができることです。調整することもできます。ServerAliveCountMax
ただし、とにかくデフォルトが3の場合、この問題が発生する可能性があるのに3 * 115 = 345秒、つまり500万を超える接続損失がかかります。
サーバー側にはこれに対応するものがありますClientAliveInterval
sshd_config
同じ目的でそのファイルに設定できます。これのもう一つの利点は、とにかく、クライアントの接続が失われると、Ghost SSHクライアント接続が一定期間維持されず、まだ接続されているかのように処理されることです。