Linux | 如何保持 SSH 会话处于活动状态
在远程服务器管理和安全数据传输中,SSH(Secure Shell)是不可或缺的工具。然而,它的便利性和安全性有时会因常见的问题而受到损害:冻结 SSH 会话。
此外,session
的突然中断可能会导致工作丢失、项目延迟和无助感。但不用担心,因为解决方案就在眼前。这份综合指南[1]揭示了维持活跃且响应迅速的 SSH 连接的秘密,确保无缝体验,避免冻结问题。
因此,告别沮丧,迎接高效、不间断的 SSH 会话。但在我们继续之前,让我们回答一个重要的问题。
为什么 SSH 会关闭连接?
简而言之,这一切都归结于 TCP 超时。 TCP 超时是指 TCP 连接或网络操作在认为进程失败之前等待响应的持续时间。在 Linux 中,TCP 超时设置确定 TCP 连接或操作在假设数据包丢失或连接无响应之前应等待多长时间。这种机制对于确保网络通信的可靠和高效至关重要。在保持 SSH 连接处于活动状态的情况下,我们将在下面简要讨论三个关键系统参数。
-
tcp_keepalive_time:确定在空闲 TCP 连接上发送 TCP keepalive 探测之间的时间间隔。即使没有传输数据,Keepalive 探针也会检查远程对等点是否仍处于活动状态并有响应。 -
tcp_keepalive_probes:由 TCP 端点发送的小数据包,用于检查空闲连接中远程端点的运行状况和响应能力。它检测远程端点是否无法访问或连接是否由于网络问题而丢失。 -
tcp_keepalive_intvl:控制在空闲 TCP 连接上发送 keepalive 探测的时间间隔。
每个值以秒为单位,可以使用以下命令轻松检查。
cat /proc/sys/net/ipv4/tcp_keepalive_time
cat /proc/sys/net/ipv4/tcp_keepalive_probes
cat /proc/sys/net/ipv4/tcp_keepalive_intvl

这是什么意思呢? Keepalive 时间为 7200 秒,即 120 分钟(2 小时)。然而,这并不意味着您的 SSH 会话将保持活动状态 2 小时,因为以下两个参数至关重要。
系统默认设置以 75 秒的间隔发送 9 个探测,总共 675 秒,之后会话被视为失败并关闭。
换句话说,在超过 11 分钟后,您的 SSH 会话将因不活动而终止——即,如果您没有在终端中输入任何内容。
当然,您可以调整这些设置,但这不是正确的方法。 SSH 提供了保持会话活动的机制,我们将在下面向您展示。
如何保持 SSH 会话处于活动状态
保持 SSH 会话处于活动状态是一个涉及客户端和服务器端配置的过程。
Linux
在客户端,您的 Linux 桌面系统,在您的主目录中创建一个文件(如果尚不存在)“~/.ssh/config”。
touch ~/.ssh/config
但是,如果“~/.ssh”目录不存在,则必须创建它,然后设置适当的权限。
mkdir ~/.ssh
chmod 700 ~/.ssh
nano ~/.ssh/config
# 以下为写入内容
Host *
ServerAliveInterval 120
ServerAliveCountMax 30
每个选项的含义如下:
-
Host:指定的配置仅适用于“Host”关键字后面列出的主机。因为我们使用了通配符 (*),所以它们适用于所有主机。 -
ServerAliveInterval:设置一个超时间隔(以秒为单位),在此之后,如果没有从服务器收到数据,SSH 将通过加密通道发送消息来请求服务器响应。默认为0,表示这些消息不会发送到服务器。 -
ServerAliveCountMax:设置 SSH 在没有从服务器返回任何消息的情况下可以发送的服务器活动消息的数量。如果在发送服务器活动消息时达到此阈值,SSH 将与服务器断开连接,从而终止会话。默认值为 3。
也就是说,客户端每隔120秒(2分钟)就会向服务器发送一条keepalive消息,共发送30次。 120 * 30 = 3600 秒,即一小时。这是即使没有活动,我们的 SSH 会话也将保持活动状态的总时间。
Windows
为了保持 SSH 会话处于活动状态,使用 PuTTY 通过 SSH 进行远程访问的 Windows 用户必须将“连接”选项卡中的“保持活动间隔秒数”选项设置为大于零的值。
在下面的示例中,我们将此值设置为 60,这意味着 PuTTY 客户端每分钟都会向服务器发送一条 keepalive 消息,以保持 SSH 连接处于活动状态。

当然,不要忘记保存对 PuTTY 会话的更改(“类别”>“保存的会话”>“保存”)。
服务器端配置
更改服务器的超时选项会影响连接到服务器的所有客户端。您需要编辑“/etc/ssh/sshd_config”文件来执行此操作。
sudo nano /etc/ssh/sshd_config
然后设置以下三个选项:
TCPKeepAlive yes
ClientAliveInterval 120
ClientAliveCountMax 30

这三个选项的含义如下:
-
TCPKeepAlive:指定系统是否应向客户端发送 TCP keepalive 消息。 -
ClientAliveInterval:设置一个超时间隔(以秒为单位),在此之后,如果没有收到客户端的数据,SSH 服务器将通过加密通道发送消息以请求客户端的响应。默认为0,表示这些消息不会发送到客户端。 -
ClientAliveCountMax:设置在 SSH 服务器未收到客户端返回的任何消息的情况下可以发送的客户端活动消息的数量。如果在发送客户端活动消息时达到此阈值,SSH 服务器将断开客户端连接,从而终止会话。默认值为 3。
与上述客户端配置的情况一样,SSH 服务器将使连接保持一小时(120 * 30 = 3600 秒)。
最后,重新启动 SSH 服务器:
sudo systemctl restart ssh
总结
实现 SSH 超时和保持活动在增强安全性和确保可靠连接之间实现了微妙的平衡。
SSH 超时和保活的好处显而易见,它们可以自动终止空闲会话,从而降低未经授权的访问和潜在攻击的风险,从而对网络安全做出贡献。
另一方面,过分地应用超时和保活也会带来缺点。过于激进的设置可能会导致意外断开连接,从而降低工作效率并给用户带来挫败感。
因此,为了取得适当的平衡,管理员必须仔细考虑他们的网络基础设施和用户行为。这样做可以为远程通信创建一个安全高效的环境,从而提高用户满意度和数据保护。
Reference
Source: https://linuxiac.com/how-to-keep-ssh-session-alive/
本文由 mdnice 多平台发布
相关文章:

Linux | 如何保持 SSH 会话处于活动状态
在远程服务器管理和安全数据传输中,SSH(Secure Shell)是不可或缺的工具。然而,它的便利性和安全性有时会因常见的问题而受到损害:冻结 SSH 会话。 此外,session 的突然中断可能会导致工作丢失、项目延迟和无…...

树结构及其算法-二叉树节点的插入
目录 树结构及其算法-二叉树节点的插入 C代码 树结构及其算法-二叉树节点的插入 二叉树节点插入的情况和查找相似,重点是插入后仍要保持二叉查找树的特性。如果插入的节点已经在二叉树中,就没有插入的必要了,如果插入的值不在二叉树中&…...

JVM 分代垃圾回收过程
堆空间划分了代: 年轻代(Young Generation)分为 eden 和 Survivor 两个区,Survivor 又分为2个均等的区,S0 和 S1。 首先,新对象都分配到年轻代的 eden 空间,Survivor 刚开始是空的。 当 eden …...

【C++】 常对象与常函数
常函数: 成员函数后加const后我们称为这个函数为常函数常函数内不可以修改成员属性成员属性声明时加关键字mutable后,在常函数中依然可以修改 常对象: 声明对象前加const称该对象为常对象常对象只能调用常函数 一、this指针本质 this指针…...

Elasticsearch 集群分片出现 unassigned 其中一种原因详细还原
🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹…...

Java调用HTTPS接口,绕过SSL认证
1:说明 网络编程中,HTTPS(Hypertext Transfer Protocol Secure)是一种通过加密的方式在计算机网络上进行安全通信的协议。网络传输协议,跟http相比更安全,因为他加上了SSL/TLS协议来加密通信内容。 Java调…...
前端小技巧: TS实现数组转树,树转数组
将数组转为树 interface IArrayItem {id: number,name: string,parentId: number }interface ITreeNode {id: numbername: stringchildren?: ITreeNode[] }const arr [{id: 1, name: 部门A, parentId: 0},{id: 2, name: 部门B, parentId: 1},{id: 3, name: 部门C, parentId:…...

谷歌动态搜索广告被滥用引发恶意软件泛滥
研究人员发现了一种新方法,可以利用易受攻击的网站向搜索引擎用户发送恶意的、有针对性的广告,这种方法能够传播大量恶意软件,使受害者完全不知所措。 关键是“动态搜索广告”,谷歌利用网站登陆页面的内容将目标广告与搜索配对的…...

C语言实现 1.在一个二维数组中形成 n 阶矩阵,2.去掉靠边元素,生成新的 n-2 阶矩阵;3.求矩阵主对角线下元素之和:4.以方阵形式输出数组。
矩阵形式: 1 1 1 1 1 2 1 1 1 1 3 2 1 1 1 4 3 2 1 1 5 4 3 2 1 完整代码: /*编写以下函数 1.在一个二维数组中形成如以下形式的 n 阶矩阵: 1 1 1 1 1 2 1 1 1 1 3 2 1 1 1 4 3 2 1 1 5 4 3 2 1 2.去掉…...

我在Vscode学OpenCV 处理图像
既然我们是面向Python的OpenCV(OpenCV for Python)那我们就必须要熟悉Numpy这个库,尤其是其中的数组的库,Python是没有数组的,唯有借助他库才有所实现想要的目的。 # 老三样库--事先导入 import numpy as np import c…...

【python】路径管理+路径拼接问题
路径管理 问题相对路径问题绝对路径问题 解决os库pathlib库最终解决 问题 环境:python3.7.16 win10 相对路径问题 因为python的执行特殊性,使用相对路径时,在不同路径下用python指令会有不同的索引效果(python的项目根目录根据执…...
C现代方法(第16章)笔记——结构、联合和枚举
文章目录 第16章 结构、联合和枚举16.1 结构变量16.1.1 结构变量的声明16.1.2 结构变量的初始化16.1.3 指示器(C99)16.1.4 对结构的操作 16.2 结构类型16.2.1 结构标记的声明16.2.2 结构类型的定义16.2.3 结构作为参数和返回值16.2.4 复合字面量(C99)16.2.5 匿名结构(C1X) 16.3…...

Python项目——识别指定物品
目录 1、百度EasyDL平台数据配置 1.1、训练图像上传 1.2、训练图像进行标注 1.3、训练模型 1.4、检验识别 1.5、申请发布 1.6、控制台权限配置 2、Python调用物体识别API 本项目是基于百度EasyDL平台制作的识别转盘内瓶子,且识别瓶子位置的一个项目。通过在…...

Spring-创建非懒加载的单例Bean源码
补充:关于扫描的逻辑 /*** Scan the class path for candidate components.* param basePackage the package to check for annotated classes* return a corresponding Set of autodetected bean definitions*/ public Set<BeanDefinition> findCandidateCo…...

Techlink TL24G06 网络变压器 10G 基座单端口变压器
功能特征: 1、符合IEEE 802.3标准。 2、符合RoHS。 3、工作温度范围:0C至70C。 4、储存温度范围:-20C至125C。...
Python操作PDF:PDF文件合并与PDF页面重排
处理大量的 PDF 文档是非常麻烦的事情,频繁地打开关闭文件会严重影响工作效率。对于一大堆内容相关的 PDF 文件,我们在处理时可以将这些 PDF 文件合并起来,作为单一文件处理,从而提高处理效率。同时,我们也可以选取不同…...

删除链表的倒数第n个节点(C++解法)
题目 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 示例 1: 输入:head [1,2,3,4,5], n 2 输出:[1,2,3,5]示例 2: 输入:head [1], n 1 输出:[]示例 3&#…...

Apache服务的搭建与配置(超详细版)
前言 Apache是一种常见的Web服务器软件,广泛用于Linux和其他UNIX操作系统上。它是自由软件,可以通过开放源代码的方式进行自由分发和修改。Apache提供了处理静态和动态内容的能力,而且还支持多种编程语言和脚本,如PHP、Python和P…...

设计模式大赏(一):桥接模式,组合模式
设计模式大赏(一):桥接模式,组合模式 导言 本篇文章是设计模式大赏中的第一篇文章,这个系列的文章中我们主要将介绍一些常见的设计模式,主要是我在看Android源码中发现用到的一些设计模式。本篇文章将主要…...

数据通信——应用层(DHCP的原理与配置)
引言 假如我们的网络中有N台设备,它们都要设置IP地址,如果人工去一个个配置不仅不方便管理还很麻烦。因此我们用DHCP来自动分配地址。 一,系统的启动流程 不仅是计算机、很多网络设备的启动流程如下: 设备上电后,硬件…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...

Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存
文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

算法岗面试经验分享-大模型篇
文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer (1)资源 论文&a…...

【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...