当前位置: 首页 > article >正文

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

文章目录

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

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

相关文章:

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

文章目录 问题解决方法一&#xff1a;配置服务端关于ClientAliveInterval和ClientAliveCountMax1、打开终端&#xff0c;打开SSH配置文件&#xff1a;输入以下命令&#xff1a;2、打开配置文件后&#xff0c;添加以下内容&#xff1a;3、添加后&#xff0c;Esc按 <Enter>…...

【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…...

React DndKit 实现类似slack 类别、频道拖动调整位置功能

一周调试终于实现了类 slack 类别、频道拖动调整位置功能。 历经四个版本迭代。 实现了类似slack 类别、频道拖动调整功能 从vue->react &#xff1b;更喜欢React的生态及编程风格&#xff0c;新项目用React来重构了。 1.zustand全局状态 2.DndKit 拖动 功能视频&…...

OpenCV 图形API(14)用于执行矩阵(或图像)与一个标量值的逐元素乘法操作函数mulC()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 描述 将矩阵与标量相乘。 mulC 函数将给定矩阵 src 的每个元素乘以一个给定的标量值&#xff1a; dst ( I ) saturate ( src1 ( I ) ⋅ multiplier ) \…...

flutter provider状态管理使用

在 Flutter 中&#xff0c;Provider 是一个轻量级且易于使用的状态管理工具&#xff0c;它基于 InheritedWidget&#xff0c;并提供了一种高效的方式来管理和共享应用中的状态。相比其他复杂的状态管理方案&#xff08;如 Bloc 或 Riverpod&#xff09;&#xff0c;Provider 更…...

1. 标准库的强依赖(核心原因)

1. 标准库的强依赖&#xff08;核心原因&#xff09; 容器操作&#xff08;如 std::vector 扩容&#xff09; 当标准库容器&#xff08;如 std::vector&#xff09;需要重新分配内存时&#xff0c;它会尝试移动现有元素到新内存&#xff0c;而非拷贝&#xff08;为了性能&…...

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

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

【Linux】iptables命令的基本使用

语法格式 iptables [-t 表名] 管理选项 [链名] [条件匹配] [-j 目标动作或跳转]注意事项 不指定表名时&#xff0c;默认使用 filter 表不指定链名时&#xff0c;默认表示该表内所有链除非设置规则链的缺省策略&#xff0c;否则需要指定匹配条件 设置规则内容 -A&#xff1a…...

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

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

设计模式简述(十二)策略模式

策略模式 描述基本使用使用传统策略模式的缺陷以及规避方法 枚举策略描述基本使用使用 描述 定义一组策略&#xff0c;并将其封装起来到一个策略上下文中。 由调用者决定应该使用哪种策略&#xff0c;并且可以动态替换 基本使用 定义策略接口 public interface IStrategy {…...

Telegram机器人开发

注册机器人 &#xff1a;使用Botfather 按照提示快速注册&#xff0c;会得到一串密钥 格式类似 7878875019:BAGQ9AihJyE5jmSoWMt4O1j1CQThjfwR0nk # !/usr/bin/python3 # -*- coding:utf-8 -*- """ author: JHC000abcgmail.com file: TelegramBot.py time: 202…...

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

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

java发送http请求

常用的方式 jdk自带的工具类apache的httpclient工具类spring的resttemplate工具类 如果是springboot项目&#xff0c;推荐resttemplate&#xff0c;其它项目推荐httpclient httpclient教程 httpclient教程...

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; 采样率…...

PHP 项目搭建 ELK 日志监控体系完整指南

ELK (Elasticsearch Logstash Kibana) 是当前最流行的日志管理解决方案之一。下面详细介绍如何为 PHP 项目搭建完整的 ELK 日志监控体系。 一、基础架构组成 PHP应用 → Filebeat → Logstash → Elasticsearch → Kibana(可选) ↗ 二、环境准备 1. 服务器要求 建议独立服…...

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

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

《野史未必假》王磊

文章目录 前言一、禅让制的真相&#xff1a;让了&#xff0c;又没有完全让禅让制的真相尧舜禹之间的“禅让”实际上是一场权力斗争 二、美女间谍的下落&#xff1a;西施和范蠡终成眷属了吗范蠡的逃亡“美人计”的真相 三、“背叛”的名将&#xff1a;魏延真的有“反骨”吗?“子…...

Redis 热key问题怎么解决?

Redis 热 Key 问题分析与解决方案 热 Key(Hot Key)是指被高频访问的某个或多个 Key,导致单个 Redis 节点负载过高,可能引发性能瓶颈甚至服务崩溃。以下是常见原因及解决方案: 1. 热 Key 的常见原因 突发流量:如明星八卦、秒杀商品、热门直播等场景。缓存设计不合理:如全…...

定制一款国密浏览器(3):修改浏览器应用程序安装路径

在上一章中介绍了如何修改 deb 包的包名,这一章讲一下如何修改浏览器应用程序安装路径。 chromium deb 包将程序文件安装在 /usr/share/chromium 下,但在很多系统中(比如统信 UOS 和 麒麟系统),规范要求应用程序安装在 /opt/apps 下。此外,对一些不可变系统(比如 deepi…...

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";…...

微软2025年AI技术深度解析:从多模态大模型到企业级代理服务

微软2025年AI技术深度解析&#xff1a;从多模态大模型到企业级代理服务 一、微软AI技术全景概览 在2025年的AI领域&#xff0c;微软通过Azure AI Foundry、多模态大模型、企业级AI代理三大核心技术&#xff0c;构建了覆盖开发、部署、应用全流程的AI生态体系。根据最新财报数…...