AllowUsers 是最简洁可靠的SSH白名单方式,认证前拦截不匹配连接;支持用户名格式(如 AllowUsers ops deploy)和“用户@IP”格式(如 ops@10.10.5.100),需置于 sshd_config 末尾、语法检查后重载服务。

直接用 AllowUsers 限定非 root 用户,是最简洁、最可靠的白名单方式。它在认证前就拦截不匹配的连接,连密码提示都不会出现,避免无效尝试暴露账户存在性。
明确写出用户名,不带 @ 符号
如果只要求“哪些用户能登录”,不管从哪来,就只写用户名:
- 格式是 AllowUsers user1 user2 user3,多个用户用空格分隔
- 例如:只允许运维人员 ops 和部署人员 deploy 登录:
AllowUsers ops deploy - 注意:root 不在列表里,就自动被拒绝;系统账号如 sync、games 等也不会意外放行
搭配 IP 限制,实现“人+来源”双重控制
更常见的是要求“谁、从哪台堡垒机或管理网段来”,这时必须用 username@ip 格式:
- 单个固定 IP:AllowUsers ops@10.10.5.100 deploy@192.168.10.50
- 同一网段(支持通配符 *):AllowUsers backup@172.16.20.*(匹配 172.16.20.1–172.16.20.255)
- 不能写 CIDR(如 192.168.1.0/24),也不能混用正则;@ 后只能是 IP 或域名,且中间不能有空格
配置位置与生效方式
操作不当容易把自己锁在外面,关键细节要到位:
- 把 AllowUsers 行加在 /etc/ssh/sshd_config 文件末尾,避免被前面的 Match 块或其他指令覆盖
- 执行 sudo sshd -t 检查语法是否正确,无报错再继续
- 用 sudo systemctl reload sshd 重载服务——不中断现有连接,比 restart 更安全
- 务必提前留一个已授权的备用会话(比如本地终端或另一台可信机器),用于回滚
别和其它机制混用
现代 Linux 发行版(RHEL 8+/CentOS Stream 9/Ubuntu 20.04+)默认不启用 libwrap,/etc/hosts.allow 和 /etc/hosts.deny 已基本失效。强行配置不仅没用,还可能掩盖真实问题。专注用好 AllowUsers 就够了,不需要叠加 DenyUsers 或 hosts 规则。










