服务器如何禁止 root 远程登录

liulian
liulian 正式会员超兽战士
发布于 2026-10-07 15:07 ·1 浏览 ·0 回复

学完这篇,你能在不把自己锁在服务器外面的前提下,安全地关闭 root 的 SSH 远程登录,并知道改完怎么验证、出问题怎么回滚。

第一步:先建一个能提权的普通用户

这一步要做的是给自己留一条后路——因为禁止 root 登录后,你必须用别的账号进系统,并且还得能把权限提到 root。做完后你会得到一个可以 SSH 登录、可以 sudo 到 root 的账号。

以用户名 deploy 为例,CentOS 7/8、Rocky、Ubuntu 20.04/22.04 通用:

useradd -m -s /bin/bash deploy
passwd deploy

然后把它加进管理员组。CentOS/RHEL/Rocky 用 wheel 组:

usermod -aG wheel deploy

Debian/Ubuntu 用 sudo 组:

usermod -aG sudo deploy

验证:先 su - deploy,再执行 sudo whoami,输出 root 就说明提权没问题。

注意:usermod -aG 里的 -a 不能省,写成 usermod -G 会把用户从其他附加组里踢出去。改完组之后需要重新登录,新组权限才生效。

第二步:确认新账号能远程登录

这一步是用另一个终端验证备用通道确实可用,做完后再动配置才有底气。

不要断开当前 root 会话,另开一个终端执行:

ssh deploy@你的服务器IP

登录成功后执行 sudo -i,能变成 root 提示符就对了。

注意:这一步必须在改 sshd 配置之前做,而且原来那个已登录的 root 会话先别关——万一配置写错,你还能从这条已建立的连接里改回来。

第三步:修改 sshd_config 禁止 root 登录

这一步是真正的核心改动,做完后 root 将无法通过 SSH 登录。先备份:

cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.$(date +%F)

再编辑:

vim /etc/ssh/sshd_config

在 vim 里输入 /PermitRootLogin 搜索,把

PermitRootLogin yes

改成

PermitRootLogin no

如果这行被注释掉了(前面有 #),去掉 # 或者直接在文件末尾新增一行 PermitRootLogin no。

注意:Ubuntu 22.04、Debian 12、CentOS 9 等版本会把配置拆到 /etc/ssh/sshd_config.d/ 目录,里面的 .conf 文件在主配置之后加载、优先级更高。先用 grep -r PermitRootLogin /etc/ssh/ 把所有出现位置找出来逐个改成 no,否则主文件改了也不生效。

第四步:检查语法并重载服务

这一步先确认配置没错,再让 sshd 重新读取配置,做完后新配置正式生效但不断开现有连接。

sshd -t

没有任何输出说明语法 OK。再确认最终生效值:

sshd -T | grep -i permitrootlogin

输出 permitrootlogin no 才算真正生效。然后重载:

CentOS/RHEL:

systemctl reload sshd

Ubuntu/Debian:

systemctl reload ssh

注意:服务名不一样,CentOS 系是 sshd,Ubuntu/Debian 是 ssh。不确定就 systemctl list-units | grep ssh 看一下。优先用 reload,restart 会中断当前 SSH 连接,没必要冒险。

第五步:验证结果

这一步用实际登录来确认限制生效。新开一个终端执行:

ssh root@你的服务器IP

应该被拒绝,提示 Permission denied。再用 ssh deploy@你的服务器IP 登录,sudo -i 能提权,说明一切正常。日志可以进一步确认:Ubuntu/Debian 看 /var/log/auth.log,CentOS/RHEL 看 /var/log/secure。

注意:如果 root 用了密钥登录、且你确实需要保留某些自动化场景,可以改成 PermitRootLogin prohibit-password,它只允许密钥、禁止密码。要完全禁止就用 no。

第六步(可选):再收紧一层

这一步顺手把密码登录也关掉,只留密钥,做完后暴力破解基本没有发挥空间。在 sshd_config 里设置:

PubkeyAuthentication yes
PasswordAuthentication no

改完同样执行 sshd -t 和 reload。

注意:云服务器(阿里云、腾讯云、AWS)在禁用密码登录前,务必先确认你能通过控制台的 VNC/远程连接功能登录,否则密钥出问题就真进不去了。

小结

  • 顺序不能反:先建普通用户并确认能 SSH 登录 + sudo,再动 sshd 配置。
  • 改前备份 sshd_config,改后用 sshd -T | grep permitrootlogin 看最终生效值。
  • 别忘了检查 /etc/ssh/sshd_config.d/ 里的覆盖文件;Ubuntu/Debian 服务名是 ssh。
  • 用 reload 而不是 restart,并保留一个已登录会话作为兜底。
  • 禁止 root 登录后,用 deploy 这类账号 sudo -i 或 su - 提权,日常运维习惯不受影响。
版权声明:本文来自 GJ站长论坛《服务器如何禁止 root 远程登录》
原文链接:https://www.gj0.com/thread-359.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。
他们都看过 1 人浏览过
GJ论坛站长

全部回复 0

还没有回复,来抢沙发~