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来自动分配地址。 一,系统的启动流程 不仅是计算机、很多网络设备的启动流程如下: 设备上电后,硬件…...

Microsoft前后端不分离编程新风向:cshtml
文章目录 什么是CSHTML?基础语法内联表达式代码块控制结构 布局页面_ViewStart.cshtml_Layout.cshtml使用布局 模型绑定强类型视图模型集合 HTML辅助方法基本表单验证 局部视图创建局部视图使用局部视图 高级特性视图组件依赖注入Tag Helpers 性能优化缓存捆绑和压缩…...

NLP学习路线图(二十七):Transformer编码器/解码器
一、Transformer概览:抛弃循环,拥抱注意力 传统RNN及其变体(如LSTM、GRU)处理序列数据时存在顺序依赖的瓶颈:必须逐个处理序列元素,难以并行计算,且对长程依赖建模能力较弱。Transformer的革命…...
Java方法引用深度解析:从匿名内部类到函数式编程的演进
文章目录 前言问题场景第一种:传统的匿名内部类技术解析优缺点分析 第二种:Lambda表达式的革命技术解析Lambda表达式的本质性能优势 第三种:方法引用的极致简洁技术解析 方法引用的四种类型1. 静态方法引用2. 实例方法引用3. 特定类型的任意对…...
vue3单独封装表单校验函数
1.在页面中建一个.ts文件 import { useI18n } from /hooks/web/useI18n import { FormItemRule } from element-plusconst { t } useI18n()interface LengthRange {min: numbermax: numbermessage?: string } //必输项校验 export const useValidator () > {const requi…...

Python控制台输出彩色字体指南
在Python开发中,有时我们需要在控制台输出彩色文本以提高可读性或创建更友好的用户界面。本文将介绍如何使用colorama库来实现这一功能。 为什么需要彩色输出? 提高可读性:重要信息可以用不同颜色突出显示更好的用户体验:错误信息…...
tpc udp http
TCP(传输控制协议)、UDP(用户数据报协议)和 HTTP(超文本传输协议)是网络通信中常用的三种协议,它们在不同的层次和场景中发挥作用。以下是对这三种协议的详细解释以及它们之间的区别:…...

Windows账户管理,修改密码,创建帐户...(无需密码)
前言 我们使用wWindows操作系统时,账户是非常重要的概念 它不仅能够帮助我们区分文档主题权限等等 嗯还有最重要的解锁电脑的作用! 但想要管理他,不仅需要原本的密码,而且设置中的管理项也非常的不全。 Windows有一款netplwi…...
App 上线后还能加固吗?iOS 应用的动态安全补强方案实战分享(含 Ipa Guard 等工具组合)
很多开发者以为 App 一旦上线,安全策略也就定型了。但现实是,App 上线只是攻击者的起点——从黑产扫描符号表、静态分析资源文件、注入调试逻辑,到篡改功能模块,这些行为都可能在你“以为很安全”的上线版本里悄然发生。 本篇文章…...

STM32H562----------ADC外设详解
1、ADC 简介 STM32H5xx 系列有 2 个 ADC,都可以独立工作,其中 ADC1 和 ADC2 还可以组成双模式(提高采样率)。每个 ADC 最多可以有 20 个复用通道。这些 ADC 外设与 AHB 总线相连。 STM32H5xx 的 ADC 模块主要有如下几个特性: 1、可配置 12 位、10 位、8 位、6 位分辨率,…...
Docker 容器化基础:镜像、容器与仓库的本质解析
Docker 概念与容器化技术 Docker 是一种容器化平台,能够将应用程序及其依赖项打包成一个容器,确保在任何环境中都能一致运行。容器化技术通过操作系统级别的虚拟化,为应用程序提供了一个独立的运行环境。 容器化技术的核心优势 一致性&…...