![设置 ClientAliveInterval 后如何保持登录状态?](https://linux22.com/image/154996/%E8%AE%BE%E7%BD%AE%20ClientAliveInterval%20%E5%90%8E%E5%A6%82%E4%BD%95%E4%BF%9D%E6%8C%81%E7%99%BB%E5%BD%95%E7%8A%B6%E6%80%81%EF%BC%9F.png)
出于合规性原因,我的所有 Debian 服务器都使用以下配置设置为 15 分钟后超时/etc/ssh/sshd_config
ClientAliveInterval 900
ClientAliveCountMax 0
当然,这使得在这些服务器上进行操作变得烦人且危险,因为任何空闲时间都可能会断开连接。
我正在寻找一个简单的命令,可以在不修改现有配置的情况下保持客户端会话处于活动状态。
答案1
如果您正在关注安全技术实施指南它目前指出
ClientAliveInterval 600
ClientAliveCountMax 0
这将断开连接并且闲置的10 分钟后,ssh 会话(即 putty 窗口)。
在 RHEL 7 中,从 rhel-server-7.9-x86_64-dvd.iso 或 centos 进行全新安装时,这两项的默认值分别为0
和3
,这会导致 ssh 会话永远不会自动终止。
详细信息请参见:https://stackoverflow.com/questions/71174746/clientaliveinterval-is-not- opening-the-idle-connection
最相关的:这些不适用于用户空闲的情况,正如该手册页摘录所述,它们适用于无响应的 SSH 客户端。如果客户端程序冻结或连接断开,客户端将无响应。客户端不应该仅仅因为人类用户离开键盘而没有响应:ssh 客户端仍然会接收从服务器发送的数据包。
它在客户端,在putty.exe中, 在下面联系和用于控制连接的选项有keepalive 之间的秒数(0 表示关闭)。默认情况下为 0。将其设置为小于ClientAliveInterval
中设置的数字sshd_config
。
如果不使用 Windows 中的 putty.exe,并且使用来自另一个 linux 机器的 ssh,则客户端 ssh 是通过配置的,/etc/ssh/ssh_config
但是其中没有相应的项目,我知道其中经常发送一个 keepalive 数据包。
注意:在 Windows 中使用 putty.exe,其默认 keepalive 为 0,并且 ssh 服务器设置了 ClientAliveInterval,即使打开vi
也会断开连接,从而导致丢失的将通过其 .swp 文件恢复的文件vi
。或者,如果运行一个程序不断地吐出输出,那是来自服务器端的,并且 ssh 连接将被终止,从而杀死你的工作......必须有来自客户端的某些东西(按键)来计数并导致活着。因此,使用 Windows 中的 putty.exe,这是一个相当简单的修复,对于从 linux 到 linux 的 ssh,我不知道如何在 ssh 会话中客户端不按键盘按键的情况下防止断开连接。
更新:从linux到linux似乎你需要使用ssh -o
和各种选项。更多详情请参见:tcp-keepalive 在 ssh 中如何工作?
例如:
ssh -o ServerAliveInterval=5 -o ServerAliveCountMax=1
有点像 /etc/yum.conf 有 gpgcheck=1,并且只是做百胜安装--nogpgcheck :)
答案2
我认为您通过设置禁用了配置最大客户端存活数到0。所以将其设置为 1 应该可以完成工作。
最大客户端存活数
设置在 sshd(8) 没有从客户端接收到任何消息的情况下可以发送的客户端活动消息的数量。如果在发送客户端活动消息时达到此阈值,sshd 将断开客户端连接,终止会话。需要注意的是,客户端活动消息的使用与 TCPKeepAlive 有很大不同。客户端活动消息通过加密通道发送,因此不会被欺骗。 TCPKeepAlive 启用的 TCP keepalive 选项是可欺骗的。当客户端或服务器依赖于了解连接何时变为非活动状态时,客户端活动机制非常有价值。
这默认值为 3。如果ClientAliveInterval 设置为 15,并且 ClientAliveCountMax 保留为默认值,无响应的 SSH 客户端将在大约45秒。
但我不得不承认我同意@TienPhan。最好不要将配置放在服务器上。但这仍然取决于用例。如果所有用户都应以相同的方式处理,则可以选择服务器端配置。
答案3
事实上,我们不需要在服务器端设置间隔时间。更多的东西不会让你快乐。
您可以使用“ServerAliveInterval”并将其添加到 ~/.ssh/config 文件中,如下所示:
host *
ServerAliveInterval 120
注意:120是秒,你可以改变你想要的。
然后它会影响该文件中的所有服务器。或者您可以为单独的服务器进行设置。