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 服务器将不再接受密码登录,大幅降低被入侵的风险。密钥认证是现代服务器安全的基础,建议所有管理员尽快实施。