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

CentOS 7下限制使用/sbin/nologin shell的用户SSH并发连接数失效的解决方案咨询

CentOS 7下限制使用/sbin/nologin shell的用户SSH并发连接数失效的解决方案咨询

你好,我来帮你梳理这个问题的根源并给出实用的解决办法:

首先得明确为什么/etc/security/limits.conf里的maxlogins对你的/sbin/nologin用户不起作用——这个限制是针对交互式登录shell会话的,而使用/sbin/nologin的用户登录SSH时不会启动真正的交互式shell,负责读取limits.conf的PAM模块不会触发这个规则。另外你修改的MaxSessions是单个SSH连接内的会话数,MaxStartups是未完成认证的连接阈值,这俩确实不直接限制已认证用户的并发连接数。

下面给你两个可行的方案,你可以根据需求选择:

方案一:用SSH的Match指令精准限制(推荐)

SSH的sshd_config支持Match块,可以针对特定用户或组单独配置规则,完美适配你这种端口转发专用用户的场景:

  1. 先把这些端口转发用户归到一个统一的组里(比如port-forward-users),方便批量管理:
    groupadd port-forward-users
    usermod -aG port-forward-users 你的用户名1
    usermod -aG port-forward-users 你的用户名2
    
  2. 编辑/etc/ssh/sshd_config,在文件末尾添加以下配置:
    Match Group port-forward-users
        MaxSessions 1
        AllowTcpForwarding yes
        X11Forwarding no
        PermitTTY no
        ForceCommand /sbin/nologin
    
    这里的配置不仅限制了该组用户的并发会话数为1,还进一步收紧了权限:只允许端口转发,禁止X11转发、TTY终端,强制使用/sbin/nologin,完全符合你对这类用户的权限限制需求。
  3. 重启SSH服务使配置生效:
    systemctl restart sshd
    

方案二:用PAM脚本自定义连接数检查

如果需要更灵活的自定义限制逻辑,可以借助PAM的pam_exec模块配合脚本实现:

  1. 创建一个检查连接数的脚本,比如/usr/local/bin/check_ssh_connections.sh,内容如下:
    #!/bin/bash
    # 获取当前登录的用户
    USER=$PAM_USER
    # 统计该用户的SSH并发连接数
    CONNECTIONS=$(who | grep -c "^$USER ")
    # 设置最大允许连接数
    MAX_CONNECTIONS=1
    
    if [ $CONNECTIONS -gt $MAX_CONNECTIONS ]; then
        echo "错误:用户 $USER 的并发连接数已超过上限" >&2
        exit 1
    fi
    exit 0
    
  2. 给脚本添加执行权限:
    chmod +x /usr/local/bin/check_ssh_connections.sh
    
  3. 编辑/etc/pam.d/sshd,在session段添加一行(建议放在开头位置):
    session required pam_exec.so /usr/local/bin/check_ssh_connections.sh
    
  4. 同样重启SSH服务生效。

验证方法

用你的端口转发用户尝试发起多个SSH端口转发连接(比如ssh -L 本地端口:目标地址:目标端口 用户名@服务器IP),如果配置正确,第二个连接会被拒绝。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 11:49:50