Ubuntu 20.04怎么配置SSH禁止root远程登录?

文章导读
Ubuntu 20.04 默认策略已限制 root 远程登录,但为了确保持续安全,建议显式配置 SSH 禁止 root 登录,适用于所有面向公网的服务器。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 参考来源
A A

Ubuntu 20.04 默认策略已限制 root 远程登录,但为了确保持续安全,建议显式配置 SSH 禁止 root 登录,适用于所有面向公网的服务器。

先说结论:生产环境应始终禁止 root 直接 SSH 登录,改用普通用户配合 sudo 提权。

  • 先判断:确认已创建具备 sudo 权限的普通用户,避免锁死自己。
  • 优先做:修改 SSH 配置文件将 PermitRootLogin 设为 no。
  • 再验证:保持当前会话开启,新开终端测试 root 登录是否被拒。

命令速用版

若已确认有 sudo 用户,可直接执行以下命令修改配置。操作前务必备份配置文件:

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sudo sed -i 's/^#PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
sudo sed -i 's/^PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
sudo sshd -t
sudo systemctl restart ssh

注意:Ubuntu 20.04 的 SSH 服务名通常为 ssh 而非 sshd。执行重启前必须通过 sshd -t 检查配置语法,无输出则表示正确。

为什么会这样

Ubuntu 默认禁用 root 登录并非技术限制,而是基于最小权限原则的安全设计。直接使用 root 意味着任何误操作或恶意软件都将获得系统最高控制权,且操作难以审计。通过 sudo 机制,管理员可以在需要时临时提权,系统会记录具体是哪个用户执行了特权命令,便于追踪问题源头。这是 Linux 运维领域的标准安全实践。

分步处理

1. 准备备用管理账户

在禁止 root 登录前,必须确保至少有一个普通用户拥有 sudo 权限。若当前只有 root 可用,请先创建新用户:

sudo adduser newadmin
sudo usermod -aG sudo newadmin

2. 修改 SSH 配置

编辑配置文件,找到 PermitRootLogin 项。若该行被注释,需取消注释并修改值为 no。建议同时配置密钥登录并关闭密码认证以增强安全:

sudo nano /etc/ssh/sshd_config

配置示例:

Ubuntu 20.04怎么配置SSH禁止root远程登录?
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes

3. 检查配置语法

保存文件后,先测试配置是否正确,避免服务无法启动:

sudo sshd -t

若命令无输出,表示语法正确;若有报错,请根据提示修改配置文件。

4. 重启 SSH 服务

确认语法无误后重启服务使配置生效:

sudo systemctl restart ssh

怎么验证是否生效

1. 本地测试

不要关闭当前已登录的会话。新开一个终端窗口,尝试连接 root 账户:

ssh root@你的服务器 IP

若配置成功,应直接提示 Permission denied 或认证失败,而不会提示输入密码。

Ubuntu 20.04怎么配置SSH禁止root远程登录?

2. 检查日志

查看系统认证日志,确认 root 登录尝试被记录:

sudo grep "Failed password for root" /var/log/auth.log

若能看到相关拒绝记录,说明 SSH 服务正常工作且拦截了 root 登录。

常见坑

1. 配置语法错误导致服务启动失败

修改 sshd_config 时若拼写错误,可能导致 SSH 服务无法启动。务必在执行 restart 前运行 sudo sshd -t 检查。若服务已挂掉,需通过云服务商的控制台 VNC 救援模式恢复。

2. 服务名称混淆

在 CentOS 或 RHEL 系统上 SSH 服务名通常是 sshd,但在 Ubuntu 20.04 上通常是 ssh。执行 restart 命令前可用 systemctl status ssh 确认。

3. 把自己锁在门外

这是最严重的风险。务必在断开当前连接前,验证新用户的 sudo 权限和 SSH 登录是否正常。建议保留一个开启的 root 会话直到确认新用户可成功登录并提权。

参考来源

  • DigitalOcean, Initial Server Setup with Ubuntu 20.04, https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-20-04
  • Ubuntu Manpage: sshd_config, https://manpages.ubuntu.com/manpages/focal/man5/sshd_config.5.html