保持SSH长连接不断掉

问题背景

无论是使用xshell这样的ssh软件,还是通过Terminal终端,ssh远程连接服务器的时候,长时间不操作,就会自动断开连接,就需要重新进行连接

解决方法

方法一:修改服务器端ssh配置

首先登陆到远程服务器上,打开/etc/ssh/sshd_config配置文件,找到以下三条配置信息,并修改

# 修改前
#TCPKeepAlive yes
#ClientAliveInterval 0
#ClientAliveCountMax 3

# 修改后
TCPKeepAlive yes
ClientAliveInterval 10
ClientAliveCountMax 5

TCPKeepAlive yes 表示tcp链接保持活跃
ClientAliveInterval 10表示每10秒向客户端发送一次保持连接的信号
ClientAliveCountMax 5表示客户端如果5次没有响应,就断开连接。

修改完成后重新启动ssh服务,执行以下命令

sudo systemctl restart sshd

方法二:修改客户端(如果是linux的话)

如果使用ssh链接的客户端也是linux,那么可以配置客户端上的ssh配置文件/etc/ssh/ssh_config,同样修改成以下内容

# 修改前
#TCPKeepAlive yes
#ClientAliveInterval 0
#ClientAliveCountMax 3

# 修改后
TCPKeepAlive yes
ClientAliveInterval 10
ClientAliveCountMax 5

修改完成后重新启动ssh服务,执行以下命令

sudo systemctl restart sshd

方法三:使用ssh命令参数

在使用ssh命令时,使用ServerAliveInterval参数,设置心跳时间,比如这里设置间隔60秒发送一次心跳包

ssh -o ServerAliveInterval=60 root@IPAddress

但是该命令,只有在本次登录有效,下次进行ssh远程登录保持不断开,依旧需要带上该参数信息