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

OpenSSH 服务配置与会话保活完全指南

一、/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.xdnf.cn/news/668629.html

相关文章:

  • 参数/非参数检验和连续/离散/分类等变量类型的关系
  • 好坏质检分类实战(异常数据检测、降维、KNN模型分类、混淆矩阵进行模型评估)
  • Ubuntu20.04系统安装,使用系统盘安装
  • 在thinkphp5.0中。单表使用 model clone 时就会有问题。 需要使用 alias(), 否则会报错。
  • 防腐防爆配电箱:采用 304 不锈钢材质,抗腐蚀、抗冲击,适应恶劣工况
  • 第三届黄河流域网安技能挑战赛复现
  • 2025吉林CCPC 题解(前六题)
  • [图文]图6.3会计事项-Fowler分析模式的剖析和实现
  • docker 搭建php 开发环境 添加扩展redis、swoole、xdebug(1)
  • Qt不同布局添加不同控件
  • 模型评价指标介绍
  • Spark、Hadoop对比
  • Excel 操作 转图片,转pdf等
  • Go语言中的浮点数类型详解
  • Kotlin 中 Lambda 表达式的语法结构及简化推导
  • 学习黑客 Metasploit 主要组件之Encoder
  • MS1826+MS2131 1080P@60Hz 4路输入输出USB3.0采集
  • 通过ansible playbook创建azure 资源
  • 解决ubuntu服务器未使用空间的分配
  • c++复习_第一天(引用+小众考点)
  • c#,vb.net使用OleDb写入Excel异常:字段太小而不能接受所要添加的数据的数量
  • etcd:高可用,分布式的key-value存储系统
  • 鸿蒙OSUniApp 实现登录状态管理与持久化#三方框架 #Uniapp
  • 如何通过ES实现SQL风格的查询?
  • linux快速入门-VMware安装linux,配置静态ip,使用服务器连接工具连接,快照和克隆以及修改相关配置信息
  • 【机器学习基础】机器学习入门核心算法:逻辑回归(Decision Tree)
  • 第一章 LVS 负载均衡群集核心概念与体系架构
  • 计算机网络实验课(三)——直接使用数据构造以太网帧,打包并发送|使用SharpPcap库函数构造以太网帧,并发送出去
  • 哈希算法:原理、应用、安全演进与推荐
  • 学习路之PHP--easyswoole入门及文件热加载