如何限制指定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子进程,所以直接限制该用户的最大进程数,就能从根源控制隧道数量。
- 编辑
/etc/security/limits.conf(或者在/etc/security/limits.d/下新建一个自定义配置文件,比如99-nologin-user-limits.conf),添加:
你的nologin用户名 hard nproc 2
这里hard表示强制限制,nproc 2就是最多允许该用户运行2个进程。
- 确保SSH的PAM配置启用了limits模块:检查
/etc/pam.d/sshd里有没有这一行,如果没有就加上:
session required pam_limits.so
重启SSH服务后,这个用户最多只能开2个隧道,第三个会因为无法创建新进程而直接失败。
方案三:用systemd cgroup限制进程数(更优雅灵活)
如果你的系统用systemd管理,这个方法不仅能限制进程数,还能顺便管控CPU、内存等资源,非常适合长期维护。
- 先创建一个自定义的systemd配置目录:
mkdir -p /etc/systemd/system/user@你的nologin用户名.service.d/
- 在这个目录里新建
override.conf文件,内容如下:
[Service] TasksMax=2
TasksMax就是限制该用户的最大进程/任务数,设置成2刚好符合你的需求。
- 重新加载systemd配置并重启用户服务:
systemctl daemon-reload systemctl restart user@你的nologin用户名.service
这样不管用户通过什么方式启动进程,最多只能有2个在运行,完美限制隧道数量。
备注:内容来源于stack exchange,提问作者farzam
相关产品推荐
相关产品推荐

