最基础最关键的一步是将 PermitEmptyPasswords no 写入 SSH 配置。空密码账户形同未锁之门,攻击者只需猜中用户名即可直接登录;需检查当前配置、修改并重启 sshd 服务,并配套禁用密码登录、禁止 root 登录、限制用户范围及验证生效。

直接把 PermitEmptyPasswords no 写进 SSH 配置,是堵住空密码登录漏洞最基础也最关键的一步。空密码账户相当于给服务器留了一扇没锁的门,攻击者只要猜中用户名(比如常见的 admin、test,甚至邮箱格式的账号),就能直接进门——这比暴力破解密码还快。
确认当前配置状态
先检查系统是否已启用空密码登录,避免盲目修改:
- 运行命令:
sudo grep -i "PermitEmptyPasswords" /etc/ssh/sshd_config - 如果输出为空,说明该选项被注释或未设置,默认行为因 OpenSSH 版本而异(较新版本默认为
no,但不可依赖) - 如果输出类似
#PermitEmptyPasswords yes或PermitEmptyPasswords yes,就明确存在风险
修改sshd_config并生效
编辑主配置文件,强制禁止空密码认证:
Word报告自动生成神器。自动生成专业Word文档报告,支持模板填充、目录生成、表格/图表插入、页眉页脚、多级标题、样式主题、批量邮件合并。当用户需要生成Word报告、创建合同文档、批量生成通知/证书、填充Word模板、制作商业计划书时触发。
- 用 root 或 sudo 权限打开:
sudo nano /etc/ssh/sshd_config - 查找
PermitEmptyPasswords行;若被注释(开头有#),删掉#;若不存在,手动添加一行:
PermitEmptyPasswords no - 保存退出后,**必须重启服务**:
sudo systemctl restart sshd - 重启前建议验证语法:
sudo sshd -t,返回无错误再重启,防止配置错误导致连接中断
配套加固不能少
单设 PermitEmptyPasswords no 能防空密码,但无法抵御弱密码、暴力爆破或 root 直接登录等风险,需同步收紧:
-
禁用密码登录(推荐):设
PasswordAuthentication no,只允许密钥登录,从根源移除密码攻击面 -
禁止 root 远程登录:设
PermitRootLogin no,日常用普通用户 +sudo管理 -
限制可登录用户:用
AllowUsers或AllowGroups明确授权范围,例如:AllowUsers deploy ops -
检查账户实际密码状态:运行
sudo awk -F: '($2 == "" || $2 == "*") {print $1}' /etc/shadow,列出所有无密码或锁定账户,针对性处理
验证是否真正生效
改完别只信配置文件,要实测效果:
- 新建一个测试用户:
sudo adduser --disabled-password testnull(不设密码) - 尝试 SSH 登录:
ssh testnull@your-server-ip - 若连接立即被拒绝,或提示
Permission denied (publickey)(在禁用密码前提下),说明空密码路径已被切断 - 也可用
ssh -o PubkeyAuthentication=no testnull@ip强制走密码流程,应返回认证失败










