Visual Studio Code SSH 连接超时对策( keep SSH alive)

文章目录

问题

之前我说过完美解决 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 信号,即没有空闲超时机制。

bash 复制代码
ClientAliveInterval 60

这表示服务器每 60 秒检查一次客户端是否仍然活跃,如果没有收到客户端的回应,它会发送一个空的信号。

ClientAliveCountMax

功能:ClientAliveCountMax 参数控制在没有收到客户端响应的情况下,服务器可以发送多少次 keepalive 信号。换句话说,这个参数定义了服务器在失去连接时,最多允许的 keepalive 检查次数。

用途:如果客户端没有响应服务器发送的 keepalive 信号,服务器会重复尝试几次,直到达到 ClientAliveCountMax 设置的最大次数。如果超出最大次数,服务器会断开连接。

默认值:默认值为 3,即如果客户端没有响应 3 次 keepalive 信号,服务器将关闭连接。

bash 复制代码
ClientAliveCountMax 3

这表示服务器最多会向客户端发送 3 次没有响应的 keepalive 信号。如果客户端在这 3 次检查后仍然没有响应,服务器会断开连接。

1、打开终端,打开SSH配置文件:输入以下命令:

bash 复制代码
sudo vi /etc/ssh/sshd_config

2、打开配置文件后,添加以下内容:

bash 复制代码
ClientAliveInterval 30
ClientAliveCountMax 60

3、添加后,Esc按 ,:wq然后按 Enter 保存更改并关闭编辑器

这表示:

ClientAliveInterval 30:每 30秒,服务器会向客户端发送一个空的 keepalive 信号。

ClientAliveCountMax 60:如果客户端在连续 60 次(即 1800 秒内)没有响应 keepalive 信号,服务器将断开连接。

这种配置可以防止由于网络不活动或客户端失去连接导致 SSH 会话挂起,从而确保在长时间不活动时连接能够正常终止。

4、重新启动SSH服务以使设置生效。输入以下命令:

bash 复制代码
sudo service ssh restart

or

bash 复制代码
sudo systemctl restart sshd

如果设置项已经存在,则直接改变其值即可。另外,各设置的适当值会根据您的环境而有所不同,因此请根据需要进行调整。

请注意,此设置需要管理权限才能访问 SSH 服务器并进行更改。

另外,由于这是服务器端的设置,因此无法防止由于客户端网络不稳定而导致的连接断开。

方法二:客户端配置

首先,我们将修改 SSH 客户端的配置,通过发送定期的"keep alive"消息来防止连接处于空闲状态。

为此,您需要编辑SSH 服务器的配置文件~/.ssh/config中的ServerAliveInterval和 ServerAliveCountMax

这些选项允许您保持 SSH 连接处于活动状态,即使它们处于空闲状态也不会超时。

关于 ServerAliveInterval 和 ServerAliveCountMax

ServerAliveInterval

功能:ServerAliveInterval 参数控制 SSH 客户端等待的时间(以秒为单位),如果在此时间内没有从服务器接收到任何数据(如响应、数据等),客户端将向服务器发送一个 keepalive 信号,目的是保持连接活动。

用途:用于防止 SSH 会话由于长时间没有活动而被中途断开,特别是在 NAT 或防火墙环境中,防止空闲连接被意外断开。

默认值:默认值为 0,即没有空闲时发送 keepalive 信号。

bash 复制代码
ServerAliveInterval 60

这表示每 60 秒,客户端会向远程服务器发送一次空的 keepalive 信号。

ServerAliveCountMax

功能:ServerAliveCountMax 参数控制 SSH 客户端最多可以发送多少个 keepalive 信号(由 ServerAliveInterval 定义的间隔)而没有收到远程服务器的响应。如果超过这个最大次数,SSH 客户端将断开连接。

用途:此设置可以防止客户端在长时间没有得到响应时无限制地发送 keepalive 信号,而是会在超出最大次数后主动断开连接。

默认值:默认值为 3,即客户端最多发送 3 次没有响应的 keepalive 信号。

bash 复制代码
ServerAliveCountMax 3

这表示如果客户端在连续 3 次没有收到远程服务器的响应时,客户端将断开连接。

方法三:终端设置

对于终端配置,使用终端多路复用器。 终端多路复用器是一种管理单个物理终端内的多个终端会话的工具。这样,即使您失去连接,您的会话仍可继续,并且允许您在重新连接时返回到同一会话。这次我们将使用终端多路复用器来解决这个问题 tmux

1、首先,安装 tmux:

bash 复制代码
sudo apt-get install tmux

2、创建一个新的 tmux 会话:

bash 复制代码
tmux

3、开始在新会话中工作。这是您安装 Ruby 的地方。

4、要在工作时暂时退出会话,请按 Ctrl-b 然后 按d

5、重新连接后,使用以下命令重新连接到您的 tmux 会话:

bash 复制代码
tmux attach

这样,即使您的 SSH 连接断开,您也可以继续在服务器上工作。重新连接后,tmux attach您只需运行命令即可连接到会话并从上次中断的地方恢复。

之后我会持续更新,如果喜欢我的文章,请记得一键三连哦,点赞关注收藏,你的每一个赞每一份关注每一次收藏都将是我前进路上的无限动力 !!!↖(▔▽▔)↗感谢支持!

相关推荐
自由游戏开发者32 分钟前
用U盘启动制作centos系统最常见报错,系统卡住无法继续问题(手把手)
linux·运维·centos
Ronin3051 小时前
【Linux系统】vim编辑器 | 编译器gcc/g++ | make/Makefile
linux·运维·服务器·ubuntu·编辑器·vim
Bruce_Liuxiaowei1 小时前
Netstat高级分析工具:Windows与Linux双系统兼容的精准筛查利器
linux·运维·网络·windows·安全
linux修理工2 小时前
n1 armbian 安装桌面环境并启用xrdp远程登录
linux·服务器·数据库
织_网2 小时前
Visual Studio Code 中统一配置文件在团队协作中的应用
ide·vscode·编辑器
Brookty2 小时前
【操作系统】进程(二)内存管理、通信
java·linux·服务器·网络·学习·java-ee·操作系统
java攻城狮k2 小时前
【跟着PMP学习项目管理】项目管理 之 成本管理知识点
经验分享·笔记·学习·产品经理
易德研发2 小时前
ubuntu24.04安装NFS网络文件系统/ARM开发板NFS挂载
运维·服务器·网络
开开心心就好3 小时前
高效报价软件,简化商铺定价流程
服务器·数据库·安全·面试·职场和发展·电脑·symfony
生活爱好者!3 小时前
NAS 部署白板工具,实现思维导图/画板/流程图自由
运维·docker·容器