我最近在使用阿里云轻量服务器的时候,通过 SSH 连接,过了一段时间发生了卡死的现象,然后再连接就连接不上了,我尝试延长 SSH 连接时长以避免此问题。

什么是 SSH 和 OpenSSH

SSH 是 Secure Shell(安全外壳协议)的简称,是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境。1

OpenSSH(OpenBSD Secure Shell)是使用 SSH 透过计算机网络加密通讯的实现。2

OpenSSH 超时时间的相关属性 ClientAliveInterval 和 ClientAliveCountMax

在用户使用 SSH 登录之后,若一段时间不操作(与服务器交互),则会触发 OpenSSH 软件的超时设置,那么超时时长为多久呢?

在探寻这个时间之前,我们先来了解一下 OpenSSH 配置文件中的两个属性 ClientAliveIntervalClientAliveCountMax

  • ClientAliveInterval - 设置超时间隔(以秒为单位),如果没有收到来自客户端的数据,sshd(8) 将通过加密通道发送消息,请求服务端做出响应。默认值为 0,表示不会向客户端发送这些消息。
  • ClientAliveCountMax - 设置 ssh(8) 没有收到客户端的任何消息的情况下可以发送的 client alive 消息的数量。如果在发送 client alive 消息时达到了这个阈值,sshd 会断开客户端的连接,终止会话。默认值是3,如果 ClientAliveInterval 设置为 15,ClientAliveCountMax 保持在默认值,那么无响应的 SSH 客户端将在 45s 后断开连接。

OK,知道了这些之后,让我们去服务器上看下配置文件的的设置。连接服务器之后,在下面位置可找到配置文件

cat /etc/ssh/sshd_config

搜索一下可以找到对应的这两个设置,发现它们是注释状态,且值和上述一致。

#ClientAliveInterval 0
#ClientAliveCountMax 3

小提示:通常情况下,配置文件注释掉的内容即为默认设置

服务器端如何设置 SSH 连接超时时长

很简单,设置一下上面两个属性即可。我们可以更改 sshd_config 文件中如下两个值:

ClientAliveInterval 120
ClientAliveCountMax 720

第一个配置服务器每隔 120 秒向客户端发送空包,第二个配置服务器在客户端每隔 720 秒 即 720 * 120 = 86400 秒 = 24 小时不活动时关闭连接。

记住,设置完之后需要重启或重载 ssh 服务使其生效:

service sshd restart

客户端如何设置 SSH 连接超时时长

如果没有服务器的 root(管理) 权限怎么办?你可以配置你的 SSH 客户端想服务器发送 alive 消息,以达到相同效果。可以通过 SSH 客户端的 ServerAliveInterval 选项来控制。

你可以选择在 /etc/ssh/ssh_config(全局)或 ~/.ssh/config(当前单个用户)中进行配置。

ServerAliveInterval 30

设置上面的值,意为让客户端每隔 30 秒向服务器发送一次 alive 消息。

我不是服务器方面的专家,如果理解有误,还望不吝指正。

延伸阅读


  1. 1

    https://www.ietf.org/rfc/rfc4251.txt

  2. 2

    https://zh.wikipedia.org/wiki/OpenSSH

最后更新于:
2020-10-30