如何在 CN2 VPS 上配置 SSH 密钥登录禁止密码认证

文章导读
在 CN2 VPS 上配置 SSH 密钥登录并禁止密码认证,是提升服务器安全基线的标准操作,适用于所有生产环境 Linux 主机。操作前必须保留一个已连接的 SSH 会话用于应急,防止配置错误导致无法远程登录。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 常见问题
A A

在 CN2 VPS 上配置 SSH 密钥登录并禁止密码认证,是提升服务器安全基线的标准操作,适用于所有生产环境 Linux 主机。操作前必须保留一个已连接的 SSH 会话用于应急,防止配置错误导致无法远程登录。

先说结论:启用密钥认证并关闭密码认证能有效防御暴力破解,但配置失误会导致管理员被锁在门外。

  • 适合所有通过 SSH 管理的 Linux VPS,尤其是暴露公网 IP 的 CN2 线路服务器。
  • 先准备本地 SSH 密钥对,并确保拥有 root 或 sudo 权限。
  • 验收时需用新终端测试密钥登录,确认成功后再关闭当前会话。

命令速用版

以下命令适用于大多数 Linux 发行版,直接在本地终端和 VPS 终端执行。

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

# 2. 将公钥上传到 VPS(替换 user 和 IP)
ssh-copy-id user@your_vps_ip

# 3. VPS 上编辑配置文件
sudo vim /etc/ssh/sshd_config

# 4. 修改后重载服务
sudo systemctl restart sshd

为什么会这样

密码认证容易受到暴力破解攻击,密钥认证基于非对称加密,安全性更高。CN2 VPS 通常拥有较好的网络连通性,也更容易被自动化扫描工具发现,关闭密码认证能直接阻断基于密码字典的入侵尝试。

分步处理

按顺序执行以下步骤,每步完成后检查状态,确保不会中断连接。

步骤 1:生成本地密钥对
在本地电脑终端运行 ssh-keygen -t ed25519,默认路径为 ~/.ssh/id_ed25519。公钥文件后缀为 .pub,私钥无后缀,私钥严禁泄露。

步骤 2:上传公钥到 VPS
使用 ssh-copy-id user@your_vps_ip 命令,或手动将本地 .pub 文件内容追加到 VPS 的 ~/.ssh/authorized_keys 文件中。确保 VPS 上 ~/.ssh 目录权限为 700,authorized_keys 文件权限为 600。

步骤 3:修改 SSH 配置
登录 VPS,编辑 /etc/ssh/sshd_config。找到或添加以下配置项:
PubkeyAuthentication yes
PasswordAuthentication no
PermitRootLogin prohibit-password(若允许 root 密钥登录)
修改前建议备份原文件:sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

步骤 4:重载 SSH 服务
执行 sudo systemctl restart sshdsudo service ssh restart。此时不要关闭当前已连接的 SSH 窗口。

如何在 CN2 VPS 上配置 SSH 密钥登录禁止密码认证

怎么验证是否生效

打开一个新的本地终端窗口,尝试使用密钥登录 VPS。若登录成功且无需输入密码,说明密钥认证生效。随后尝试使用密码登录(可在配置改回前测试,或查看日志),确认密码认证被拒绝。

查看 VPS 登录日志 /var/log/auth.log(Debian/Ubuntu)或 /var/log/secure(CentOS),确认没有密码认证成功的记录。若出现 Permission denied (publickey) 且你未提供密钥,说明密码认证已关闭。

常见坑

配置 SSH 密钥登录时,权限设置错误是最常见的问题。~/.ssh 目录权限不能超过 700,authorized_keys 文件权限不能超过 600,否则 SSH 服务端会忽略密钥文件。SELinux 开启的环境中,可能需要恢复上下文 restorecon -R -v ~/.ssh

最严重的风险是配置错误导致锁死。务必在修改配置并重启服务后,保持原 SSH 会话不关闭,新开窗口测试成功后再退出原会话。若新窗口无法登录,可直接在原会话中还原配置文件并重启服务。

常见问题

丢失了私钥还能登录吗?

不能,必须通过 VPS 服务商的控制台 VNC 或救援模式重置密码或重新注入密钥。

禁止密码后 root 用户能登录吗?

取决于 PermitRootLogin 配置,建议设置为 prohibit-password 仅允许密钥登录 root。

修改端口有必要吗?

修改 SSH 端口可以减少日志中的扫描噪音,但不能替代密钥认证,建议配合密钥认证一起使用。