SSH配置优化:提升本地内网Linux服务器远程连接速度与稳定性

文章目录

    • 引言
    • 一. 理解SSH连接过程与影响因素
    • 二. 服务器端SSH配置优化
    • 三. 客户端SSH配置优化
    • 四. 高级技巧
    • 五. 内网穿透突破公网IP限制
    • 总结

引言

SSH (Secure Shell) 是一种网络协议,用于加密的网络服务,常用于远程登录和管理Linux服务器。对于本地内网的Linux服务器,即使网络环境相对稳定,优化SSH配置仍然可以显著提升远程连接的速度和稳定性。本文将深入探讨SSH配置优化的各个方面,涵盖服务器端和客户端的调整,以及一些高级技巧,帮助你打造更高效、更可靠的远程连接体验。

ssh2

一. 理解SSH连接过程与影响因素

在开始优化之前,我们需要了解SSH连接的基本过程。大致包括:

  1. 客户端发起连接请求: 客户端向服务器发送连接请求。
  2. 密钥交换: 客户端和服务器协商加密算法和密钥。
  3. 认证: 客户端使用用户名、密码或密钥进行身份验证。
  4. 数据传输: 经过加密的数据在客户端和服务器之间传输。

影响SSH连接速度和稳定性的因素有很多,包括:

  • 网络带宽: 网络速度是影响数据传输速度的关键因素。
  • 网络延迟: 网络延迟越高,连接体验越差。
  • 加密算法: 不同的加密算法对CPU的消耗不同,也会影响连接速度。
  • SSH配置: 不合理的SSH配置会降低连接效率。
  • 服务器负载: 服务器负载过高会影响SSH服务的响应速度。

二. 服务器端SSH配置优化

  1. 选择合适的加密算法:

    SSH支持多种加密算法,优先推荐AEAD加密模式(如aes256-gcm

    例如:Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com

  2. 优化密钥交换算法:

    密钥交换算法用于协商加密算法和密钥。推荐使用Curve25519和X25519,它们具有更高的安全性、更快的速度和更低的CPU消耗。在/etc/ssh/sshd_config文件中,使用KexAlgorithms参数指定允许使用的密钥交换算法。

    例如:KexAlgorithms curve25519-sha256,curve25519-sha384

  3. 禁用弱密码认证:

    为了提高安全性,应该禁用弱密码认证,强制使用密钥认证。在/etc/ssh/sshd_config文件中,将PermitRootLogin设置为noPasswordAuthentication设置为no

  4. 限制用户访问:

    可以使用AllowUsersDenyUsers参数限制允许或禁止访问SSH的用户。

  5. 调整TCP KeepAlive参数:

    TCP KeepAlive用于检测断开的连接。调整ClientAliveIntervalClientAliveCountMax参数可以防止长时间闲置的连接被服务器断开。

    例如:ClientAliveInterval 60ClientAliveCountMax 3

三. 客户端SSH配置优化

  1. 使用密钥认证:

    密钥认证比密码认证更安全、更方便。通过生成密钥对,将公钥复制到服务器,客户端可以使用私钥进行身份验证。

  2. 启用压缩:

    启用压缩可以减少数据传输量,提高连接速度。在客户端的SSH连接命令中,使用-C参数启用压缩。

    例如:ssh -C user@server

  3. 使用ControlMaster:

    ControlMaster允许客户端复用SSH连接,避免每次连接都重新协商加密算法和密钥。

    在客户端的SSH配置文件(~/.ssh/config)中,添加以下配置:

    Host *ControlMaster autoControlPath ~/.ssh/control-%r@%h:%pControlPersist 10m
    

    这将在客户端缓存SSH连接10分钟。

  4. 优化MTU (Maximum Transmission Unit):

    调整MTU可以避免数据包分片,提高网络效率。可以通过ping命令测试最佳MTU值。

四. 高级技巧

  1. 使用TCP窗口缩放:

    TCP窗口缩放允许更大的TCP窗口大小,提高网络吞吐量。可以通过调整内核参数启用TCP窗口缩放。

  2. 调整内核参数:

    可以通过调整内核参数(例如net.ipv4.tcp_tw_reusenet.ipv4.tcp_fin_timeout)优化TCP连接。

  3. 使用防火墙:

    防火墙可以限制对SSH服务器的访问,提高安全性。

ssh

五. 内网穿透突破公网IP限制

即使经过上述优化,在没有公网IP的情况下,远程SSH连接仍然面临挑战。对于很多家庭或小型办公环境,通常只能通过内网连接到服务器。这时,内网穿透技术就显得尤为重要。

内网穿透的核心思想是建立一个位于具有公网IP的服务器(通常是云服务器)和你的内网服务器之间的安全隧道,使得外部网络能够访问你的内网服务器。市面上有很多内网穿透工具,其中cpolar是一个简单易用且功能强大的选择。

使用cpolar 实现公网环境 SSH 远程连接:

这里我们拿ssh连接ubuntu系统进行举例:

  1. 首先我们需要在ubuntu系统中安装ssh服务:

    sudo apt-get install openssh-server
    
  2. 安装cpolar内网穿透工具

    在终端中使用一键脚本安装命令:

    curl https://get.cpolar.sh | sudo sh
    

    Cpolar安装和成功启动服务后,在浏览器上输入ubuntu主机IP加9200端口即:【http://localhost:9200】访问Cpolar web UI管理界面。

  3. 创建公网地址

    点击左侧隧道管理——隧道列表

    可以看到安装cpolar后,会自动创建一条ssh隧道。(如果要创建其他服务的公网地址需要点击创建隧道进行配置)

    image-20240801133948736

    然后点击下方的在线隧道列表,可以看到ssh的公网地址:

    image-20240801134056417

  4. 使用SSH客户端来远程连接Ubuntu,这里我使用的ssh客户端是Xshell

    打开Xshell,点击新建:

    • 名称:自定义填写
    • 协议:SSH
    • 主机:填写cpolar刚才生成的tcp地址(复制tcp://后面)
    • 端口号:填写生成的tcp地址:后面 (这里我是10898)

    点击连接

    填写Ubuntu用户名、密码点击确定,可以看到远程连接成功,任意设备使用该地址都可以远程ssh连接本地Linux服务器!

    PS:以上步骤在cpolar中使用的是随机临时tcp端口地址,所生成的公网地址为随机临时地址,该公网地址24小时内会随机变化。为其配置固定的公网地址和端口后不会变化,设置后将无需每天重复修改地址。

    配置固定tcp端口地址需要将Cpolar升级到专业版套餐或以上。

    配置固定TCP公网地址可以参考这篇文章:使用Cpolar配置固定TCP端口地址

总结

通过优化SSH配置,并结合内网穿透技术如cpolar,可以显著提升本地内网Linux服务器远程连接的速度和稳定性。本文介绍的优化方法涵盖服务器端和客户端的调整,以及一些高级技巧。选择合适的优化方法,根据实际需求进行调整,并利用内网穿透技术,可以打造更高效、更可靠的远程连接体验。在进行配置更改后,务必重启SSH服务以使更改生效。 记住,安全是首要考虑因素,在优化性能的同时,也要确保SSH服务器的安全。

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

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

相关文章

BERT - MLM 和 NSP

本节代码将实现BERT模型的两个主要预训练任务:掩码语言模型(Masked Language Model, MLM) 和 下一句预测(Next Sentence Prediction, NSP)。 1. create_nsp_dataset 函数 这个函数用于生成NSP任务的数据集。 def cr…

“实时滚动”插件:一个简单的基于vue.js的无缝滚动

1、参考连接: 安装 | vue-seamless-scroll 2、使用步骤: 第一步:安装 yarn add vue-seamless-scroll 第二步:引入 import vueSeamlessScroll from vue-seamless-scroll/src 第三步:注册 components: { vueSeamless…

【蓝桥杯】赛前练习

1. 排序 import os import sysn=int(input()) data=list(map(int,input().split(" "))) data.sort() for d in data:print(d,end=" ") print() for d in data[::-1]:print(d,end=" ")2. 走迷宫BFS import os import sys from collections import…

pyTorch-迁移学习-学习率衰减-四种天气图片多分类问题

目录 1.导包 2.加载数据、拼接训练、测试数据的文件夹路径 3.数据预处理 3.1 transforms.Compose数据转化 3.2分类存储的图片数据创建dataloader torchvision.datasets.ImageFolder torch.utils.data.DataLoader 4.加载预训练好的模型(迁移学习) 4.1固定、修改预训练…

第十四届蓝桥杯大赛软件赛国赛Python大学B组题解

文章目录 弹珠堆放划分偶串交易账本背包问题翻转最大阶梯最长回文前后缀贸易航线困局 弹珠堆放 递推式 a i a i − 1 i a_ia_{i-1}i ai​ai−1​i, n 20230610 n20230610 n20230610非常小,直接模拟 答案等于 494 494 494 划分 因为总和为 1 e 6 1e6…

Python 和 JavaScript两种语言的相似部分-由DeepSeek产生

Python 和 JavaScript 作为两种流行的编程语言,虽然在设计目标和应用场景上有差异(Python 偏向后端和脚本,JavaScript 偏向前端和动态交互),但它们的语法存在许多相似之处。以下是两者在语法上的主要共同点及对比&…

改善 Maven 的依赖性

大家好,这里是架构资源栈!点击上方关注,添加“星标”,一起学习大厂前沿架构! 建议使用mvn dependency:analyze命令来摆脱已声明但未使用的依赖项: 还有另一个用例, mvn dependency:analyze 它可…

【SQL】子查询详解(附例题)

子查询 子查询的表示形式为:(SELECT 语句),它是IN、EXISTS等运算符的运算数,它也出现于FROM子句和VALUES子句。包含子查询的查询叫做嵌套查询。嵌套查询分为相关嵌套查询和不想关嵌套查询 WHERE子句中的子查询 比较运算符 子查询的结果是…

Stable Diffusion 扩展知识实操整合

本文的例子都是基于秋叶整合包打开的webui实现的 一、ADetailer——改善人脸扭曲、恶心 After detailer插件可以自动检测生成图片的人脸,针对人脸自动上蒙版,自动进行重绘,整个流程一气呵成,因此可以避免许多重复的操作。除此之…

freertos内存管理简要概述

概述 内存管理的重要性 在嵌入式系统中,内存资源通常是有限的。合理的内存管理可以确保系统高效、稳定地运行,避免因内存泄漏、碎片化等问题导致系统崩溃或性能下降。FreeRTOS 的内存管理机制有助于开发者灵活地分配和释放内存,提高内存利用…

按规则批量修改文件扩展名、删除扩展名或添加扩展名

文件的扩展名是多种多样的,有些不同文件的扩展名之间相互是可以直接转换的。我们工作当中最常见的就是 doc 与 docx、xls 与 xlsx、jpg 与 jpeg、html 与 htm 等等,这些格式在大部分场景下都是可以相互转换 能直接兼容的。我们今天要介绍的就是如何按照一…

热门面试题第15天|最大二叉树 合并二叉树 验证二叉搜索树 二叉搜索树中的搜索

654.最大二叉树 力扣题目地址(opens new window) 给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下: 二叉树的根是数组中的最大元素。左子树是通过数组中最大值左边部分构造出的最大二叉树。右子树是通过数组中最大值右边部分构造出的最大…

MySQL学习笔记7【InnoDB】

Innodb 1. 架构 1.1 内存部分 buffer pool 缓冲池是主存中的第一个区域,里面可以缓存磁盘上经常操作的真实数据,在执行增删查改操作时,先操作缓冲池中的数据,然后以一定频率刷新到磁盘,这样操作明显提升了速度。 …

RNN、LSTM、GRU汇总

RNN、LSTM、GRU汇总 0、论文汇总1.RNN论文2、LSTM论文3、GRU4、其他汇总 1、发展史2、配置和架构1.配置2.架构 3、基本结构1.神经元2.RNN1. **RNN和前馈网络区别:**2. 计算公式:3. **梯度消失:**4. **RNN类型**:(查看发展史)5. **…

django数据迁移操作受阻

错误信息: django.db.utils.OperationalError: (1227, Access denied; you need (at least one of) the SYSTEM_VARIABLES_ADMIN or SESSION_VARIABLES_ADMIN privilege(s) for this operation)根据错误信息分析,该问题是由于MySQL用户 缺乏SYSTEM_VARI…

WinForm真入门(13)——ListBox控件详解

WinForm ListBox 详解与案例 一、核心概念 ‌ListBox‌ 是 Windows 窗体中用于展示可滚动列表项的控件,支持单选或多选操作,适用于需要用户从固定数据集中选择一项或多项的场景‌。 二、核心属性 属性说明‌Items‌管理列表项的集合,支持动…

局域网内文件共享的实用软件推荐

软件介绍 在日常办公、学习或家庭网络环境里,局域网内文件共享是个常见需求。有一款免费的局域网共享软件非常适合这种场景。 这款局域网共享软件使用起来非常简单,不需要安装,直接点击就能使用。 它的操作流程简单易懂,用户只要…

ViewModel vs AndroidViewModel:核心区别与使用场景详解

在 Android 的 MVVM 架构中,ViewModel 和 AndroidViewModel 都是用于管理 UI 相关数据的组件,但二者有一些关键区别: 1. ViewModel 基本用途:用于存储和管理与 UI 相关的数据,生命周期与 Activity/Fragment 解耦&…

C语言--求n以内的素数(质数)

求n以内的素数,可以用试除法或者埃拉托斯特尼筛法(埃氏筛法) 文章目录 试除法埃拉托斯特尼筛法(埃氏筛法)两种方法测试运行效率 输入:数字n 输出:n以内所有的素数 不管是哪个方法,都…

Skynet.socket 函数族使用详解

目录 Skynet.socket 函数族使用详解核心功能分类一、TCP 连接管理1. 监听端口2. 建立连接3. 关闭连接 二、数据读写操作1. 阻塞式读取2. 写入数据2.1 socket.write(fd, data) 的返回值2.2 示例代码2.3 关键注意事项2.4 与其他函数的区别2.5 底层原理2.6 总结 三、UDP 处理1. 创…