Ubuntu 禁止密码登录:安全配置指南

Ubuntu 禁止密码登录:安全配置指南

在 Ubuntu 服务器中,默认的 SSH 登录允许使用密码验证,这带来了暴力破解的风险。为了提升安全性,强烈推荐禁用密码登录,仅允许密钥认证。本文将详细讲解如何在 Ubuntu 上实现这一目标。

为什么禁止密码登录?

  • 防止暴力破解:密码登录极易受到字典攻击或暴力破解,而密钥认证几乎不可破解。
  • 提升便利性:配置密钥后,登录无需重复输入密码,方便自动化脚本和日常管理。
  • 合规要求:许多安全标准(如 PCI-DSS、SOC2)要求禁用密码登录。

前提条件

在开始之前,请确保:

  • 拥有 Ubuntu 服务器的 root 或 sudo 权限。
  • 准备一个 SSH 客户端(如 Linux/Mac 终端或 Windows 的 PowerShell)。
  • 已备份 SSH 配置文件 /etc/ssh/sshd_config

步骤一:生成 SSH 密钥对

本地机器上执行以下命令生成密钥对:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

按提示选择保存路径(默认 ~/.ssh/id_rsa)和口令(可选)。生成后,你会得到私钥 id_rsa 和公钥 id_rsa.pub

步骤二:将公钥上传到服务器

使用 ssh-copy-id 命令(推荐)或手动复制:

ssh-copy-id user@your-server-ip

输入密码后,公钥会自动添加到服务器 ~/.ssh/authorized_keys 文件中。如果 ssh-copy-id 不可用,手动执行:

cat ~/.ssh/id_rsa.pub | ssh user@your-server-ip "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

步骤三:测试密钥登录

在本地尝试密钥登录:

ssh user@your-server-ip

如果无需密码即可登录,则密钥配置成功。

步骤四:修改 SSH 配置文件禁用密码

登录服务器,编辑 SSH 配置文件:

sudo nano /etc/ssh/sshd_config

找到或添加以下参数:

PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no

确保 PubkeyAuthentication yes 已启用(默认 yes)。保存退出。

步骤五:重启 SSH 服务

sudo systemctl restart sshd

此时,所有密码登录尝试将被拒绝。请确保当前会话保持连接,避免配置错误导致无法登录。

验证配置

在本地新终端尝试用密码登录:

ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no user@your-server-ip

应该收到 Permission denied (publickey). 错误,表明密码登录被禁用。

注意事项

  • 保留备用访问:在完全禁用密码前,确保至少有一个带密钥的终端会话存活,否则可能永久锁定。
  • 备份配置:修改前备份 sshd_config,以便发生错误时恢复。
  • 考虑保留 root 密码:对于根账户,建议额外配置 PermitRootLogin prohibit-password 以允许密钥登录但禁止密码。

常见问题排查

  • 权限问题:确保 ~/.ssh 目录权限为 700,authorized_keys 权限为 600。
  • SELinux/AppArmor:如果启用了强制访问控制,可能需要调整相关规则。
  • 防火墙:确认 SSH 端口(默认 22)未被防火墙阻止。

通过以上步骤,你的 Ubuntu 服务器将不再接受密码登录,大幅降低被入侵的风险。密钥认证是现代服务器安全的基础,建议所有管理员尽快实施。