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

如何限制指定nologin系统用户的SSH端口转发数量

如何限制指定nologin系统用户的SSH端口转发数量

嘿,这个需求我之前帮朋友解决过,给你几个亲测好用的方案,按需选就行:

方案一:直接通过SSH配置文件限制并发连接

SSH本身就支持针对特定用户的精准配置,非常适合这种场景。编辑/etc/ssh/sshd_config,在文件末尾添加以下内容:

Match User 你的nologin用户名
    MaxSessions 2
    MaxStartups 2:30:5
  • Match User 用来精准匹配目标用户,只对该用户生效,不会影响其他正常用户
  • MaxSessions 限制该用户每个SSH连接的会话数(虽然你用的-N参数没有交互式会话,但这个配置能间接限制并发的转发连接数)
  • MaxStartups 是限制未完成认证的并发连接数,2:30:5的意思是:当连接数达到2时,开始随机拒绝30%的新连接;超过5个就直接全部拒绝

改完之后记得重启SSH服务让配置生效:systemctl restart sshd

方案二:用PAM限制用户进程数

每个ssh -D 1080 -N命令都会启动一个属于该用户的sshd子进程,所以直接限制该用户的最大进程数,就能从根源控制隧道数量。

  1. 编辑/etc/security/limits.conf(或者在/etc/security/limits.d/下新建一个自定义配置文件,比如99-nologin-user-limits.conf),添加:
你的nologin用户名 hard nproc 2

这里hard表示强制限制,nproc 2就是最多允许该用户运行2个进程。

  1. 确保SSH的PAM配置启用了limits模块:检查/etc/pam.d/sshd里有没有这一行,如果没有就加上:
session    required     pam_limits.so

重启SSH服务后,这个用户最多只能开2个隧道,第三个会因为无法创建新进程而直接失败。

方案三:用systemd cgroup限制进程数(更优雅灵活)

如果你的系统用systemd管理,这个方法不仅能限制进程数,还能顺便管控CPU、内存等资源,非常适合长期维护。

  1. 先创建一个自定义的systemd配置目录:
mkdir -p /etc/systemd/system/user@你的nologin用户名.service.d/
  1. 在这个目录里新建override.conf文件,内容如下:
[Service]
TasksMax=2

TasksMax就是限制该用户的最大进程/任务数,设置成2刚好符合你的需求。

  1. 重新加载systemd配置并重启用户服务:
systemctl daemon-reload
systemctl restart user@你的nologin用户名.service

这样不管用户通过什么方式启动进程,最多只能有2个在运行,完美限制隧道数量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 13:52:29