目录

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您只需运行命令即可连接到会话并从上次中断的地方恢复。

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

本文是转载文章,点击查看原文
如有侵权,请联系 xyy@jishuzhan.net 删除
相关推荐
weixin_457885822 小时前
智能多媒体处理流水线——基于虎跃办公API的自动化解决方案
运维·数据库·人工智能·ai·自动化
Stringzhua6 小时前
Linux多网卡组Bond0Bond1Bond4
运维·服务器·网络
HHONGQI1236 小时前
Linux 基础入门操作 前言 VIM的基本操作 2
linux·运维·服务器·vim
王伯爵6 小时前
接入网和核心网之间的承载网详细介绍
服务器·网络·数据库
qq_543248526 小时前
Linux网络配置与测试
linux·运维·网络
成都纵横智控科技官方账号7 小时前
EG8200Mini-104边缘计算网关!聚焦IEC104协议的工业数据转换与远程运维平台
运维·边缘计算·数据采集·104协议·智改数转
小峰编程8 小时前
谈Linux之磁盘管理——万字详解
linux·运维·服务器·经验分享·笔记·centos·运维开发
乐渔leyu8 小时前
Debian 12 服务器搭建Beego环境
服务器·debian·beego
程序猿John8 小时前
nginx实现负载均衡与例子详解
运维·nginx·负载均衡
archko8 小时前
telophoto源码查看记录
java·服务器·前端