コンピュータのスリープ中に SSH セッションを維持することは可能ですか? Mac (Lion) を短時間スリープ状態にしてからウェイクアップすると、セッションはまだ有効ですが、一晩そのままにしておくと、セッション接続が閉じられます。
私はセットを試しました:
クライアントアライブ間隔 3600 ClientAliveCountMax 10
同じ結果
セッションが短期間「存続」するのはなぜですか? このタイムアウトを制御するにはどうすればよいですか?
私はそれが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
ファイルに追加する必要があります
リモートセッションを維持するための洗練されたソリューションが必要な場合は、screen
ユーティリティを確認する必要があります。このユーティリティを使用すると、コンピュータをログアウトまたはシャットダウンした後でも、リモート プログラムを実行し続けることができます。screen
その後、使用可能なセッションを後で再接続できます。
Screen の基本を学ぶには時間がかかりますが、操作できるようになると、それがいかに強力であるかがわかります。
screen の使用に関するチュートリアルについては、このリンクを確認できます: http://www.thegeekstuff.com/2010/07/screen-command-examples/
別の可能な解決策はmoshです。これは正確には SSH ではありませんが、コンピューターがスリープ状態になったとき、または IP アドレスを変更した後でも、シェル接続を維持します。
もう 1 つの解決策はautosshを使用することです。これは、基本的に ssh セッションを監視し、中断されるとすぐに再接続します (たとえば、スリープ サイクルの後だけでなく、しばらく WiFi 接続が失われた場合など)。これは、転送されたポート/ssh トンネルで特にうまく機能します。
ここにチュートリアルがあります: http://linuxaria.com/howto/permanent-ssh-tunnels-with-autossh。
データが送信されない場合、セッションが閉じられることがあります。開いたままhtop
にしておくと、通常、ssh 接続が閉じられなくなり、有用なリアルタイム情報が提供されます。
キープアライブも同じことを行う必要があります。間隔 (2 つのキープアライブ間の遅延) を 60 程度に減らして、何かが変わるかどうかを確認してみてください。