コンピューターがスリープしている間、SSHセッションを維持することは可能ですか? Mac(Lion)を短期間スリープ状態にしてから、ウェイクアップしてセッションがまだ生きているが、一晩放置するとセッション接続が閉じられる。
私は設定しようとしました:
ClientAliveInterval 3600 ClientAliveCountMax 10
同じ結果
セッションが短時間「生き残る」のはなぜですか?このタイムアウトを制御するにはどうすればよいですか?
私はそれがTCPキープアライブ設定に依存する答えを見つけました:
利用可能なTCP設定(FreeBSD 4.8およびupおよび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)
_
TCP接続が次の時間に切断された場合、システムは呼び出しを切断します:10000 + (5000 x 8) = 50000
ミリ秒(50秒)。起動時にこれらの設定をシステムに記憶させるには、_/etc/sysctl.conf
_ファイル
リモートセッションを有効に保つためのエレガントなソリューションが必要な場合は、screen
utityを確認する必要があります。このユーティリティを使用すると、コンピュータをログアウトまたはシャットダウンした後でも、リモートプログラムを実行し続けることができます。その後、利用可能なscreen
セッションを後で再接続できます。
画面は基本を習得するのに時間がかかりますが、画面を操作すると、画面の威力がわかります。
画面の使用に関するチュートリアルについては、このリンクを確認できます。 http://www.thegeekstuff.com/2010/07/screen-command-examples/
別の可能な解決策は mosh です。これは正確にはSSHではありませんが、コンピューターがスリープ状態になったとき、またはIPアドレスを変更した後でもシェル接続を維持します。
別の解決策は autossh を使用することです。これは基本的にsshセッションを監視し、中断されるとすぐに再接続します(たとえば、スリープサイクル後、しばらくWiFi接続が失われた場合など) 。これは、転送されたポート/ sshトンネルで特にうまく機能します。
これがチュートリアルです: http://linuxaria.com/howto/permanent-ssh-tunnels-with-autossh 。
データが送信されない場合、セッションが閉じられることがあります。 htop
を開いたままにすると、通常、ssh接続が閉じられなくなり、便利なリアルタイム情報が提供されます。
キープアライブは同じことを行う必要があります。間隔(2つのキープアライブ間の遅延)を60のような値に減らしてみて、何かが変わるかどうかを確認してください。