SSH Key(公钥/私钥认证)是现代服务器运维中最常用、最安全、最舒服的一种登录方式。
配置成功后,你可以:
- 🚀 登录 VPS 不再输入密码
- 💻 VS Code Remote-SSH 一键进入开发环境
- 🔄 自动化任务(如 git 拉取、自动部署)不再受密码阻碍
- 🔐 多设备管理账号更方便、安全可控
本文将以 “Windows 用户视角” 出发,讲清楚 SSH Key 的原理、避坑配置、多设备实践以及 VS Code 联动。
一、SSH Key 是什么?为什么要用它?
SSH Key 是通过 一对密钥文件(私钥 + 公钥) 来验证身份的。
- 私钥 (Private Key):保存在你自己电脑上,绝不能泄露(相当于你的指纹)。
- 公钥 (Public Key):放到服务器上,允许对应私钥持有者访问(相当于指纹锁存的指纹数据)。
验证时不会传输私钥,而是通过加密握手确认“你确实拥有私钥”。
相比传统密码登录:
| 登录方式 | 优点 | 缺点 |
|---|---|---|
| 密码 | 简单 | 易被爆破、不适合自动化、VS Code 会不断弹窗烦死人 |
| SSH Key | 安全、免密、顺滑 | Windows 下配置容易遇到编码坑 (本文解决) |
一句话:SSH Key = 更安全 + 更省心 + 更专业。
二、生成密钥 (本地 Windows)
在你的 本地电脑 PowerShell 中执行(推荐使用 ed25519 算法,比 RSA 更快更安全):
ssh-keygen -t ed25519 -C "my-laptop"一路回车即可。
- 关于 Passphrase:
- 回车留空:为了极致的方便,登录完全免密。
- 设置密码:如果你的电脑经常借给别人用,或者担心私钥文件被盗,可以设个密码(双重保险)。
生成后,文件通常在 C:\Users\用户名\.ssh\:
id_ed25519:私钥(保管好!)id_ed25519.pub:公钥(我们要发给 VPS)
三、部署公钥到 VPS (一键直连版)
⚠️ 高能预警:Windows PowerShell 的管道 (|) 传输文本时,经常会带入 UTF-16 编码或特殊的换行符,导致 Linux 服务器识别为乱码,出现“明明配了 Key 却还是要输密码”的经典 Bug。
为了彻底解决这个问题,这里使用懒人一键直连方案。不需要新建脚本文件!直接打开 PowerShell,复制下面这整段代码,一次性粘贴进去按回车即可。
这段代码会自动处理编码,并且支持非标准端口(如 2222)。
& {
# --- 配置开始 ---
$ErrorActionPreference = "Stop"
$KeyPath = "$env:USERPROFILE\.ssh\id_ed25519"
# 1. 检查或生成密钥 (如不存在则生成)
if (-not (Test-Path $KeyPath)) {
Write-Host "正在生成密钥..." -ForegroundColor Yellow
# -N "" 表示无密码,为了极致快;如需密码去掉 -N "" 即可
ssh-keygen -t ed25519 -f $KeyPath -C "windows_auto_key" -N ""
} else {
Write-Host "✅ 检测到已有密钥,准备复用" -ForegroundColor Green
}
# 2. 读取公钥 (核心:内存清洗格式,防止乱码)
$Pub = (Get-Content "$KeyPath.pub" -Raw).Trim()
# 3. 交互输入地址 (支持端口)
Write-Host "`n请输入 VPS 连接信息:" -ForegroundColor Cyan
Write-Host " - 默认端口(22)直接输:[email protected]" -ForegroundColor Gray
Write-Host " - 非标准端口请加参数:-p 2222 [email protected]" -ForegroundColor Gray
$RawInput = Read-Host "> "
if (-not $RawInput) { Write-Error "地址不能为空"; return }
# 关键处理:按空格分割参数,确保 -p 2222 能被 SSH 正确识别
$TargetArgs = $RawInput -split ' '
Write-Host "`n正在连接服务器上传公钥..." -ForegroundColor Cyan
Write-Host "⚠️ 注意:接下来请输入一次服务器的【登录密码】" -ForegroundColor Yellow
# 执行 SSH 组合拳
ssh $TargetArgs "mkdir -p ~/.ssh && echo '$Pub' >> ~/.ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys"
if ($?) {
Write-Host "`n🎉 配置成功!" -ForegroundColor Green
Write-Host "请尝试直接登录: ssh $RawInput" -ForegroundColor Gray
}
}四、配置 ~/.ssh/config (提升幸福感)
每次登录都要打 ssh [email protected] 太麻烦?配置别名吧。
在本地 C:\Users\用户名\.ssh\ 下新建或编辑 config 文件(没有后缀名):
Host my-vps
HostName 1.2.3.4
User root
IdentityFile ~/.ssh/id_ed25519
# 如果端口不是 22,加一行: Port 2222
Port 2222以后你只需要输入:
ssh my-vps即可秒进服务器!
五、VS Code Remote-SSH 终极开发体验
配置好 SSH Key 和 Config 后,VS Code 的体验将发生质变:
- 安装扩展:Remote - SSH。
- 点击左下角绿色图标
><-> Connect to Host… - 选择刚才配置的
my-vps。
效果:
- ✅ 不再弹窗:完全不会再跳出输入密码的框框。
- ✅ 如丝般顺滑:打开远程文件夹、保存代码、运行终端,体验和本地开发一模一样。
- ✅ 自动重连:网络波动断开后,VS Code 会自动静默重连,无需人工干预。
六、进阶:多设备与安全性
1. 多台电脑怎么管?(A/B/C 电脑)
原则:认钥匙不认人。 不要把 A 电脑的私钥拷贝给 B 电脑(不安全)。
- A 电脑生成一对 Key,把公钥给 VPS。
- B 电脑生成一对 Key,把公钥给 VPS。
- VPS 的
authorized_keys文件里会有两行记录。
哪天 B 电脑丢了?去 VPS 上删掉 B 的那一行公钥,B 就再也进不来了,A 不受影响。
2. 关闭密码登录 (Security Hardening)
当确认 SSH Key 能稳定登录后,建议关闭密码登录,彻底封死暴力破解的路径。
编辑 /etc/ssh/sshd_config:
PasswordAuthentication no
PubkeyAuthentication yes重启 SSH 服务:service ssh restart。
七、小结
SSH Key 登录是每个开发者、运维人员都应该掌握的基础设施。
你未来如果做:
- WordPress 插件开发 (直接在服务器上改代码调试)
- Python 数据脚本
- CI/CD 自动部署 (Github Actions 需要私钥)
这套配置都将是你高效工作的基石。
