sshd之MaxSessions

参数是 OpenSSH 的并发连接控制关键参数,在高并发场景(比如堡垒机、跳板机、自动化运维平台)里很重要。


1.MaxSessions 10000

  • 含义:单个 SSH 连接里允许的最大并发会话数
  • 一个 TCP 连接 上可以有多个 channel/session(比如开了一个 SSH 连接后再执行 ssh -N -L ... 做端口转发,或 ControlMaster 复用时的多路会话)。
  • 默认值:10
  • 你设置为 10000,代表 一个 TCP SSH 连接内最多允许 1 万个会话

⚠️ 风险:

  • 通常没必要设置这么大。一般几十个会话够用。过高会增加内存和 CPU 负担,如果恶意用户开大量 channel,可能导致 sshd 被打爆。

2.MaxStartups 5000:50:10000

这是更复杂的参数,控制 同时处于未认证状态的并发连接数,格式是:

MaxStartups start:rate:full
  • start:无条件允许的最大未认证连接数。

  • rate:超过 start 后,额外连接会被随机丢弃的概率(百分比)。

  • full:达到这个值后,所有新连接直接拒绝。

  • start = 5000
    → 最多允许 5000 个并发未认证连接。

  • rate = 50
    → 超过 5000 后,每个新连接有 50% 概率被拒绝。

  • full = 10000
    → 当达到 10000 个未认证连接时,完全拒绝所有新连接


3.举个例子

假设你有很多客户端同时 ssh 上来:

  • 前 5000 个未认证连接:都允许。
  • 第 5001 个开始:有 50% 概率被拒绝。
  • 达到 10000:新连接一律拒绝。

这样做的目的是 防止暴力 SSH 爆破或 DoS 攻击 ——避免无限堆积未认证连接把 sshd 资源耗尽。


4.结合你的配置来看

  • MaxSessions 10000
    → 理论上单连接可开 10000 个 session,不太现实,可能是你测试/压测环境。

  • MaxStartups 5000:50:10000
    → 允许巨量未认证连接并发,属于极端大并发场景(正常服务器几百就够)。

⚠️ 生产风险:

  • 这两个值过大可能会导致 sshd 资源耗尽、内存压力大、甚至触发内核 OOM。

  • 建议根据机器性能 & 并发需求调优。一般:

    • MaxSessions 50 ~ 200 足够。
    • MaxStartups 100:30:200 就很安全。