文章目录
- 问题
- 解决
- 方法一:配置服务端
- 关于ClientAliveInterval和ClientAliveCountMax
- 1、打开终端,打开SSH配置文件:输入以下命令:
- 2、打开配置文件后,添加以下内容:
- 3、添加后,Esc按 <Enter>,:wq然后按 Enter 保存更改并关闭编辑器
- 4、重新启动SSH服务以使设置生效。输入以下命令:
- 方法二:客户端配置
- 关于 ServerAliveInterval 和 ServerAliveCountMax
- 方法三:终端设置
- 1、首先,安装 tmux:
- 2、创建一个新的 tmux 会话:
- 3、开始在新会话中工作。这是您安装 Ruby 的地方。
- 4、要在工作时暂时退出会话,请按 Ctrl-b 然后 按d
- 5、重新连接后,使用以下命令重新连接到您的 tmux 会话:
问题
之前我说过完美解决 vscode 多设备通过ssh登录远程服务器免密登录,解决了每次打开vscode可以免密码操纵,那只是第一步。
在开发工作中我们有时会遇到一些问题。问题是某些远程任务(例如大型软件构建或更新)需要很长时间,导致 SSH 连接超时。
我自己在 服务器 上部署 应用程序时遇到了一个问题,Ruby 安装期间 SSH 连接超时。
使用 SSH 连接到远程服务器时,如果长时间处于空闲状态,连接可能会断开。这是因为一些网络设备和服务器关闭了空闲连接,以至于我们每过一会儿打开vscode界面就会存在断开重新自动连接的动画,那么如果我们想一直吊着服务器一直占用连接,本文将提供一些有助于防止此类断开连接的技巧。
解决
方法一:配置服务端
配置 SSH 服务器以维持空闲连接。为此,您需要/etc/ssh/sshd_config在SSH 服务器的配置文件中编辑ClientAliveInterval和ClientAliveCountMax 。
关于ClientAliveInterval和ClientAliveCountMax
“ClientAliveInterval”和“ClientAliveCountMax”是可以在SSH服务器端设置的参数,用于控制连接的空闲超时时间。
ClientAliveInterval
功能:ClientAliveInterval 定义了 SSH 服务器等待的时间(以秒为单位),如果在该时间段内没有从客户端收到任何数据(例如,客户端没有发送命令或数据),服务器将向客户端发送一个 keepalive 信号。
用途:这个设置用于确保 SSH 连接不会因为长时间没有活动而被防火墙或网络设备断开。服务器会定期发送信号,检查客户端是否仍然处于活动状态。
默认值:如果没有显式设置,ClientAliveInterval 默认为 0,表示不会发送任何 keepalive 信号,即没有空闲超时机制。
ClientAliveInterval 60
这表示服务器每 60 秒检查一次客户端是否仍然活跃,如果没有收到客户端的回应,它会发送一个空的信号。
ClientAliveCountMax
功能:ClientAliveCountMax 参数控制在没有收到客户端响应的情况下,服务器可以发送多少次 keepalive 信号。换句话说,这个参数定义了服务器在失去连接时,最多允许的 keepalive 检查次数。
用途:如果客户端没有响应服务器发送的 keepalive 信号,服务器会重复尝试几次,直到达到 ClientAliveCountMax 设置的最大次数。如果超出最大次数,服务器会断开连接。
默认值:默认值为 3,即如果客户端没有响应 3 次 keepalive 信号,服务器将关闭连接。
ClientAliveCountMax 3
这表示服务器最多会向客户端发送 3 次没有响应的 keepalive 信号。如果客户端在这 3 次检查后仍然没有响应,服务器会断开连接。
1、打开终端,打开SSH配置文件:输入以下命令:
sudo vi /etc/ssh/sshd_config
2、打开配置文件后,添加以下内容:
ClientAliveInterval 30
ClientAliveCountMax 60
3、添加后,Esc按 ,:wq然后按 Enter 保存更改并关闭编辑器
这表示:
ClientAliveInterval 30:每 30秒,服务器会向客户端发送一个空的 keepalive 信号。
ClientAliveCountMax 60:如果客户端在连续 60 次(即 1800 秒内)没有响应 keepalive 信号,服务器将断开连接。
这种配置可以防止由于网络不活动或客户端失去连接导致 SSH 会话挂起,从而确保在长时间不活动时连接能够正常终止。
4、重新启动SSH服务以使设置生效。输入以下命令:
sudo service ssh restart
or
sudo systemctl restart sshd
如果设置项已经存在,则直接改变其值即可。另外,各设置的适当值会根据您的环境而有所不同,因此请根据需要进行调整。
请注意,此设置需要管理权限才能访问 SSH 服务器并进行更改。
另外,由于这是服务器端的设置,因此无法防止由于客户端网络不稳定而导致的连接断开。
方法二:客户端配置
首先,我们将修改 SSH 客户端的配置,通过发送定期的“keep alive”消息来防止连接处于空闲状态。
为此,您需要编辑SSH 服务器的配置文件~/.ssh/config中的ServerAliveInterval和 ServerAliveCountMax
这些选项允许您保持 SSH 连接处于活动状态,即使它们处于空闲状态也不会超时。
关于 ServerAliveInterval 和 ServerAliveCountMax
ServerAliveInterval
功能:ServerAliveInterval 参数控制 SSH 客户端等待的时间(以秒为单位),如果在此时间内没有从服务器接收到任何数据(如响应、数据等),客户端将向服务器发送一个 keepalive 信号,目的是保持连接活动。
用途:用于防止 SSH 会话由于长时间没有活动而被中途断开,特别是在 NAT 或防火墙环境中,防止空闲连接被意外断开。
默认值:默认值为 0,即没有空闲时发送 keepalive 信号。
ServerAliveInterval 60
这表示每 60 秒,客户端会向远程服务器发送一次空的 keepalive 信号。
ServerAliveCountMax
功能:ServerAliveCountMax 参数控制 SSH 客户端最多可以发送多少个 keepalive 信号(由 ServerAliveInterval 定义的间隔)而没有收到远程服务器的响应。如果超过这个最大次数,SSH 客户端将断开连接。
用途:此设置可以防止客户端在长时间没有得到响应时无限制地发送 keepalive 信号,而是会在超出最大次数后主动断开连接。
默认值:默认值为 3,即客户端最多发送 3 次没有响应的 keepalive 信号。
ServerAliveCountMax 3
这表示如果客户端在连续 3 次没有收到远程服务器的响应时,客户端将断开连接。
方法三:终端设置
对于终端配置,使用终端多路复用器。 终端多路复用器是一种管理单个物理终端内的多个终端会话的工具。这样,即使您失去连接,您的会话仍可继续,并且允许您在重新连接时返回到同一会话。这次我们将使用终端多路复用器来解决这个问题 tmux
1、首先,安装 tmux:
sudo apt-get install tmux
2、创建一个新的 tmux 会话:
tmux
3、开始在新会话中工作。这是您安装 Ruby 的地方。
4、要在工作时暂时退出会话,请按 Ctrl-b 然后 按d
5、重新连接后,使用以下命令重新连接到您的 tmux 会话:
tmux attach
这样,即使您的 SSH 连接断开,您也可以继续在服务器上工作。重新连接后,tmux attach您只需运行命令即可连接到会话并从上次中断的地方恢复。
之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!