最稳妥常用方式是修改/etc/ssh/sshd_config文件,用AllowUsers设白名单(如AllowUsers user@192.168.1.0/24),DenyUsers作临时黑名单,优先级高于AllowUsers,改Shell用usermod -s /sbin/nologin可静默禁用交互登录,配置后须sshd -t验证并systemctl restart sshd。

直接禁止特定用户通过 SSH 登录,最稳妥、最常用的方式是修改 /etc/ssh/sshd_config 文件,配合白名单或黑名单机制。不建议依赖已失效的 /etc/hosts.allow 或 /etc/hosts.deny,现代 OpenSSH(8.0+)默认不编译 libwrap 支持,那些规则大概率不生效。
用 AllowUsers 做精确白名单控制
只允许少数可信用户登录,是最安全的做法。它天然具备“未明确列出即拒绝”的特性,且支持按 IP 细化限制。
- 格式为
AllowUsers username1 username2@192.168.1.100 admin@2001:db8::/64,多个条目空格分隔 - 支持 CIDR 表示法(如
192.168.1.0/24),但不支持通配符(192.168.1.*无效) - 若只想允许某用户从固定内网登录,写成
AllowUsers ops@10.0.0.0/8即可 - 配置前务必备份:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
用 DenyUsers 快速封禁个别账户
适合临时禁用测试账号、离职人员或可疑账户,操作简单,但不如白名单严谨。
- 添加
DenyUsers guest backup testuser,这些用户将无法完成 SSH 认证 - 注意优先级:DenyUsers > AllowUsers,哪怕某用户同时出现在两个列表中,也会被拒绝
- 可结合 IP 限定,如
DenyUsers olduser@203.0.113.55,仅封禁该 IP 下的登录
改 Shell 是系统级静默禁用
适用于需要保留用户账户(如运行 cron、被服务调用),但彻底关闭交互式登录的场景。
- 执行
sudo usermod -s /sbin/nologin username,登录时会立即退出 - 恢复只需
sudo usermod -s /bin/bash username - 不影响该用户执行脚本、定时任务或被其他进程以非交互方式调用
重启前必须验证语法并留备用通道
配置错误可能导致 SSH 服务启动失败,从而锁死远程连接。
- 修改后先检查语法:
sudo sshd -t,无输出表示正常 - 重启命令:
sudo systemctl restart sshd - 务必保持一个已建立的 SSH 会话不关闭,或确保有控制台(VNC/物理终端)访问权限
- 重启后可查日志确认:
sudo journalctl -u sshd --since "1 minute ago" | grep -i "denied\|invalid"


















