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:%p
    ControlPersist 1h        # 保持连接池 1 小时

3. 应对网络设备超时

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

4. 增强工具与技巧

  • 终端复用工具

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

    #!/bin/bash
    while true; do
        ssh -o ServerAliveInterval=30 user@host
        sleep 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 会话的长时间稳定连接,同时兼顾安全性与资源效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值