计算机睡眠时可以保持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