保持SSH连接不断开
使用SSH连接服务器,如果有一段时间不操作,SSH连接就会断开,又需要重新登录。重新登录后,之前的登录的环境信息也丢失了,影响开发效率,所以有没有办法能保持SSH连接呢?答案是肯定的
使用SSH连接服务器,如果有一段时间不操作,SSH连接就会断开,又需要重新登录。重新登录后,之前的登录的环境信息也丢失了,影响开发效率,所以有没有办法能保持SSH连接呢?答案是肯定的。
SSH为什么会断开
在了解如何保持SSH连接直接,有必要了解为什么SSH会断开连接?查阅资料后发现有如下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
此篇文章的评论功能已经停用。