一、/etc/ssh/sshd_config 配置机制

1. 配置文件基础

  • 文件作用
    OpenSSH 服务器 (sshd) 的主配置文件,控制连接、认证、端口转发等行为。

  • 加载与生效

    • 修改后需重启服务:
      sudo systemctl restart sshd   # Systemd 系统
      sudo service ssh restart     # SysVinit 系统
      
    • 检查语法错误:
      sudo sshd -t
      
  • 语法规则

    • 每行一个参数,格式 参数名 值(如 Port 22
    • # 开头为注释,默认配置通常被注释作为参考
    • 参数名区分大小写(全大写或驼峰式)

二、核心参数详解与配置

1. 连接控制

参数说明推荐值
Port 22SSH 监听端口,多端口可写多行非默认端口(如 2222
ListenAddress绑定 IP,0.0.0.0 监听所有接口内网 IP(如 192.168.1.1
MaxStartups并发未认证连接数,格式 起始:拒绝率:最大10:30:100
MaxSessions单连接允许的会话数5-10

2. 安全认证

参数说明推荐值
PermitRootLogin禁止 root 直接登录noprohibit-password
PasswordAuthentication禁用密码登录,强制密钥认证no
AllowUsers用户白名单(支持 user@ip 格式)限制必要用户
UseDNS禁用反向解析加速登录no

3. 功能与转发

参数说明推荐值
AllowTcpForwarding禁止端口转发减少风险no
X11Forwarding启用图形界面转发yes
GatewayPorts远程转发绑定到 0.0.0.0no

4. 会话与日志

参数说明推荐值
TCPKeepAlive启用 TCP 层保活机制yes
LogLevel日志详细程度INFO
PrintMotd禁用登录后 MOTD 信息no

三、SSH 会话长时间保活配置

1. 服务端配置 (sshd_config)

# 保活探针(服务端主动检测)
ClientAliveInterval 60      # 每 60 秒发送保活包
ClientAliveCountMax 7200    # 允许 7200 次无响应(约 5 天)
TCPKeepAlive yes            # 启用 TCP 保活# 系统级 TCP 调优(/etc/sysctl.conf)
net.ipv4.tcp_keepalive_time = 300    # 空闲 300 秒后检测
net.ipv4.tcp_keepalive_intvl = 60    # 检测间隔 60 秒
net.ipv4.tcp_keepalive_probes = 5    # 检测 5 次后断开

2. 客户端配置 (~/.ssh/config)

Host *ServerAliveInterval 30   # 客户端每 30 秒发送保活包ServerAliveCountMax 0    # 无限次重试ControlMaster auto       # 连接复用ControlPath ~/.ssh/control-%r@%h:%pControlPersist 1h        # 保持连接池 1 小时

3. 应对网络设备超时

场景服务端配置客户端配置
企业防火墙/NATClientAliveInterval 30ServerAliveInterval 25
移动网络ClientAliveCountMax 2880TCPKeepAlive yes

4. 增强工具与技巧

  • 终端复用工具

    # 使用 tmux 防止断连
    tmux new -s mysession    # 创建会话
    tmux attach -t mysession # 恢复会话
    
  • 自动重连脚本

    #!/bin/bash
    while true; dossh -o ServerAliveInterval=30 user@hostsleep 10
    done
    

四、完整配置示例

/etc/ssh/sshd_config

# 基础安全
Port 2222
ListenAddress 192.168.1.100
PermitRootLogin no
PasswordAuthentication no
UseDNS no# 会话保活
ClientAliveInterval 60
ClientAliveCountMax 7200
TCPKeepAlive yes# 功能限制
AllowTcpForwarding no
X11Forwarding yes
MaxSessions 5# 资源控制
MaxStartups 10:30:100

五、调试与验证

1. 连接状态检查

# 查看活跃会话
sudo netstat -tnpa | grep sshd# 实时监控日志
tail -f /var/log/auth.log | grep sshd

2. 保活测试

# 客户端详细输出
ssh -vvv user@host
# 观察日志中的保活包:
# debug3: Received SSH2_MSG_IGNORE

3. 网络模拟测试

# 临时阻断 SSH 流量(测试后清除规则)
sudo iptables -A INPUT -p tcp --dport 2222 -j DROP
sudo iptables -D INPUT -p tcp --dport 2222 -j DROP

六、安全与资源权衡

  • 风险控制

    • 避免将 ClientAliveCountMax 设为无限大(0
    • 结合防火墙限制 SSH 访问源 IP
  • 资源管理

    • 通过 MaxSessionsMaxStartups 限制并发
    • 监控 /var/log/secure 异常登录尝试
  • 协议更新

    • 定期升级 OpenSSH 版本修复漏洞
    • 禁用旧版协议:Protocol 2

通过合理配置服务端参数、客户端策略及系统级调优,可实现 SSH 会话的长时间稳定连接,同时兼顾安全性与资源效率。

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

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

相关文章

阿里云国际版注册邮箱格式详解

“为什么我的阿里云国际版注册总提示邮箱无效?” 这是许多初次接触阿里云国际版(Alibaba Cloud International)的用户常遇到的困惑。随着全球化进程加速,越来越多的企业选择阿里云国际版部署海外业务,而注册环节中邮箱…

【IDEA问题】springboot本地启动应用报错:程序包不存在;找不到符号

问题: springboot本地启动应用报错: 程序包xxx不存在;找不到符号 解决方案: 1.确保用maven重新导入依赖 2.删除.idea文件夹 3.invalidate caches里,把能选择的都勾选上,然后清除缓存重启 4.再在上方工具栏…

FFmpeg 时间戳回绕处理:保障流媒体时间连续性的核心机制

FFmpeg 时间戳回绕处理:保障流媒体时间连续性的核心机制 一、回绕处理函数 /** * Wrap a given time stamp, if there is an indication for an overflow * * param st stream // 传入一个指向AVStream结构体的指针,代表流信息 * pa…

【b站计算机拓荒者】【2025】微信小程序开发教程 - chapter3 项目实践 -1 项目功能描述

1 项目功能描述 # 智慧社区-小程序-1 欢迎页-加载后端:动态变化-2 首页-轮播图:动态-公共栏:动态-信息采集,社区活动,人脸检测,语音识别,心率检测,积分商城-3 信息采集页面-采集人数…

5.27 day 30

知识点回顾: 导入官方库的三种手段导入自定义库/模块的方式导入库/模块的核心逻辑:找到根目录(python解释器的目录和终端的目录不一致) 作业:自己新建几个不同路径文件尝试下如何导入 一、导入官方库 我们复盘下学习py…

【GitHub Pages】部署指南

vue项目 编辑你的 vite.config.ts 文件,加上 base 路径,设置为你的 GitHub 仓库名 import { defineConfig } from vite import vue from vitejs/plugin-vue// 假设你的仓库是 https://github.com/your-username/my-vue-app export default defineConfi…

远程控制技术全面解析:找到适合你的最佳方案

背景:远程控制为何成为企业核心需求? 随着企业数字化转型的推进,远程控制技术已成为异地办公和运维的关键工具。无论是跨国企业需要高效管理全球设备,还是中小型企业追求经济高效的解决方案,选择合适的远程控制技术&a…

触觉智能RK3506星闪开发板规格书 型号IDO-EVB3506-V1

产品概述 触觉智能RK3506星闪开发板,型号IDO-EVB3506-V1采用 Rockchip RK3506(三核 Cortex-A7单核Cortex-M0, 主频最高1.5GHz)设计的评估开发板,专为家电显控、显示HMI、手持终端、工业IOT网关、工业控制、PLC等领域而设计。内置…

九级融智台阶与五大要素协同的量子化解析

九级融智台阶与五大要素协同的量子化解析 摘要:本文构建了一个量子力学框架下的九级融智模型,将企业创新过程映射为量子能级跃迁。研究发现五大要素协同态决定系统跃迁概率(P∣⟨Ψ_m∣H_协同∣Ψ_n⟩∣^2),当要素协同…

Kotlin学习34-data数据类1

定义如下:与普通类对比学习 //普通类 class NormalClass(val name: String, val age: Int, val sex: Char) //数据类 data class DataClass(val name: String, val age: Int, val sex: Char)对应找到java反编译的代码路径:Tool-->Kotlin-->Show K…

博图SCL基础知识-表达式及赋值运算

S7-1200 从 V2.2 版本开始支持 SCL 语言。 语言元素 SCL 除了包含 PLC 的典型元素(例如,输入、输出、定时器或存储器位)外,还包含高级编程语言表达式、赋值运算和运算符。 程序控制语句 SCL 提供了简便的指令进行程序控制。例…

海思3519V200ARM Linux 下移植 Qt5.8.0

一、移植背景及意义 海思3519V200是一款基于ARM架构的嵌入式芯片,广泛应用于智能安防、工业控制等领域。在这些应用场景中,对设备的图形用户界面(GUI)有着越来越高的要求。Qt5.8.0作为一个功能强大、跨平台的GUI开发框架,能够帮助开发者快速开发出美观、高效的用户界面。…

msql的乐观锁和幂等性问题解决方案

目录 1、介绍 2、乐观锁 2.1、核心思想 2.2、实现方式 1. 使用 version 字段(推荐) 2. 使用 timestamp 字段 2.3、如何处理冲突 2.4、乐观锁局限性 3、幂等性 3.1、什么是幂等性 3.2、乐观锁与幂等性的关系 1. 乐观锁如何辅助幂等性&#xf…

成都鼎讯--通信信号模拟设备​

在现代电磁通信领域,精准模拟复杂多变的信号环境,是提升通信装备性能与人员作战能力的核心命题。成都鼎讯以技术创新为驱动,凭借深厚的研发实力,重磅推出通信信号模拟设备,以前所未有的强大功能与卓越性能,…

C# Windows Forms应用程序-003

目录 项目结构 命名空间和类定义 主要控件 GroupBox 控件 Label 控件 TextBox 控件 Button 控件 OpenFileDialog 控件 方法说明 构造函数 Form1() Dispose(bool disposing) Main() InitializeComponent() button1_Click(object sender, System.EventArgs e) but…

【C/C++】死锁的四大条件与预防策略详解

文章目录 死锁的四大条件与预防策略详解一、死锁的产生条件(四个必要条件)二、代码示例三、死锁的预防手段(以 C/C 为例)1. 破坏“循环等待” —— 统一加锁顺序(推荐)2. 使用 std::lock 一次性加多个锁3. …

Rust编程环境安装

文章目录 Rust编程环境安装一、安装准备二、安装步骤对于Linux/macOS用户对于Windows用户 三、验证安装四、环境配置检查五、工具链管理六、附加功能七、常见问题处理八、编辑器支持九、其他 Rust编程环境安装 一、安装准备 1. 支持系统:Windows/Linux/macOS 2. 所…

OpenHarmony平台驱动使用(五),HDMI

OpenHarmony平台驱动使用(五) HDMI 概述 功能简介 HDMI(High Definition Multimedia Interface),即高清多媒体接口,主要用于DVD、机顶盒等音视频Source到TV、显示器等Sink设备的传输。 HDMI以主从方式工…

【Git】Commit Hash vs Change-Id

文章目录 1、Commit 号2、Change-Id 号3、区别与联系4、实际场景示例5、为什么需要两者?6、总结附录——Gerrit 在 Git 和代码审查工具(如 Gerrit)中,Commit 号(Commit Hash) 和 Change-Id 号 是两个不同的…

leetcode hot100刷题日记——21.不同路径

和20题一样的思路link 题解&#xff1a; class Solution { public:int dfs(int i,int j,vector<vector<int>>&memo){//超过了边界&#xff0c;return 0if(i<0||j<0){return 0;}//从&#xff08;0&#xff0c;0&#xff09;到&#xff08;0&#xff0c;0…