linux中配置ssh只允许特定用户登录的核心是通过/etc/ssh/sshd_config的allowusers启用白名单机制,支持user@ip/cidr格式(不支持*通配符),需确保用户存在、shell合法、权限正确,并用systemctl reload sshd生效,避免与denyusers冲突。

Linux 中配置 SSH 服务只允许特定用户登录,核心是修改 /etc/ssh/sshd_config 文件,启用白名单机制,而非依赖已失效的 /etc/hosts.allow 或防火墙层限制。操作简单但细节关键,配错可能锁死自己。
用 AllowUsers 精确控制可登录用户
这是最直接、优先级最高、且原生支持的方式。编辑配置文件:
sudo nano /etc/ssh/sshd_config
在文件末尾添加一行(注意:不要重复存在多个 AllowUsers 行):
AllowUsers alice bob@192.168.5.0/24 charlie@2001:db8::/64
- 格式为 用户名 或 用户名@IP地址/CIDR,空格分隔
- 支持 IPv4 和 IPv6,但不支持通配符如
192.168.1.*(该写法非法) - 未列出的用户,无论密码或密钥是否正确,连接请求在认证前就被拒绝
确保目标用户满足登录前提
仅写 AllowUsers 不够,用户本身必须能正常通过 SSH 认证:
- 用户需已存在:
sudo adduser alice(自动创建家目录和 shell) - shell 必须合法:
getent passwd alice | cut -d: -f7应返回/bin/bash或/bin/sh;若为/sbin/nologin,用sudo chsh -s /bin/bash alice修改 - 若使用密钥登录,
~/.ssh目录权限应为700,authorized_keys为600
避免规则冲突与误锁风险
SSH 规则有明确优先级:DenyUsers > AllowUsers > DenyGroups > AllowGroups。因此:
- 不要同时配置
AllowUsers和DenyUsers,容易引发意外交互 - 确认文件中没有残留的
DenyUsers或PermitRootLogin yes(除非你真需要 root 登录) - 操作前务必保留一个本地终端或云平台控制台会话,防止 reload 后失连
- 改完先检查语法:
sudo sshd -t(无输出即通过)
重载服务并验证效果
配置无误后,用 reload 替代 restart,保持当前连接不断:
sudo systemctl reload sshd
新开终端测试:
- 用授权用户登录:
ssh alice@localhost—— 应成功 - 用非授权用户登录:
ssh guest@localhost—— 应立即提示Permission denied - 查日志确认拦截:
sudo tail -n 15 /var/log/auth.log(Ubuntu/Debian)或/var/log/secure(RHEL/CentOS),可见类似User guest not allowed because not listed in AllowUsers











