最直接有效的方式是修改 ssh 配置使 permitrootlogin no 生效,需备份配置、取消注释并唯一保留该行,reload 服务后验证;同时必须关闭密码登录、启用密钥认证、设置 allowusers 白名单,并创建带 sudo 权限的替代管理员账户。

最直接有效的方式是修改 SSH 配置,让 PermitRootLogin no 生效。这不是可选建议,而是生产环境必须落实的基础动作——它从协议层拦截所有以 root 身份发起的 SSH、SCP 和 SFTP 连接请求,不依赖 shell 设置或 PAM 策略,逻辑清晰、范围明确、无绕过路径。
修改 /etc/ssh/sshd_config 配置
使用具备 sudo 权限的账户操作:
- 先备份原配置:sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
- 编辑配置文件:sudo vim /etc/ssh/sshd_config
- 搜索 PermitRootLogin,删掉开头的 # 取消注释,并确保唯一未注释行为:PermitRootLogin no
- 检查是否有多余的 PermitRootLogin 行(包括被注释的),全部删除或注释掉,只留这一行
- 保存退出
安全重载 SSH 服务
不要用 restart,避免当前会话意外中断:
- Ubuntu/Debian:sudo systemctl reload ssh
- CentOS/RHEL:sudo systemctl reload sshd
- 验证服务状态:sudo systemctl status sshd,确认 active (running),无 failed 或 warning
配套必须做的三件事
仅设 PermitRootLogin no 不够,还需同步加固:
- 关闭密码登录:确认 PasswordAuthentication no 已启用(非注释),防止攻击者爆破普通用户后提权
- 启用密钥认证:确保 PubkeyAuthentication yes,并为管理用户部署好 ~/.ssh/authorized_keys(权限必须为 600)
- 显式白名单用户:在配置末尾添加 AllowUsers admin deploy(空格分隔),防止未知账户尝试连接
创建并验证替代管理员账户
禁用 root 后必须有可用入口:
- 新建用户:sudo useradd -m -s /bin/bash admin && sudo passwd admin
- 授权提权:sudo usermod -aG sudo admin(Ubuntu/Debian)或 sudo usermod -aG wheel admin(CentOS/RHEL)
- 新开终端测试:ssh admin@your_server_ip,再执行 sudo whoami,应返回 root
- 同时验证 root 失败:ssh root@localhost 应立即提示 Permission denied











