SSH登录用户数量的管理,是服务器安全运维中一个容易被忽视但很关键的细节。想象一下,如果你的服务器允许任意数量的用户同时通过SSH登录,一旦遭遇恶意攻击或内部乱用,系统资源很容易被耗尽。那么,如何有效地限制同时登录的用户数量?这里提供两种实战方法,你可以根据环境灵活选择。

方法1:通过PAM模块(可插拔认证模块)限制
PAM是Linux系统下非常灵活的认证框架,用它来限制用户登录数量,属于系统层面的控制,不限于SSH,对其他本地登录也有效。
第一步:安装PAM限制模块。不同发行版包名略有差异——
- Debian/Ubuntu 系:
sudo apt-get install libpam-limit - CentOS/RHEL/Fedora 系:
sudo yum install pam_limits
第二步:编辑配置文件 /etc/security/limits.conf。打开文件后,在末尾添加一行:
* hard nproc 5
这行代码的意思是:限制所有用户(*)同时登录的进程数量上限为5。注意,这里的“nproc”指的是每个用户允许的最大进程数,而SSH登录时每个会话会占用一个进程,所以间接限制了同时登录的用户数量。如果想针对特定用户(比如用户名为“johndoe”),就将 * 替换为用户名:
johndoe hard nproc 5
第三步:保存文件后,需要重启系统才能生效(或者重启相关服务,但PAM配置通常需要重启)。
补充说明:此方法生效后,任何用户(或指定用户)同时打开的进程数超过5个时,后续尝试会被拒绝。但要注意,它限制的是进程数,而非严格意义上的“SSH会话数”。如果用户已经通过其他方式运行了多个进程,实际可用的SSH会话数会少于5。
方法2:直接在SSH配置文件中限制
第二种方法更直接,只针对SSH服务,不干扰其他系统功能。编辑SSH服务的主配置文件:
sudo nano /etc/ssh/sshd_config
在文件末尾添加:
MaxSessions 5
这一行会限制整个SSH服务同时接纳的会话数量为5。注意,这里的“会话”指的是SSH连接,包括交互式登录和远程命令执行。如果希望限制特定用户,可以使用 Match User 指令:
Match User username
MaxSessions 5
将 username 替换成实际用户名即可。保存文件后,重启SSH服务:
sudo systemctl restart ssh
更改立即生效,无需重启系统。
一点补充
上面两种方法都只限制了同时登录的用户数量,并不能限制某个用户在特定时间段内的登录尝试次数。如果你需要防御暴力破解,防止频繁尝试登录,建议配合使用 Fail2Ban 这类工具——它会监控日志,在检测到多次失败登录后自动封禁IP。两者结合使用,防护效果更佳。