Linux中限制用户仅从指定IP SSH登录需配置sshd_config的AllowUsers项,格式为“用户名@IP”,并禁用root登录和密码认证,改用密钥认证,最后重载服务并验证日志。

Linux系统中限制指定用户只能从指定IP进行SSH登录,本质是构建“用户+来源IP”的精确白名单,避免仅限用户或仅限IP的粗粒度控制带来的安全缺口。操作必须在SSH服务配置层面完成,且需立即验证,否则可能因配置错误导致远程失联。
编辑sshd_config启用AllowUsers白名单
用root权限打开SSH主配置文件:sudo nano /etc/ssh/sshd_config。
在文件末尾新增一行,格式严格为用户名@IP地址,多个条目用空格分隔。例如:AllowUsers deploy@10.10.5.100 backup@172.16.20.30。注意:中间不能有空格,IP必须是具体地址或支持通配符(如192.168.1.*),不支持CIDR斜杠写法(如192.168.1.0/24)。
确保该行未被注释(即开头没有#号),且放在文件末尾——因为AllowUsers规则一旦启用,未列出的用户或IP组合将被直接拒绝,连密码输入提示都不会出现。
关闭root远程登录并禁用密码认证(关键加固)
查找PermitRootLogin配置项,将其设为no或prohibit-password,防止root账户成为攻击入口。
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
确认PasswordAuthentication设为no。这一步不是可选项:若保留密码登录,攻击者可通过爆破任意白名单用户的密码绕过IP限制。必须配合密钥认证使用,否则配置形同虚设。
检查用户shell是否有效:运行getent passwd deploy(将deploy换成你的用户名),确认第七列不是/sbin/nologin或/usr/sbin/nologin——这类shell会直接拒绝SSH交互式登录,即使用户在AllowUsers列表中也无效。
校验配置并重载服务
第一步:执行sudo sshd -t。若返回空白,说明语法正确;若报错,立即修正,不要继续下一步。
第二步:执行sudo systemctl reload sshd。必须用reload而非restart——reload不会断开当前SSH会话,给你留出纠错窗口。
第三步:新开一个终端,从白名单IP尝试登录;再换一个非白名单IP尝试,应立刻收到“Permission denied”且无密码提示。同时查看日志确认拦截生效:sudo tail -n 10 /var/log/auth.log(Ubuntu/Debian)或sudo tail -n 10 /var/log/secure(RHEL/CentOS),应看到类似“User deploy from 10.10.5.200 not allowed because not listed in AllowUsers”的记录。

















