如何防止无人值守的SSH连接保持连接的状态
如果你是一个数据中心的Linux管理员,你一定知道Secure Shell的价值。如果没有这个工具,您将很难在服务器上完成很多远程管理工作。实际上,您可能整天都在使用SSH进出机器。或者,您可能通过SSH进入服务器,而无意中使该连接一整天都处于开启状态。
如果你让连接处于运行状态,而有人在你不在的时候刚好经过你的办公桌,那该怎么办?这样一直保持连接状态可能会带来严重的安全问题。
其实它有一个链接超时功能,可以让你配置SSH服务器,在设定的非活动时间后,它将断开用户的连接。
一、如何在服务器上配置SSH超时
开箱即用,SSH守护进程配置没有配置启用非活动超时的必要选项。这很好,因为我们可以很容易地添加它们。然而,有两种类型的配置是我们要注意的。第一种是防止空闲会话在服务器端保持连接。
要处理这个问题,请打开服务器上的配置文件,用下面的命令进行编辑。
sudo nano /etc/ssh/sshd_config
滚动到该文件的底部,并添加以下三行。
TCPKeepAlive yes
ClientAliveInterval 30
ClientAliveCountMax 2
默认的ClientAliveInterval是以秒为单位。你也可以使用:
ClientAliveInterval 5m
然而,技巧在于ClientAliveCountMax选项。它可以通知SSH守护进程计算超时间隔的次数。因此,如果你把ClientAlivecountMax设置为2,它将计算ClientAliveInterval的2倍。如果您将 ClientAliveInterval 设置为 5m,ClientAliveCountMax 设置为 2,则总超时时间为 10 分钟。
你也可以将选项设置为:
ClientAliveInterval 10m
ClientAliveCountMax 0
上面的配置也会在不活动10分钟后超时。
配置完成后,用下面的命令重启SSH守护进程。
sudo systemctl restart sshd
上述配置将从服务器端处理任何空闲会话。
二、如何为客户端超时配置安全壳?
现在我们要在客户端设置超时。你不需要这样做,因为服务器的设置应该可以处理空闲超时。但是,如果你过于谨慎的话,你可能想通过SSH防止任何客户端通过SSH连接到任何远程服务器。不幸的是,这不能在服务器上进行全局设置,必须在单个客户端上进行处理。
这个配置是在.bashrc文件中处理的。但是,你可以在全局文件中通过以下命令来完成,而不是通过每个用户的 ~/.bashrc 文件来完成。
sudo nano /etc/bash.bashrc
在该文件中,向下滚动到底部并添加以下几行。
TMOUT=300
readonly TMOUT
export TMOUT
TMOUT选项设置了允许空闲连接的时间(单位:秒)。TMOUT=300的配置将在5分钟后中断空闲连接。
三、如何测试该配置
现在你已经配置好了超时时间间隔,打开一个新的终端窗口,通过SSH连接到任何一个远程Linux服务器,不要在终端上做任何事情。当分配的非活动时间一过,你就会被踢出会话。
这就是断开SSH会话在一段时间不活动后的连接。这样做是为了防止任何人在你(或任何人)离开了他们的办公桌后,在SSH连接启动并运行后,能够进行各种恶作剧。