保障 SSH 安全:Root 登录最佳实践 | AI生成和翻译

Home 2026.01

Question: 如何移除 SSH root key (从 authorized_keys 中),以及 “PermitRootLogin” 是什么意思?禁用通过 SSH 登录 root 有什么好处?

Answer:

这里涉及两个相关但不同的概念:

  1. 移除特定的 SSH public key(针对 root 用户,使 root 无法再使用该特定密钥登录)。
  2. 完全禁用 root 登录(或对其进行限制),通过 SSH 中的 PermitRootLogin 设置来实现 —— 这通常是人们所说的“移除 SSH root 登录”或“禁用 root SSH 访问”的意思。

1. 如何移除 root 的特定 SSH public key

允许登录的 public keys 存储在:

/root/.ssh/authorized_keys

(在极少数旧系统中可能是 /root/.ssh/authorized_keys2

移除一个密钥的步骤:

sudo nano /root/.ssh/authorized_keys
# 或
sudo vim /root/.ssh/authorized_keys

更快捷的命令行方式(如果你知道密钥的部分内容):

# 示例:移除包含 "AAAAB3NzaC1yc2EAAAADAQABAAABAQ..." 的密钥
sudo sed -i '/AAAAB3NzaC1yc2EAAAADAQABAAABAQ/d' /root/.ssh/authorized_keys

若要移除所有密钥(完全停止基于密钥的 root 登录):

sudo mv /root/.ssh/authorized_keys /root/.ssh/authorized_keys.bak
# 或直接删除
sudo rm /root/.ssh/authorized_keys

更改 authorized_keys 后,通常不需要重启 sshd。

2. 什么是 PermitRootLogin 以及如何禁用 root 登录

此设置位于 /etc/ssh/sshd_config(或现代系统中的 /etc/ssh/sshd_config.d/ 文件)。

常见取值:

推荐的安全设置(适用于大多数服务器):

sudo nano /etc/ssh/sshd_config

修改或添加:

PermitRootLogin no

然后重启 SSH 服务:

# Ubuntu/Debian
sudo systemctl restart ssh

# CentOS/RHEL/AlmaLinux/Rocky
sudo systemctl restart sshd

更改后:

禁用通过 SSH 登录 root 的好处 (PermitRootLogin no)

快速总结 —— 现今大多数安全服务器的做法:

这种组合可以防御约 99% 的自动化 SSH 攻击。

References:


Back

x-ai/grok-4.1-fast

Donate