电脑睡眠时保持SSH会话活动?

时间:2012-05-19 12:40:52

标签: ssh timeout

在计算机睡眠时是否可以保持SSH会话处于活动状态?当我让我的Mac(狮子)睡了一小段时间然后唤醒它仍然活着,但如果我一夜之间离开会话连接就会关闭。

我尝试过设置:

ClientAliveInterval 3600
ClientAliveCountMax 10

相同的结果

为什么会话在短时间内“存活”?如何控制此超时?

5 个答案:

答案 0 :(得分:16)

我找到的答案取决于tcp keepalive设置:

有关可用TCP设置的列表(FreeBSD 4.8 an up和5.4):

sysctl -A | grep net.inet.tcp
  • net.inet.tcp.keepidle - 在发送keepalive探测(如果已启用)之前,(TCP)连接必须处于空闲状态的时间(以毫秒为单位)。

  • net.inet.tcp.keepintvl - 发送到远程计算机的keepalive探测之间的间隔(以毫秒为单位)。发送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文件

答案 1 :(得分:7)

如果您想要一个优雅的解决方案来保持远程会话存活,您应该检查screen的优点。使用此实用程序时,即使在注销或关闭计算机后,也可以使远程程序保持运行。然后,您可以稍后重新连接可用的screen会话。

屏幕需要一些时间来学习基础知识,但是当你掌握它的时候,你会看到它有多强大。

您可以查看此链接以获取有关使用屏幕的教程:http://www.thegeekstuff.com/2010/07/screen-command-examples/

答案 2 :(得分:5)

另一种可能的解决方案是mosh,它不完全是SSH,但在计算机进入休眠状态时,甚至在更改IP地址后,都会保持shell连接处于活动状态。

答案 3 :(得分:2)

另一个解决方案是使用autossh,它基本上监视你的ssh会话并在它被中断后立即重新连接(例如,在睡眠周期之后,但是如果你暂时失去WiFi连接) 。这对于转发的端口/ ssh隧道特别有效。

这是一个教程:http://linuxaria.com/howto/permanent-ssh-tunnels-with-autossh

答案 4 :(得分:1)

有时,会话在没有数据传输时关闭。 保持htop打开通常会阻止我的ssh连接关闭,并提供有用的实时信息。

Keepalive应该做同样的事情。您可以尝试将间隔(两个Keepalive之间的延迟)减少到60之类,看看它是否会发生任何变化。