首页文章 › SSH Key VPS

VPS SSH Key 认证配置完全指南
比密码更安全 — 2026

📅 2026年9月1日 ⏱ 阅读约12分钟 🏷 VPS · 安全

VPS SSH Key认证配置 — 服务器安全

📋 目录

  1. 什么是SSH Key认证?
  2. 为什么要用SSH Key代替密码?
  3. SSH Key认证的工作原理
  4. 生成SSH密钥对
  5. 将公钥上传至服务器
  6. 配置sshd_config提升安全性
  7. 禁用密码认证
  8. Windows用户配置指南
  9. 管理多个SSH密钥
  10. 常见问题排查
  11. 常见问题解答
  12. 总结

使用密码登录VPS在当今已越来越危险。全球的自动化机器人持续扫描监听22端口的服务器,并不间断地进行暴力破解攻击。最有效的解决方案是切换至SSH Key认证——没有密码可猜,暴力破解攻击便完全失效。

1. 什么是SSH Key认证?

SSH Key认证是一种使用加密密钥对验证身份的方法,由以下两部分组成:

连接时,服务器向客户端发送随机挑战(Challenge),您的计算机用私钥对其签名,服务器用已存储的公钥验证签名——整个过程不传输任何密码。

💡 说明:目前最常用的SSH密钥类型有两种:RSA 4096位Ed25519。2026年推荐使用Ed25519,因其密钥更短但安全性相当,且速度更快。

2. 为什么要用SSH Key代替密码?

对比项目密码登录SSH Key登录
暴力破解防护❌ 高风险✅ 无法暴力破解
使用便利性每次需输入密码✅ 无需输入(使用SSH Agent)
钓鱼攻击风险❌ 密码可能被窃取✅ 密钥从不经网络传输
多服务器管理记忆多个密码✅ 一个密钥管理多台服务器
审计与访问控制难以追溯登录来源✅ 可按密钥识别用户
中间人攻击防护❌ TOFU机制失效时有风险✅ 主机密钥固定有效防护

Shodan数据显示,开放SSH密码认证的服务器每天平均遭受数千次暴力破解尝试。切换至SSH Key认证并禁用密码登录,可立即关闭这一攻击入口。

3. SSH Key认证的工作原理

SSH Key认证采用非对称加密(Asymmetric Cryptography):

  1. 客户端通过22端口(或自定义端口)连接服务器。
  2. 服务器向客户端发送随机挑战数据
  3. 客户端使用私钥对挑战数据进行签名。
  4. 服务器用authorized_keys中存储的公钥验证签名。
  5. 验证通过——立即授予访问权限,全程不传输密码。
⚠️ 警告:私钥相当于您服务器的"主密钥"。一旦丢失或被盗,必须立即从所有服务器删除对应公钥,并重新生成密钥对。

4. 生成SSH密钥对

1打开终端(macOS/Linux)

生成Ed25519密钥(2026年推荐):

ssh-keygen -t ed25519 -C "[email protected]"

或使用RSA 4096位:

ssh-keygen -t rsa -b 4096 -C "[email protected]"
2回答生成提示
Enter file in which to save the key (/home/user/.ssh/id_ed25519): [按Enter使用默认路径]
Enter passphrase (empty for no passphrase): [输入密码短语或按Enter跳过]
Enter same passphrase again: [确认密码短语]

强烈建议设置密码短语(Passphrase)。即使私钥文件被盗,对方仍需知道密码短语才能使用。

3生成的文件
~/.ssh/id_ed25519      # 私钥 — 仅保存在您的计算机上
~/.ssh/id_ed25519.pub  # 公钥 — 上传至服务器

查看您的公钥:

cat ~/.ssh/id_ed25519.pub

5. 将公钥上传至服务器

方法一:使用ssh-copy-id(最简单)

ssh-copy-id -i ~/.ssh/id_ed25519.pub username@your-vps-ip

此命令最后一次使用密码登录,自动将公钥复制到服务器的~/.ssh/authorized_keys文件中。

方法二:手动复制

# 1. 查看公钥内容
cat ~/.ssh/id_ed25519.pub

# 2. 登录服务器
ssh username@your-vps-ip

# 3. 创建目录和文件(如不存在)
mkdir -p ~/.ssh
chmod 700 ~/.ssh

# 4. 粘贴公钥
echo "ssh-ed25519 AAAA...xxx [email protected]" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

测试密钥登录(保持现有会话不要关闭!)

# 打开新终端测试
ssh -i ~/.ssh/id_ed25519 username@your-vps-ip

如果无需输入密码(或仅需密码短语)即可登录,说明配置成功,可以继续下一步。

6. 配置sshd_config提升安全性

编辑服务器上的/etc/ssh/sshd_config文件:

sudo nano /etc/ssh/sshd_config

检查并设置以下选项:

# 确认公钥认证已启用
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

# 禁止直接以Root登录
PermitRootLogin no

# 限制认证尝试次数
MaxAuthTries 3

# 更改SSH端口(可选,减少机器人扫描噪音)
# Port 2222

# 禁用X11转发(如不需要)
X11Forwarding no
💡 提示:更改SSH端口(如改为2222)并不能显著提升安全性,但可以减少来自扫描22端口的机器人产生的日志噪音。若更改端口,请记得在防火墙中开放新端口。

7. 禁用密码认证

此步骤必须在确认SSH Key登录成功后才能执行,切勿先关闭现有会话!

⚠️ 关键警告:禁用密码认证之前,必须确认SSH Key登录正常工作。若操作顺序错误,您将被锁定在服务器之外。
# 在 /etc/ssh/sshd_config 中设置
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no

保存文件后重启SSH服务:

# Ubuntu/Debian
sudo systemctl restart ssh

# CentOS/Rocky Linux
sudo systemctl restart sshd

打开新终端验证仍可登录,并确认密码登录已被拒绝:

ssh -o PasswordAuthentication=yes username@your-vps-ip
# 预期输出:Permission denied (publickey)

8. Windows用户配置指南

方法一:PowerShell中的OpenSSH(Windows 10/11)

# 打开PowerShell运行
ssh-keygen -t ed25519

# 查看公钥
type $env:USERPROFILE\.ssh\id_ed25519.pub

# 上传至服务器
ssh-copy-id -i $env:USERPROFILE\.ssh\id_ed25519.pub username@your-vps-ip

方法二:PuTTY + PuTTYgen

  1. 打开PuTTYgen → 选择EdDSARSA 4096
  2. 点击Generate,移动鼠标生成随机性。
  3. 复制上方文本框中的公钥内容,粘贴到服务器的authorized_keys中。
  4. 将私钥保存为.ppk文件。
  5. 在PuTTY设置中:Connection → SSH → Auth → 选择.ppk文件。

9. 管理多个SSH密钥

管理多台服务器时,使用~/.ssh/config配置文件:

# ~/.ssh/config
Host my-vps-th
    HostName 203.0.113.10
    User ubuntu
    IdentityFile ~/.ssh/id_ed25519_vps_th

Host my-vps-sg
    HostName 198.51.100.20
    User root
    IdentityFile ~/.ssh/id_ed25519_vps_sg
    Port 2222

使用别名连接:

ssh my-vps-th
ssh my-vps-sg

SSH Agent — 避免重复输入密码短语

# 启动SSH Agent
eval "$(ssh-agent -s)"

# 将密钥加入Agent
ssh-add ~/.ssh/id_ed25519

# 查看已加载的密钥
ssh-add -l

10. 常见问题排查

问题原因解决方法
Permission denied (publickey)找不到密钥或权限设置错误chmod 700 ~/.sshchmod 600 ~/.ssh/authorized_keys
.ssh目录权限警告目录权限过于宽松chmod 700 ~/.ssh
主机密钥验证失败服务器主机密钥已更改(重装系统)ssh-keygen -R your-vps-ip
连接被拒绝SSH服务未运行或防火墙阻止检查sudo systemctl status ssh和防火墙规则
私钥权限警告私钥文件权限过于宽松chmod 600 ~/.ssh/id_ed25519

调试SSH连接

# 添加 -v 参数查看详细日志
ssh -v username@your-vps-ip

# -vvv 全面调试模式
ssh -vvv username@your-vps-ip

11. 常见问题解答(FAQ)

Q:什么是SSH Key认证?
SSH Key认证使用加密密钥对(公钥/私钥)代替密码验证身份。私钥对服务器发出的挑战进行数学签名,服务器用公钥验证签名——整个过程不传输密码,因此暴力破解完全无效。
Q:SSH Key比强密码更安全吗?
是的,安全得多。Ed25519密钥在数学上几乎不可能被暴力破解,远优于任何复杂度的密码。一旦禁用密码认证,自动扫描的机器人将完全无法登录您的服务器。
Q:丢失私钥怎么办?
如已禁用密码认证,丢失私钥将导致无法通过SSH登录。需通过VPS提供商的Web控制台或VNC访问服务器,然后向authorized_keys添加新公钥。请务必将私钥安全备份在多个位置(如加密U盘或密码管理器)。
Q:应该选择RSA还是Ed25519?
推荐Ed25519。它提供与RSA 4096位相当的安全性,但密钥更短、操作更快,所有现代Linux系统均支持。仅在连接不支持Ed25519的旧系统时才需使用RSA。
Q:Windows上如何设置SSH Key?
Windows 10/11内置OpenSSH,直接在PowerShell运行ssh-keygen -t ed25519生成密钥对,然后用ssh-copy-id上传公钥即可。也可以使用PuTTY配合PuTTYgen来生成和管理密钥。
Q:配置SSH Key后还需要做什么?
SSH Key配置完成后,建议:(1) 安装Fail2Ban,自动封锁多次尝试登录的IP地址;(2) 配置UFW防火墙,只开放必要端口;(3) 可选更改SSH端口减少机器人扫描;(4) 定期更新系统安全补丁。

12. 总结

配置SSH Key认证是获得VPS后应立即执行的基本安全步骤。主要优势包括:

准备部署安全可靠的VPS?

AsiaGB.com 提供泰国和新加坡 VPS,SSD 高速存储,99% 正常运行时间,专业中文支持。

查看VPS套餐