如何使 SSH 会话长时间处于连接状态

让你体验无忧的SSH会话。那就遵循我们本文的指南,保持连接活跃,消除冻结麻烦。

在远程服务器管理和安全数据传输方面,SSH(Secure Shell)作为不可或缺的工具。然而,它的便利性和安全性有时会受到一个常见的困扰:SSH会话冻结。

此外,会话突然中断可能会导致工作丢失、项目延迟和一种无助感。

但不要担心,解决方法就在眼前。本全面指南揭示了保持活跃和响应迅速的SSH连接的秘密,确保无冻结麻烦的无缝体验。

因此,告别沮丧,迎来高效、不间断的SSH会话。但在我们继续之前,让我们回答一个重要问题。

SSH为什么会关闭连接?

简单来说,这一切都取决于TCP超时。TCP超时是指TCP连接或网络操作在认为过程失败之前等待响应的持续时间。

在Linux中,TCP超时设置决定了在认为数据包丢失或连接已失去响应之前,TCP连接或操作应等待多长时间。

这种机制对于确保网络通信可靠和高效至关重要。

对于保持SSH连接活动,以下是三个关键的系统参数,我们将简要讨论它们。

  • tcp_keepalive_time:确定在空闲的TCP连接上发送TCP保活探测的时间间隔。保活探测检查远程对等端是否仍然活动和响应,即使没有数据传输。
  • tcp_keepalive_probes:由TCP端点发送的小型数据包,用于检查空闲连接中远程端点的健康和响应能力。它检测远程端点是否已变得不可访问或由于网络问题导致连接丢失。
  • tcp_keepalive_intvl:控制在空闲的TCP连接上发送保活探测的时间间隔。

每个值均以秒为单位,并可使用以下命令轻松检查。

 % cat /proc/sys/net/ipv4/tcp_keepalive_time
7200
linuxmi@linuxmi ~/www.linuxmi.com
 % cat /proc/sys/net/ipv4/tcp_keepalive_probes
9
linuxmi@linuxmi ~/www.linuxmi.com
 % cat /proc/sys/net/ipv4/tcp_keepalive_intvl
75

这意味着什么呢?保活时间为7200秒,即120分钟(2小时)。但是,这并不意味着您的SSH会话将保持活跃2小时,因为以下两个参数至关重要。

系统的默认设置在75秒间隔内发送9个探测包,总计675秒,之后会认为会话失败并关闭。

换句话说,在大约11分钟后,如果您没有在终端中输入任何内容,您的SSH会话将因不活动而被终止。

当然,您可以调整这些设置,但这并不是正确的方法。SSH提供了保持会话活动的机制,我们将在下面向您展示。

如何保持SSH会话活动

保持SSH会话活动是一个涉及客户端和服务器双方配置的过程。

Linux客户端配置

在客户端,即您的Linux桌面系统中,在您的主目录中创建一个文件(如果不存在)“~/.ssh/config”。

linuxmi@linuxmi ~/www.linuxmi.com
 % touch ~/.ssh/config
linuxmi@linuxmi ~/www.linuxmi.com
 % mkdir ~/.ssh
mkdir: 无法创建目录 "/home/linuxmi/.ssh": 文件已存在
linuxmi@linuxmi ~/www.linuxmi.com
 % chmod 700 ~/.ssh
linuxmi@linuxmi ~/www.linuxmi.com
 % nano ~/.ssh/config

以下是每个选项的含义:

  • Host:指定的配置仅适用于跟在“Host”关键字后面列出的主机。因为我们使用了通配符(*),它们适用于所有主机。
  • ServerAliveInterval:设置一个超时间隔(以秒为单位),如果在该间隔内未从服务器收到任何数据,SSH将通过加密通道发送一条消息以请求服务器响应。默认值为0,表示不会向服务器发送这些消息。
  • ServerAliveCountMax:设置可发送的服务器活动消息数,而SSH未从服务器收到任何消息。如果在发送服务器活动消息时达到此阈值,SSH将与服务器断开连接,终止会话。默认值为3。

换句话说,客户端将每120秒(2分钟)向服务器发送一条保活消息,共30次。120 * 30 = 3600秒,即1小时。即使没有活动,这是我们的SSH会话保持活跃的总时间。

Windows 客户端配置

为保持他们的 SSH 会话活跃,使用 PuTTY 进行远程 SSH 访问的 Windows 用户必须将“保持活动间隔秒数”选项在“连接”选项卡中设定为大于零的数值。

在下面展示的示例中,我们将该数值设定为 60,这意味着每分钟 PuTTY 客户端将向服务器发送一个保持活动消息以保持 SSH 连接处于活动状态。

在 PuTTY 上更改保持活动设置

当然,不要忘记保存您对 PuTTY 会话所做的更改(“类别” > “保存的会话” > “保存“  “Category” > “Saved Sessions” > “Save“)。

服务器端配置

更改服务器的超时选项会影响所有连接到服务器的客户端。您需要编辑“/etc/ssh/sshd_config”文件来执行此操作。

sudo nano /etc/ssh/sshd_config

然后设置以下三个选项:

TCPKeepAlive yes
ClientAliveInterval 120
ClientAliveCountMax 30

在 SSH 服务器上更改保持活动设置

这三个选项的含义如下:

  • TCPKeepAlive:指定系统是否应向客户端发送 TCP 保持活动消息。
  • ClientAliveInterval:设置超时间隔(以秒为单位)。如果从客户端未收到数据,则 SSH 服务器会通过加密通道发送消息,请求客户端的响应。默认值为 0,表示不会向客户端发送这些消息。
  • ClientAliveCountMax:设置可以在没有从客户端收到任何消息的情况下发送的客户端活动消息的数量。如果在发送客户端活动消息时达到了此阈值,则 SSH 服务器将断开客户端连接,终止会话。默认值为 3。

就像上面客户端配置的情况一样,SSH 服务器会保持连接活跃一个小时(120 * 30 = 3600 秒)。

最后,重新启动 SSH 服务器:

sudo systemctl restart ssh

总结

实施 SSH 超时和保持活动呈现了增强安全性和确保可靠连接之间微妙的平衡。

SSH 超时和保持活动的好处在于它们自动终止空闲会话,从而减轻未经授权访问和潜在攻击的风险,有助于网络安全。

另一方面,过于激进的超时和保持活动设置会导致意外断开连接,影响生产力并引起用户的沮丧。

因此,为了找到合适的平衡,管理员必须仔细考虑他们的网络基础设施和用户行为。这样做可以为远程通信创造一个安全有效的环境,促进用户满意度和数据保护。

有关其他配置文件选项的更多信息,请参阅客户端  client-side 或服务器端 server-side 的手册文件。

The post 如何使 SSH 会话长时间处于连接状态 first appeared on Linux迷.

版权声明:
作者:zhangchen
链接:https://www.techfm.club/p/92177.html
来源:TechFM
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>