web-dev-qa-db-ja.com

コンピューターのスリープ中にSSHセッションを維持しますか?

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

私は設定しようとしました:

 ClientAliveInterval 3600 
 ClientAliveCountMax 10 

同じ結果

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

28
Alex Yusupov

私はそれが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_ファイル

16
Alex Yusupov

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

画面は基本を習得するのに時間がかかりますが、画面を操作すると、画面の威力がわかります。

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

7
Hakan Serce

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

5
Jason Martens

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

これがチュートリアルです: http://linuxaria.com/howto/permanent-ssh-tunnels-with-autossh

2
bdoering

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

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

1
Gyscos