You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为特定用户而非全局系统设置SSH的MaxStartups参数(sshd_config的Match块不支持该关键字)

如何为特定用户而非全局系统设置SSH的MaxStartups参数(sshd_config的Match块不支持该关键字)

嘿,我完全懂你的烦恼——OpenSSH的Match块确实不支持MaxStartups这个参数,毕竟它是全局级别的未认证连接控制项,没法直接绑定到特定用户。不过别担心,咱们可以用一个变通的方案来实现你要的效果,核心思路是给目标用户单独配一个sshd实例,专门设置MaxStartups限制。

下面是具体的操作步骤:

  • 创建专属sshd配置文件
    新建一个配置文件,比如/etc/ssh/sshd_config_test,内容如下:

    # 继承全局的基础配置
    Include /etc/ssh/sshd_config.d/*.conf
    
    # 指定这个实例监听的端口,选一个没被占用的就行,比如2222
    Port 2222
    
    # 只允许test用户通过这个端口连接
    AllowUsers test
    
    # 设置这个实例的MaxStartups参数,也就是你要的1
    MaxStartups 1
    
  • 验证配置正确性
    在应用之前,先检查配置有没有语法错误,避免启动失败:

    sshd -t -f /etc/ssh/sshd_config_test
    

    如果没有输出,说明配置没问题。

  • 配置systemd服务(针对systemd系统)
    为这个专属sshd实例创建一个systemd服务文件,方便管理启停:
    新建/etc/systemd/system/sshd-test.service,内容如下:

    [Unit]
    Description=OpenSSH Server Instance for User test
    After=network.target sshd.service
    
    [Service]
    Type=forking
    ExecStart=/usr/sbin/sshd -f /etc/ssh/sshd_config_test
    ExecReload=/bin/kill -HUP $MAINPID
    KillMode=process
    Restart=on-failure
    
    [Install]
    WantedBy=multi-user.target
    
  • 启动并启用服务
    重新加载systemd配置,然后启动服务并设置开机自启:

    systemctl daemon-reload
    systemctl start sshd-test
    systemctl enable sshd-test
    

这样设置之后,test用户只能通过端口2222连接SSH,而这个端口的sshd实例会严格执行MaxStartups 1的限制;其他普通用户还是用默认的22端口,遵循全局的MaxStartups配置,完全互不影响。

另外补充个小知识点:如果你的需求是限制用户认证后的并发会话数,其实可以直接在Match块里用MaxSessions参数,这个是支持的,比如:

Match User test
    MaxSessions 1

不过这和MaxStartups的作用不同——MaxStartups管的是未完成认证的连接尝试,MaxSessions管的是已认证后的并发会话数,你可以根据实际需求选择。

备注:内容来源于stack exchange,提问作者DIC3

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 14:07:44