35

コンピュータのスリープ中に SSH セッションを維持することは可能ですか? Mac (Lion) を短時間スリープ状態にしてからウェイクアップすると、セッションはまだ有効ですが、一晩そのままにしておくと、セッション接続が閉じられます。

私はセットを試しました:

クライアントアライブ間隔 3600
ClientAliveCountMax 10

同じ結果

セッションが短期間「存続」するのはなぜですか? このタイムアウトを制御するにはどうすればよいですか?

4

5 に答える 5

20

私はそれがtcpキープアライブ設定に依存する答えを見つけました:

利用可能な TCP 設定のリスト (FreeBSD 4.8 以降および 5.4):

sysctl -A | grep net.inet.tcp
  • net.inet.tcp.keepidle- キープアライブ プローブ (有効な場合) が送信される前に、(TCP) 接続がアイドル状態である必要があるミリ秒単位の時間。

  • net.inet.tcp.keepintvl- キープアライブ プローブがリモート マシンに送信される間隔 (ミリ秒単位)。TCPTV_KEEPCNT (デフォルトは 8) プローブが送信された後、応答がない場合、(TCP) 接続はドロップされます。

  • net.inet.tcp.always_keepalive- すべての TCP 接続で SO_KEEPALIVE が設定されていると仮定すると、カーネルは定期的にパケットをリモート ホストに送信して、接続がまだ有効であることを確認します。

したがって、最大 TCP 非アクティブ接続時間を計算する式は次のとおりです。

net.inet.tcp.keepidle + (net.inet.tcp.keepintvl x 8)

結果はミリ秒単位です。そのため、設定することで

net.inet.tcp.keepidle = 10000
net.inet.tcp.keepintvl = 5000
net.inet.tcp.always_keepalive = 1 (must be 1 always)

10000 + (5000 x 8) = 50000ミリ秒 (50 秒)の間 TCP 接続が無効になると、システムは通話を切断します。起動時にこれらの設定をシステムに記憶させるには、それらを/etc/sysctl.confファイルに追加する必要があります

于 2012-05-22T15:21:25.320 に答える
10

リモートセッションを維持するための洗練されたソリューションが必要な場合は、screenユーティリティを確認する必要があります。このユーティリティを使用すると、コンピュータをログアウトまたはシャットダウンした後でも、リモート プログラムを実行し続けることができます。screenその後、使用可能なセッションを後で再接続できます。

Screen の基本を学ぶには時間がかかりますが、操作できるようになると、それがいかに強力であるかがわかります。

screen の使用に関するチュートリアルについては、このリンクを確認できます: http://www.thegeekstuff.com/2010/07/screen-command-examples/

于 2012-05-19T12:51:52.523 に答える
7

別の可能な解決策はmoshです。これは正確には SSH ではありませんが、コンピューターがスリープ状態になったとき、または IP アドレスを変更した後でも、シェル接続を維持します。

于 2013-06-25T21:56:37.597 に答える
2

もう 1 つの解決策はautosshを使用することです。これは、基本的に ssh セッションを監視し、中断されるとすぐに再接続します (たとえば、スリープ サイクルの後だけでなく、しばらく WiFi 接続が失われた場合など)。これは、転送されたポート/ssh トンネルで特にうまく機能します。

ここにチュートリアルがあります: http://linuxaria.com/howto/permanent-ssh-tunnels-with-autossh

于 2014-07-30T17:06:32.290 に答える
1

データが送信されない場合、セッションが閉じられることがあります。開いたままhtopにしておくと、通常、ssh 接続が閉じられなくなり、有用なリアルタイム情報が提供されます。

キープアライブも同じことを行う必要があります。間隔 (2 つのキープアライブ間の遅延) を 60 程度に減らして、何かが変わるかどうかを確認してみてください。

于 2012-05-19T12:45:05.903 に答える