SSH Key(公钥/私钥认证)是现代服务器运维中最常用、最安全、最舒服的一种登录方式。

配置成功后,你可以:

本文将以 “Windows 用户视角” 出发,讲清楚 SSH Key 的原理、避坑配置、多设备实践以及 VS Code 联动。

一、SSH Key 是什么?为什么要用它?

SSH Key 是通过 一对密钥文件(私钥 + 公钥) 来验证身份的。

验证时不会传输私钥,而是通过加密握手确认“你确实拥有私钥”。

相比传统密码登录:

登录方式优点缺点
密码简单易被爆破、不适合自动化、VS Code 会不断弹窗烦死人
SSH Key安全、免密、顺滑Windows 下配置容易遇到编码坑 (本文解决)

一句话:SSH Key = 更安全 + 更省心 + 更专业

二、生成密钥 (本地 Windows)

在你的 本地电脑 PowerShell 中执行(推荐使用 ed25519 算法,比 RSA 更快更安全):

PLAINTEXT
ssh-keygen -t ed25519 -C "my-laptop"
点击展开查看更多

一路回车即可。

生成后,文件通常在 C:\Users\用户名\.ssh\

三、部署公钥到 VPS (一键直连版)

⚠️ 高能预警:Windows PowerShell 的管道 (|) 传输文本时,经常会带入 UTF-16 编码或特殊的换行符,导致 Linux 服务器识别为乱码,出现“明明配了 Key 却还是要输密码”的经典 Bug。

为了彻底解决这个问题,这里使用懒人一键直连方案。不需要新建脚本文件!直接打开 PowerShell,复制下面这整段代码,一次性粘贴进去按回车即可。

这段代码会自动处理编码,并且支持非标准端口(如 2222)。

PLAINTEXT
& {
    # --- 配置开始 ---
    $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 文件(没有后缀名):

PLAINTEXT
Host my-vps
    HostName 1.2.3.4
    User root
    IdentityFile ~/.ssh/id_ed25519
    # 如果端口不是 22,加一行: Port 2222
    Port 2222
点击展开查看更多

以后你只需要输入:

PLAINTEXT
ssh my-vps
点击展开查看更多

即可秒进服务器!

五、VS Code Remote-SSH 终极开发体验

配置好 SSH Key 和 Config 后,VS Code 的体验将发生质变:

  1. 安装扩展:Remote - SSH
  2. 点击左下角绿色图标 >< -> Connect to Host…
  3. 选择刚才配置的 my-vps

效果:

六、进阶:多设备与安全性

1. 多台电脑怎么管?(A/B/C 电脑)

原则:认钥匙不认人。 不要把 A 电脑的私钥拷贝给 B 电脑(不安全)。

哪天 B 电脑丢了?去 VPS 上删掉 B 的那一行公钥,B 就再也进不来了,A 不受影响。

2. 关闭密码登录 (Security Hardening)

当确认 SSH Key 能稳定登录后,建议关闭密码登录,彻底封死暴力破解的路径。

编辑 /etc/ssh/sshd_config

PLAINTEXT
PasswordAuthentication no
PubkeyAuthentication yes
点击展开查看更多

重启 SSH 服务:service ssh restart

七、小结

SSH Key 登录是每个开发者、运维人员都应该掌握的基础设施。

你未来如果做:

这套配置都将是你高效工作的基石。

版权声明

作者: 梦随乡兮

链接: https://imsxx.com/ssh-key-auth-guide/

许可证: CC BY-NC-SA 4.0

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。请注明出处、非商业性使用,并以相同方式共享。

开始搜索

输入关键词搜索文章内容

↑↓
ESC
⌘K 快捷键