SSH仅允许特定用户组登录需配置AllowGroups指令,创建ssh-users组并添加用户,禁用密码认证、启用密钥认证,重载sshd服务后验证生效。

要让 Linux 系统的 SSH 只允许特定用户组远程连接,核心是通过 sshd_config 的 AllowGroups 指令实现白名单控制。这不是附加功能,而是 OpenSSH 原生支持、优先级高且稳定生效的机制。
启用 AllowGroups 限制登录范围
编辑 /etc/ssh/sshd_config,确保以下配置存在且未被注释:
-
AllowGroups ssh-users(把ssh-users替换为你实际使用的组名) -
PermitRootLogin no(禁用 root 直接登录) -
PasswordAuthentication no(建议同步关闭密码认证,强制密钥登录) -
PubkeyAuthentication yes(保持密钥认证开启)
注意:AllowGroups 和 AllowUsers 不要同时启用,否则 AllowUsers 会优先生效;若已存在 DenyGroups,需确认二者逻辑不冲突。
创建并添加用户到授权组
用标准命令完成系统层配置:
- 创建组:
sudo groupadd ssh-users - 将用户加入组(保留原有组关系):
sudo usermod -aG ssh-users alice - 验证是否生效:
getent group ssh-users或groups alice
⚠️ 用户必须重新登录(或新开 shell)才能继承新组身份,SSH 连接也需在此之后发起才受新规则约束。
验证与重载服务
修改后务必分步操作,避免失连:
- 检查语法是否正确:
sudo sshd -t(无输出即通过) - 重载服务(不中断现有连接):
sudo systemctl reload sshd - 新开终端测试:用非该组用户尝试登录,应返回
User xxx not allowed because not listed in AllowGroups;用组内用户+有效密钥登录,应成功。
补充安全建议
-
~/.ssh/authorized_keys权限设为600,~/.ssh目录设为700 - 若服务器暴露在公网,建议叠加防火墙规则(如
firewalld仅放行可信网段),但防火墙不能替代AllowGroups——它不参与用户身份判断,只管 IP 和端口 - 切勿依赖
/etc/hosts.allow:OpenSSH 8.0+(包括 Ubuntu 20.04+、RHEL/CentOS 8+、Debian 11+)默认不编译 libwrap 支持,该文件完全不生效
不复杂但容易忽略


















