SSH 中的 ServerAliveCountMax 实际上是做什么的?
我试图确保当我通过 SSH 连接到我的服务器时,连接会在很长一段时间内保持打开状态,而不是在短时间不活动后连接断开。这是示例
Host *
ServerAliveInterval 60
ServerAliveCountMax 2
我从一个消息来源获悉,只要服务器收到该响应,上述设置将始终每 60 秒向服务器发送一次响应。但是,如果由于某种原因响应没有通过服务器,它将尝试发送另一条消息。如果该消息也失败,那么它将关闭连接。(我觉得这是错误的)
然而,第二个和第三个消息来源说的有些不同。他们声称如果有一段时间不活动,将每 60 秒向服务器发送一条消息,但它只会通过 2 个请求发送,然后它将关闭连接。
那么 ServerAliveCountMax 到底是做什么的呢?
您认为“这是错误的”是正确的。请参阅手册页:
当 SSH 服务器被配置为在一段时间没有流量后关闭连接时,服务器活动消息很有用(例如,提供 SSH 访问的共享 Web 托管提供商几乎总是这样做)。设置这两个选项每秒钟发送一个数据包
ServerAliveInterval
,最多发送一次,ServerAliveCountMax
从而使会话保持活动状态。为了回答有关将任一选项设置为不确定性的评论
0
,我已经阅读了openssh
实现的源代码,这就是我所看到的......设置
ServerAliveInterval
为0
不会发送数据包,但它会无限期地保持会话活动,假设连接没有由于 TCP 超时而被丢弃并且服务器没有配置为丢弃不活动的客户端。设置为与设置
ServerAliveCountMax
为0
具有相同的效果。ServerAliveInterval
0
将任一值设置为负数或大于
INT_MAX
(即 2,147,483,647)将导致“整数值...”错误。在(ie 2,147,484) 到(ie 2,147,483,647)
ServerAliveCountMax
之间 设置也相当于将任一值设置为。INT_MAX/1000+1
INT_MAX
0
因此,从本质上讲,您可以获得的最多超时(同时仍在发送数据包)是
INT_MAX/1000
(即 2,147,483)。如果会话超时1
且完全没有流量,那将让您有将近 25 天的时间。显然,SSH 的其他实现可能会有不同的结果。