計算機睡眠時可以保持SSH會話還活着嗎?當我把我的Mac(Lion)短時間睡眠,然後將它喚醒時仍然活着,但是如果我在一夜之間離開它,會話連接就會關閉。在計算機休眠時保持SSH會話活着?
我試過集:
ClientAliveInterval 3600 ClientAliveCountMax 10
相同的結果
爲什麼會 「存活」 的時間短的時間?我怎樣才能控制這個超時?
計算機睡眠時可以保持SSH會話還活着嗎?當我把我的Mac(Lion)短時間睡眠,然後將它喚醒時仍然活着,但是如果我在一夜之間離開它,會話連接就會關閉。在計算機休眠時保持SSH會話活着?
我試過集:
ClientAliveInterval 3600 ClientAliveCountMax 10
相同的結果
爲什麼會 「存活」 的時間短的時間?我怎樣才能控制這個超時?
我發現它依賴於TCP保持活動設置了答案:
有關可用的TCP設置列表(FreeBSD的4.8向上和5.4 ):
sysctl -A | grep net.inet.tcp
net.inet.tcp.keepidle
- 的時間量,以毫秒爲單位的(TCP)連接必須保持活動PR前空閒obes(如果啓用)被髮送。
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
文件
有時,會話在沒有數據傳輸時關閉。 離開htop
打開通常會阻止我的ssh連接關閉,並提供有用的實時信息。
Keepalive應該做同樣的事情。你也許可以嘗試將間隔(兩個keepalive之間的延遲)縮短到60,看看它是否會改變任何東西。
如果計算機未處於睡眠狀態SSH會話正常,但我想在睡眠後醒來後重新使用同一會話。它適用於短暫的睡眠時間,但不會很長時間。 –
您可能無法在休眠期間保持ssh會話打開 - 如果計算機正在睡眠,Keepalive將不會被髮送。屏幕是要走的路:http://www.gnu.org/software/screen/ – Gyscos
如果你想要一個優雅的解決方案來保持遠程會話活着,你應該檢查screen
的利用率。使用此實用程序時,即使在註銷或關閉計算機後,仍可使遠程程序繼續運行。然後,您可以稍後重新連接可用的screen
會話。
屏幕需要一些時間來學習基本知識,但是當你掌握它的時候,你會看到它有多強大。
您可以檢查使用屏幕此鏈接教程:http://www.thegeekstuff.com/2010/07/screen-command-examples/
確實是一個優雅的解決方案,但不回答我的問題。感謝您的建議,我會試一試。 –
我更喜歡更新的[tmux](https://tmux.github.io/)替代方案。 –
http://bphogan.com/2012/06/15/tmux/ –
另一種解決方案是使用autossh,它基本上監控您的ssh會話並在其中斷後立即重新連接(例如,在休眠週期之後,而且如果您在一段時間內丟失了WiFi連接)。這對轉發的端口/ ssh隧道特別有效。
這是一個教程:http://linuxaria.com/howto/permanent-ssh-tunnels-with-autossh。
這是應用在服務器端嗎? – netvope
我還沒有嘗試過,但我想是的,服務器端: [TCP保持連接(http://jampad.net/Library/tcpipprot/ch17.html): 如果用戶是建立連接,做一些工作,然後在一天結束時關閉計算機,而不註銷,則會留下半開連接。如果客戶端消失,在服務器端留下半開連接,並且服務器正在等待來自客戶端的一些數據,則服務器將永遠等待。 Keepalive功能旨在檢測服務器端的這些半開連接。 –
是否有可能爲我的睡眠系統提供一個代理服務器,它可以繼續向服務器發送數據包?通過這種方式,即使在睡眠之後,會話也可以保持活躍。 – sudeepdino008