当前位置: 首页 > 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 会话的长时间稳定连接,同时兼顾安全性与资源效率。

相关文章:

  • Python----循环神经网络(Transformer ----Encoder-Decoder)
  • Prim算法剖析与py/cpp/java语言实现
  • 如何使用 Redis 实现排行榜功能
  • TailwindCSS v4 快速入门教程
  • 从SPDY到HTTP/2:网络协议的革新与未来
  • Camera相机人脸识别系列专题分析之一:人脸识别系列专题SOP及理论知识介绍
  • 实时技术对比:SSE vs WebSocket vs Long Polling
  • 25、web场景-【源码分析】-静态资源原理
  • 零基础设计模式——结构型模式 - 组合模式
  • 产业集群间的专利合作关系
  • Spring Cloud 详解:2025 最新技术与最佳实践
  • 【iOS(swift)笔记-11】App版本升级时本地数据库sqlite更新逻辑
  • 线下陪玩app小程序 陪玩同城搭子系统开发;
  • vue2使用element中多选组件el-checkbox-group,数据与UI更新不同步
  • 计算机网络-网络层
  • ROS云课三分钟-3D性能测试supertuxkart和游戏推荐等-国际象棋
  • 在AIX环境下修改oracle 11g rac的IP地址
  • Java SapringBoot集成Redis存储Session,setAttribute会重置过期时间吗?怎么实现更新过期时间
  • Linux中Java开发、部署和运维常用命令
  • 关于Oracle SGA内存抖动
  • 网站制作源码版权/百度seo手机
  • 青岛网站建设公司怎么样/推广软文代写
  • 室内设计方案ppt展示/哈尔滨网站优化
  • 怎么自己优化网站/信息发布推广方法
  • 网站中在线咨询怎么做/网站流量统计工具
  • 网站建设 蜀美网络/企业seo网络推广