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

news2025/7/16 16:44:51

文章目录

  • 问题
  • 解决
    • 方法一:配置服务端
      • 关于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您只需运行命令即可连接到会话并从上次中断的地方恢复。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2329872.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C语言入门】由浅入深学习指针 【第二期】

目录 1. 指针变量为什么要有类型&#xff1f; 2. 野指针 2.1 未初始化导致的野指针 2.2 指针越界导致的野指针 2.3 如何规避野指针 3. 指针运算 3.1 指针加减整数 3.2 指针减指针 3.3 指针的关系运算 4. 二级指针 5. 指针数组 5.1 如何使用指针数组模拟二维数组 上…

关于Ubuntu系统的远程控制及文件传输

目录 1. 网络配置1.1 虚拟机Ubuntu网络配置1.2树莓派网络配置 2. 远程终端登录3. FTP文件传输4. 安装Xming和PuTTY5. 使用X11转发6. 安装和使用VNC思考题解答参考资料 1. 网络配置 1.1 虚拟机Ubuntu网络配置 将虚拟机的网络连接设置为“桥接模式”&#xff0c;这样虚拟机的网…

IS-IS-单区域的配置

一、IS-IS的概念 IS-IS&#xff08;Intermediate System to Intermediate System&#xff0c;中间系统到中间系统&#xff09;是一种‌链路状态路由协议‌&#xff0c;最初设计用于‌OSI&#xff08;Open Systems Interconnection&#xff09;参考模型‌的网络层&#xff08;CL…

Flask使用MySQL数据库通过Flask-SQLAlchemy 迁移数据库,实际更新文件,但是提示没有检测到数据更新。

本地写了一个model的用户类&#xff0c;数据库连接信息正确&#xff0c;执行下面2条命令进行数据库迁移。 flask db migrate 生成迁移文件 flask db upgrade 执行迁移文件的升级 发现执行完后&#xff1a;提示没有检测到数据的更新 PS C:\Users\mu> flask db migrate IN…

USB3.0走线注意事项和其中的协议

USB3.0走线的要求&#xff1a; 1、USB要走差分&#xff0c;阻抗控制为90欧姆&#xff0c;并包地处理&#xff0c;总长度最好不要超过1800mil. 2、尽可能缩短走线长度&#xff0c;优先考虑对高速USB差分&#xff08;RX、TX差分&#xff09;的布线&#xff0c;USB差分走线在走线…

QML 菜单控件:MenuBar、MenuBarItem、Menu、MenuItem层级关系和用法

目录 引言相关阅读关于MenuBarItem核心代码1. 主菜单栏 (MenuBar.qml)2. 主页面&#xff0c;包含右键菜单 (MainPage.qml)3. 主界面绑定 (Main.qml)整体结构 运行效果总结工程下载 引言 在 GUI 开发中&#xff0c;菜单是用户交互的核心组件。QML 提供了一套灵活的菜单控件&…

蓝桥杯嵌入式第十四届模拟二

一.LED 先配置LED的八个引脚为GPIO_OutPut,锁存器PD2也是,然后都设置为起始高电平,生成代码时还要去解决引脚冲突问题 二.按键 按键配置,由原理图按键所对引脚要GPIO_Input 生成代码,在文件夹中添加code文件夹,code中添加fun.c、fun.h、headfile.h文件,去资源包中把lc…

Qt 入门 1 之第一个程序 Hello World

Qt 入门1之第一个程序 Hello World 直接上操作步骤从头开始认识&#xff0c;打开Qt Creator&#xff0c;创建一个新项目&#xff0c;并依次执行以下操作 在Qt Creator中&#xff0c;一个Kits 表示一个完整的构建环境&#xff0c;包括编译器、Qt版本、调试器等。在上图中可以直…

架构思维: 全链路日志深度解析

文章目录 引言&#xff1a;微服务时代的日志挑战一、业务痛点与需求分析二、技术选型的六维评估模型1. 标准化支持 OpenTracing2. 存储扩展性3. 性能损耗4. 功能完备性5. 侵入性控制6. 社区生态 三、SkyWalking落地实践与调优1. 核心架构解析2. 关键配置示例&#xff1a; 采样率…

唯美社区源码AM社区同款源码

源码介绍 唯美社区源码AM社区同款源码 后端修改application.properties文件内容为你的数据库 前端修改/config/config.js文件内容为你的后端地址 这两个文件里要修改的地方我已经用中文标注出来了 截图 源码免费下载 唯美社区源码AM社区同款源码

3. go-zero中如何使用redis

问题 go-zero项目相关文档中redis是这样配置的&#xff1a; Name: account.rpc ListenOn: 0.0.0.0:8080 Etcd:Hosts:- 127.0.0.1:2379Key: account.rpcMysql:Host: xxxx:3306User: rootPass: xxxData: mall-userCharset: utf8mb4Cache: - Host: 192.168.145.10:6379Type: nod…

cpp自学 day19(多态)

一、基本概念 同一操作作用于不同的对象&#xff0c;产生不同的执行结果 &#x1f449; 就像「按F1键」&#xff1a;在Word弹出帮助文档&#xff0c;在PS弹出画笔设置&#xff0c;​同一个按键触发不同功能 &#xff08;1&#xff09;多态类型 类型实现方式绑定时机​静态多态…

【算法/c++】利用中序遍历和后序遍历建二叉树

目录 题目&#xff1a;树的遍历前言题目来源树的数组存储基本思想存储规则示例 建树算法关键思路代码总代码 链表法 题目&#xff1a;树的遍历 前言 如果不是完全二叉树&#xff0c;使用数组模拟树&#xff0c;会很浪费空间。 题目来源 本题来自 PTA 天梯赛。 题目链接: 树…

基于论文的大模型应用:基于SmartETL的arXiv论文数据接入与预处理(一)

1. 背景 arXiv简介&#xff08;参考DeepSeek大模型生成内容&#xff09;&#xff1a; arXiv&#xff08;发音同“archive”&#xff0c;/ˈɑːrkaɪv/&#xff09;是一个开放的学术预印本平台&#xff0c;主要用于研究人员分享和获取尚未正式发表或已完成投稿的学术论文。创…

cpp经典数论问题

题目如下 思路 代码如下

C++中如何比较两个字符串的大小--compare()函数实现

一、现在有一个问题描述&#xff1a;有两个字符串&#xff0c;要按照字典顺序比较它们的大小&#xff08;注意所有的小写字母都大于所有的大写字母 &#xff09;。 二、代码 #include <bits/stdc.h> using namespace std;int main() {string str1 "apple";…

Scala面向对象2

1. 抽象属性和方法&#xff1a;用 abstract 关键字定义抽象类&#xff0c;其中抽象属性无初始值&#xff0c;抽象方法无实现 。重写抽象方法需用 override &#xff0c;重写抽象属性时&#xff0c;可变属性用 var &#xff0c;不可变属性用 val 。 匿名子类&#xff1a;和 Jav…

【FPGA基础学习】状态机思想实现流水灯

目录 一、用状态机实现LED流水灯1.状态机思想简介1. 1基本概念1.2.核心要素1.3分类与模型 2.LED流水灯 二、CPLD与FPGA1.技术区别2.应用场景3.设计选择建议 三、HDLbits组合逻辑题目 一、用状态机实现LED流水灯 1.状态机思想简介 1. 1基本概念 ​ 状态机&#xff08;Finite …

图片尺寸修改软件下载

【图片尺寸调整工具v1.0&#xff1a;高效便捷的图像处理助手】 图片尺寸调整工具v1.0是一款专为简化图像处理流程设计的轻量级软件&#xff0c;兼顾高效批量处理与个性化单图调整需求。该工具以"零学习成本"为核心设计理念&#xff0c;通过简洁直观的交互界面&#…

MySQL-SQL-DDL语句、表结构创建语句语法、表约束、表数据类型,表结构-查询SQL、修改SQL、删除SQL

一.SQL SQL&#xff1a;一门操作关系型数据库的编程语言&#xff0c;定义操作所有关系型数据库的统一标准 二. DDL-数据库 1. 查询所有数据库 命令&#xff1a;show databases; 2. 查询当前数据库 命令&#xff1a;select database(); 3. 创建数据库 命令&#xff1a;create da…