使用SSH方式登录Linux操作系统的云服务器时,过一段时间就会自动断开连接。本篇操作介绍如何保持SSH会话持续连接不断开。
配置sshd
可通过修改sshd配置文件来解决自动断开的问题,编辑/etc/ssh/sshd_config文件设置心跳,保持连接。
vim /etc/ssh/sshd_config
# 新增如下两个配置
ClientAliveInterval 600
ClientAliveCountMax 10
ClientAliveInterval 600 表示每600秒发送一次请求, 从而保持连接。
ClientAliveCountMax 10 表示服务器发出请求后客户端没有响应的次数达到10次,就自动断开连接。
无响应的SSH客户端将在大约600×10=6000秒后断开连接。
ClientAliveInterval设置超时间隔(以秒为单位),在此间隔之后,如果尚未从客户端接收到任何数据,则sshd将通过加密的通道发送消息以请求客户端的响应。默认值为0,表示这些消息将不会发送到客户端。此选项仅适用于协议版本2。
ClientAliveCountMax设置客户端活动消息的数量,该消息可以在sshd接收不到来自客户端的任何消息的情况下发送。如果在发送客户端活动消息时达到此阈值,则sshd将断开客户端连接,从而终止会话。
客户端活动消息的使用与TCPKeepAlive有很大不同。客户端活动消息是通过加密通道发送的,因此不会被欺骗。由TCPKeepAlive启用的TCP keepalive选项是可欺骗的。
ClientAliveCountMax设置客户端活动消息的数量,该消息可以在sshd接收不到来自客户端的任何消息的情况下发送。如果在发送客户端活动消息时达到此阈值,则sshd将断开客户端连接,从而终止会话。
客户端活动消息的使用与TCPKeepAlive有很大不同。客户端活动消息是通过加密通道发送的,因此不会被欺骗。由TCPKeepAlive启用的TCP keepalive选项是可欺骗的。
修改完后重启sshd
# CentOS6
service sshd restart
# CentOS7
systemctl restart sshd
# 注意,执行这个操作会断开ssh连接。
设置Linux系统的空闲等待时间TMOUT
如果第一个方法不能解决断开连接的问题,那么大概率是因为在环境变量种配置了TMOUT。为了增强Linux系统的安全性,我们需要在用户输入空闲一段时间后自动断开,这个操作可以由设置TMOUT值来实现。将以下字段加入到/etc/profile 中即可(对所有用户生效)。
vim /etc/profile
export TMOUT=6000 # 设置6000秒内用户无操作就自动断开终端
readonly TMOUT # 将值设置为readonly 防止用户更改
注意:设置了readonly 之后在当前shell下是无法取消的,需要先将/etc/profile 中设置readonly行注释起来或直接删除,logout 后重新login 。
有的时候设置了超时时间很短的话,当需要进行很多操作的时候,不希望经常超时断开,可以每次登录时候先在命令行下面执行下的命令,重启失效。执行以下命令,防止超时退出。
$TMOUT=0