如何设置 SSH 密钥登录禁用密码验证提升 VPS 安全性

文章导读
对于暴露在公网的 VPS,最稳妥的做法是先生成并测试 SSH 密钥登录,确认无误后再在配置文件里关闭密码验证,同时务必保留厂商提供的控制台作为应急入口。
📋 目录
  1. A 命令速用版
  2. B 为什么会这样
  3. C 分步处理
  4. D 怎么验证是否生效
  5. E 常见坑
A A

对于暴露在公网的 VPS,最稳妥的做法是先生成并测试 SSH 密钥登录,确认无误后再在配置文件里关闭密码验证,同时务必保留厂商提供的控制台作为应急入口。

先说结论:密钥登录能有效防止暴力破解,但操作顺序错了会导致把自己锁在门外。

  • 先判断:确认你有 VPS 厂商提供的网页控制台(VNC/Console)权限,以防配置失误无法连接。
  • 优先做:在本地生成密钥对并将公钥上传至服务器,确保新会话能免密登录。
  • 再验证:保持一个当前会话不断开,新开终端测试密钥登录成功后,再修改配置禁用密码。

命令速用版

# 1. 本地生成密钥(一路回车即可)
ssh-keygen -t ed25519

# 2. 上传公钥到服务器(需输入一次密码)
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@your_vps_ip

# 3. 测试连接
ssh -i ~/.ssh/id_ed25519 user@your_vps_ip

为什么会这样

密码登录依赖用户记忆的字符串,容易被字典攻击或暴力破解尝试;而 SSH 密钥基于非对称加密,私钥保存在本地且通常有 passphrase 保护,服务端只存储公钥。关闭密码验证后,攻击者即使猜解出用户名也无法通过密码字段尝试登录,能大幅减少日志中的暴力破解噪音。

分步处理

第一步:生成密钥对
在本地电脑终端运行 ssh-keygen -t ed25519,建议直接回车使用默认路径。如果使用 rsa,建议长度至少 4096 位。

第二步:部署公钥
使用 ssh-copy-id 命令自动写入,或手动将本地 ~/.ssh/id_ed25519.pub 内容追加到服务器 ~/.ssh/authorized_keys 文件中。注意服务器端 ~/.ssh 目录权限应为 700,authorized_keys 应为 600。

第三步:修改配置
编辑服务器 /etc/ssh/sshd_config 文件,找到或添加以下行:

如何设置 SSH 密钥登录禁用密码验证提升 VPS 安全性
PubkeyAuthentication yes
PasswordAuthentication no
PermitRootLogin prohibit-password

建议将 PermitRootLogin 设为 prohibit-passwordno,避免 root 直接登录。

第四步:重启服务
运行 sudo systemctl restart sshdsudo service ssh restart 使配置生效。

怎么验证是否生效

不要关闭当前已连接的 SSH 会话。新开一个终端窗口,尝试使用密钥登录:ssh -i ~/.ssh/id_ed25519 user@ip,应当无需密码直接进入。

接着尝试强制使用密码登录(临时修改本地命令或配置测试),应当被拒绝。查看服务器日志 /var/log/auth.log/var/log/secure,确认没有密码登录成功的记录。

常见坑

  • 权限错误:服务器端 ~/.sshauthorized_keys 权限过开放会导致 SSH 服务端忽略密钥,务必检查 chmod 设置。
  • SELinux 限制:部分开启 SELinux 的系统(如 CentOS)可能因上下文错误拒绝读取密钥文件,需检查审计日志。
  • 丢失访问权限:修改配置前务必确认网页控制台可用,一旦配置错误导致 SSH 服务无法启动或拒绝所有连接,只能通过控制台修复。
  • 多用户环境:如果服务器上有其他用户,确保他们的公钥也已部署,否则禁用密码后他们也无法登录。