allowusers是openssh原生、优先级最高且认证前拦截的白名单机制,需在/etc/ssh/sshd_config中严格按username@cidr格式配置(如admin@192.168.10.0/24),不支持通配符;配置后须sudo sshd -t校验语法并sudo systemctl restart sshd生效,现代系统中/etc/hosts.allow已基本失效。

用 AllowUsers 限定用户和网段
这是首选方案,白名单逻辑,默认拒绝所有未明确列出的访问。
- 语法必须严格:用户名@CIDR网段,中间不能有空格,例如 admin@192.168.10.0/24 或 deploy@2001:db8::/64
- 支持 IPv4 CIDR(如
10.0.5.0/28)和 IPv6 网段,但不支持通配符(192.168.1.*是非法的) - 若只按网段不限用户,可写成 *@172.16.0.0/16,但生产环境建议绑定具体账号,避免宽泛授权
- 多个条目用空格分隔,例如:
AllowUsers admin@192.168.10.0/24 deploy@10.20.30.0/24
配置后必须重启并验证
修改保存后,规则不会自动生效,需手动操作:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 先检查语法是否正确:
sudo sshd -t—— 若报错,别重启,先修正配置 - 再重启服务:
sudo systemctl restart sshd(主流 systemd 系统) - 注意:重启会断开当前 SSH 连接,务必确保有备用访问方式(如云平台 VNC 或本地控制台)
别依赖 /etc/hosts.allow
这个文件在 OpenSSH 8.0+ 中基本失效,原因很实在:
- 现代发行版默认不编译 libwrap 支持,
ldd /usr/sbin/sshd | grep wrap返回空就说明完全没加载 TCP Wrappers - 即使写了
sshd: 192.168.1.0/24,实际也毫无作用,容易造成“已限制”的错觉 - 它属于旧式机制,优先级低、行为不可控,不推荐用于正式环境
防火墙可作补充防线
iptables/firewalld 不是替代方案,而是第二道保险:
- 例如只允许某网段连 SSH 端口:
sudo iptables -A INPUT -s 192.168.20.0/24 -p tcp --dport 22 -j ACCEPT - 再加一条拒绝所有 SSH 连接:
sudo iptables -A INPUT -p tcp --dport 22 -j DROP - 注意顺序:ACCEPT 规则必须在 DROP 之前,否则会被拦截
- 这类规则影响所有服务,粒度粗;而
AllowUsers专管 SSH 登录逻辑,更精准










