linux ssh 会话超时设置

neevop 十二月 5, 2022

linux ssh 会话超时设置

简述

为啥我的ssh 老是断开连接,为啥要设置断开机制,断开的时候为啥终端卡住,默认保持连接的时长是多久,是不是应该设置保持连接永久存活,怎么设置。。。。。。马德,关于ssh,应该可以写本书了吧? ——不至于不至于,一起来了解一下吧。

Secure Shell session简称 (SSH) ,它最著名的应用是远程登录和命令行执行,基于客户端-服务端架构。包括三个主要的分层组件:传输层提供服务器身份验证、机密性和完整性;用户认证协议向服务器验证用户;连接协议将加密隧道复用为多个逻辑通信通道。

SSH会话自动断开机制

ssh终端超时时间指的是 SSH 会话在关闭之前可以空闲的分钟数。默认值设定在服务端的/etc/ssh/sshd_config文件中

#ClientAliveInterval 0
#ClientAliveCountMax 3

从这两个参数可以看到,默认设置的超时时间是0分钟。ssh会话的最小超时间隔为 2 分钟。最大间隔为 9999 分钟,所以我们的ssh回话一般会在空闲两分钟后断开连接。

ClientAliveInterval参数指定服务器在向客户端系统发送空数据包以保持连接有效之前将等待的时间(以秒为单位)。

另一方面,该ClientAliveCountMax参数定义了在未从客户端获取任何消息的情况下发送的客户端活动消息的数量。如果在发送消息时达到此限制,则sshd守护程序将丢弃会话,从而有效地终止 ssh 会话。

因此超时时长应该是

Timeout value = ClientAliveInterval * ClientAliveCountMax

因此我们可以通过设置这两个参数来延长会话超时的时长。例如

ClientAliveInterval  1200
ClientAliveCountMax 3

注意修改设置后,要把设置前方的#注释符删除。这里设置的超时时长是 1200 * 3 / 60 /60 =1 小时。

当修改完配置文件完成后,我们还需要重新加载sshd守护程序才可以加载参数。

sudo systemctl reload sshd

防止SSH 会话超时

通过以小于超时值的指定间隔在客户端和服务器之间发送“空数据包”,我们可以避免 SSH 超时。数据包是从客户端还是服务器发送的并不重要,只要两者之间存在一些通信即可。

如果我们将 SSH 客户端设置为发送“空数据包”,您将防止从您的计算机建立的所有 SSH 连接发生 SSH 超时。可以编辑本地 SSH 配置文件~/.ssh/config(没有文件就用户自己建)并添加

ServerAliveInterval 120

这里设置时间小于2分钟都可以,看个人喜好。这里的时间也可以与SSH服务端设置的超时时间匹配来设置,这样就可以保持某个会话不超时,而不是本客户端的所有会话。

另一方面,我们设置 SSH 服务器以发送“空数据包”,并且您将防止每个客户端与服务器建立的所有 SSH 连接超时。这是两种不同的解决思路。在服务器上的 SSH 守护程序配置/etc/ssh/sshd_config中添加

ClientAliveInterval 120
ClientAliveCountMax 720

这将使服务器每 120 秒向客户端发送一个“空数据包”,并且在客户端处于非活动状态达到 720 个间隔(120 秒 * 720 = 86400 秒 = 24 小时)之前不会断开它们,当然超过一天也不活跃也会断开连接。

SSH会话超时作用

作为SSH 安全措施,始终建议不要将 SSH 超时值设置为一个巨大的值。这是为了防止有人在您离开很长一段时间后路过并劫持您的会话。

参考文献

  1. https://www.tecmint.com/increase-ssh-connection-timeout/#:~:text=As%20an%20SSH%20security%20measure,an%20extended%20period%20of%20time.
  2. https://www.bjornjohansen.com/ssh-timeout
  3. https://www.tecmint.com/increase-ssh-connection-timeout/