保持SSH连接不断开
使用SSH连接服务器,如果有一段时间不操作,SSH连接就会断开,又需要重新登录。重新登录后,之前的登录的环境信息也丢失了,影响开发效率,所以有没有办法能保持SSH连接呢?答案是肯定的

使用SSH连接服务器,如果有一段时间不操作,SSH连接就会断开,又需要重新登录。重新登录后,之前的登录的环境信息也丢失了,影响开发效率,所以有没有办法能保持SSH连接呢?答案是肯定的。

SSH为什么会断开

在了解如何保持SSH连接直接,有必要了解为什么SSH会断开连接?查阅资料后发现有如下3个原因:

  1. 服务器存在防火墙,会关闭超时空闲连接,或设置了关闭超时空闲连接。
  2. 客户端和服务器之间存在路由器,路由器也可能带有防火墙,会关闭超时空闲连接。
  3. 客户端存在防火墙,会关闭超时空闲连接。

所以SSH会断开的原因是因为防火墙关闭了空闲的连接。知道了原因,就知道如何防止SSH断开了。只需要把连接伪装成活跃的连接,也就是需要心跳的功能。这个心跳可以由客户端发起,也可以由服务端发起。

客户端主动保持连接

编辑用户目录下的$HOME/.ssh/config文件,如果不存在,则自己创建.ssh目录和config文件(必须保持.ssh目录700权限,config文件600权限)。添加下面内容:

Host alias_name
      HostName 192.168.1.101
      Port 22
      User root
      ServerAliveInterval 120

ServerAliveInterval 60表示每60秒,向服务器发送一次请求,从而保持连接。

登录服务器:

➜  ~ ssh alias_name

如果想为所有主机设置保持连接,可以使用下面配置:

Host *
    ServerAliveInterval 120

如果想保持单次连接不断开:

ssh -o ServerAliveInterval=120 user@host

还可以设置别名:

alias goXXX='ssh -v -o ServerAliveInterval=60 user@host'

并通过下面命令登录:

➜  ~ goXXX

服务器主动保持连接

编辑/etc/ssh/sshd_config,添加配置项:

ClientAliveInterval 300      
ClientAliveCountMax 10

ClientAliveInterval 300 表示每300秒发送一次请求, 从而保持连接。

ClientAliveCountMax 10 表示服务器发出请求后客户端没有响应的次数达到10次,就自动断开连接。

则无响应的SSH客户端将在大约300x10=3000秒后断开连接。


最后修改于 2022-09-16

此篇文章的评论功能已经停用。