20 / 10 / 29
我最近在使用阿里云轻量服务器的时候,通过 SSH 连接,过了一段时间发生了卡死的现象,然后再连接就连接不上了,我尝试延长 SSH 连接时长以避免此问题。
SSH 是 Secure Shell(安全外壳协议)的简称,是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境。1
OpenSSH(OpenBSD Secure Shell)是使用 SSH 透过计算机网络加密通讯的实现。2
在用户使用 SSH 登录之后,若一段时间不操作(与服务器交互),则会触发 OpenSSH 软件的超时设置,那么超时时长为多久呢?
在探寻这个时间之前,我们先来了解一下 OpenSSH 配置文件中的两个属性 ClientAliveInterval
和 ClientAliveCountMax
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
小提示:通常情况下,配置文件注释掉的内容即为默认设置
很简单,设置一下上面两个属性即可。我们可以更改 sshd_config
文件中如下两个值:
ClientAliveInterval 120 ClientAliveCountMax 720
第一个配置服务器每隔 120 秒向客户端发送空包,第二个配置服务器在客户端每隔 720 秒 即 720 * 120 = 86400 秒 = 24 小时不活动时关闭连接。
记住,设置完之后需要重启或重载 ssh 服务使其生效:
service sshd restart
如果没有服务器的 root(管理) 权限怎么办?你可以配置你的 SSH 客户端想服务器发送 alive 消息,以达到相同效果。可以通过 SSH 客户端的 ServerAliveInterval
选项来控制。
你可以选择在 /etc/ssh/ssh_config
(全局)或 ~/.ssh/config
(当前单个用户)中进行配置。
ServerAliveInterval 30
设置上面的值,意为让客户端每隔 30 秒向服务器发送一次 alive 消息。
我不是服务器方面的专家,如果理解有误,还望不吝指正。
“如果你想有任何想法,欢迎在 X/Twitter 上联系我。”