到目前为止,我发现了什么:
ssh和sshd的TCPKeepAlive是/否
sshd的ClientAliveCountMax
sshd的ClientAliveInterval
>
ssh的ServerAliveCountMax
ssh的ServerAliveInterval
要更改“ ClientAliveCountMax”,我必须在每个目标上修改sshd_config计算机(默认情况下禁用此选项)。
所以我的问题是-我是否也可以出于自身目的使用“ TCPKeepAlive”(不更改源/目标计算机上的其他任何内容)? >
目标操作系统是SLES11 SP2-但我认为这与这里无关。
#1 楼
您可能要为此使用ServerAlive设置。它们不需要在服务器上进行任何配置,并且可以根据需要在命令行上进行设置。ssh -o ServerAliveInterval=5 -o ServerAliveCountMax=1 $HOST
这将每5秒发送一次ssh keepalive消息,如果需要发送另一个Keepalive,但未收到对最后一个的响应,则连接将终止。
ServerAliveInterval
在TCP层上运行。它发送一个空的TCP ACK数据包。可以将防火墙配置为忽略这些数据包,因此,如果您通过的防火墙丢弃了空闲连接,则这些防火墙可能无法使连接保持活动状态。它实际上将通过ssh发送数据,因此TCP数据包中已加密了数据,并且防火墙无法确定其是否为保持活动或合法数据包,因此它们工作得更好。评论
我认为这是正确的方向。初步测试表明,此方法可以正常工作-在连接断开后的5秒内,它将终止发送和接收ssh / sshd子进程。我认为TCPKeepalive只是使用TCP-stack-defaults-因此也很难配置。
–指甲
2012年3月15日20:05
这也解决了幻影用户问题。我相信这也可以在PuTTY设置中完成,在“设置” |“设置”下,将keepalive之间的秒数更改为1800。连接。
–鲍勃·斯坦(Bob Stein)
2015年1月14日15:40
@Patrick,“忽略这些数据包”是指“丢弃这些数据包”吗?
–守正
20 Mar 23 '20 at 9:43
不,我的意思是他们不会重置防火墙的“丢弃空闲连接”计时器。防火墙必须允许ACK通过,否则TCP连接将左右中断。
–随钻
20-05-29在1:42
#2 楼
TCPKeepAlive
选项实际上是使连接保持活动状态的一种非常不同的方法,类似于ClientAlive或ServerAlive选项。 > 客户端活动消息通过加密的通道发送,因此不会被欺骗。
TCPKeepAlive
启用的TCP keepalive选项是可欺骗的。当客户端或服务器依赖于知道连接何时变为非活动状态时,客户端活动机制非常有用。TCPKeepAlive
确保系统是否应将TCP keepalive消息发送到另一端。默认选项始终处于启用状态。如果使用
ClientAliveInterval
,则可以禁用TCPKeepAlive
。此选项将通过加密通道发送一条消息,以请求客户端响应(默认值为0,因此不会向客户端发送任何消息),并且ClientAliveCountMax
设置sshd通过终止连接来断开客户端连接之前客户端活动消息的数量会议。
评论
这些参数均用于连接处的防火墙或中间设备将终止连接的情况。这些参数用于发送定期数据以保持连接有效,还用于在有X个未完成的答复时关闭连接。您能提供您所做工作的更多细节吗?您正在使用ControlMaster选项并使用从属连接吗?我只想构建一种方法,使用带有几个物理线路的几个ssh网络连接来确定另一个节点是否“关闭”。我通过打开ssh-session(或多或少会产生无限循环)来完成此操作。如果连接中断,我希望该会话终止。我想知道TCPKeepalive的间隔/计数是多少。