专题 3 个子章节

SSH Key 免密登录:从原理到多设备配置

梦随乡兮 梦随乡兮 #SSH#运维#Linux#安全#VSCode

从 Windows 用户视角记录 SSH Key 的基本原理、密钥部署、ssh config、VS Code Remote-SSH、多设备授权与安全加固。

SSH Key 通过公钥和私钥验证登录身份。配置完成后,登录 VPS、使用 VS Code Remote-SSH 和运行自动化任务都不再依赖服务器密码,多台设备的权限也可以分别管理。

SSH Key 如何验证身份

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

  • 私钥(Private Key):保存在自己的电脑上,不能泄露。
  • 公钥(Public Key):放在服务器上,用来验证对应的私钥。

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

与密码登录的区别

登录方式 优点 缺点
密码 简单 易被爆破、不适合自动化、VS Code 会不断弹窗烦死人
SSH Key 安全、免密、顺滑 Windows 下配置时容易遇到编码和换行问题

SSH Key 免密登录:生成密钥与部署公钥

梦随乡兮 梦随乡兮 #SSH#运维#Linux#安全#VSCode

从 Windows 生成 ed25519 密钥,到把公钥安全、稳定地部署到 VPS,解决编码/换行导致的常见坑。

在 Windows 生成密钥

在本地电脑的 PowerShell 中执行:

ssh-keygen -t ed25519 -C "my-laptop"

一路回车即可。

  • 回车留空:登录时不用输入私钥密码。
  • 设置 Passphrase:私钥文件泄露后还能多一道保护,但每次使用密钥时需要解锁。

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

  • id_ed25519:私钥,需要妥善保管
  • id_ed25519.pub:需要部署到 VPS 的公钥

把公钥部署到 VPS

Windows PowerShell 使用管道传输文本时,可能带入不兼容的编码或换行符,导致 Linux 无法识别公钥。下面的脚本会读取并清理公钥内容,同时支持 2222 之类的非标准端口。

打开 PowerShell,把整段代码一次性粘贴进去执行:

& {
# --- 配置开始 ---
$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 Key 登录:配置 ssh config 与 VS Code Remote-SSH

梦随乡兮 梦随乡兮 #SSH#运维#Linux#安全#VSCode

把常用主机写进 ~/.ssh/config,配合 VS Code Remote-SSH 获得“像本地一样”的远程开发体验。

配置 ~/.ssh/config

把主机信息写入配置文件后,可以用一个固定别名登录,不必每次输入用户名、地址、密钥和端口。

在本地 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 后:

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

连接成功后,可以直接打开远程文件夹、保存代码和使用终端。网络短暂波动时,VS Code 也会尝试自动重连。

SSH Key 多设备管理与安全加固

梦随乡兮 梦随乡兮 #SSH#运维#Linux#安全

多台电脑如何安全授权与回收权限,以及在确认 key 可用后关闭密码登录,降低被爆破风险。

多设备分别生成密钥

不要把 A 电脑的私钥拷贝给 B 电脑。每台电脑分别生成一对密钥,只把各自的公钥部署到服务器:

  • A 电脑生成一对 Key,把公钥给 VPS。
  • B 电脑生成一对 Key,把公钥给 VPS。
  • VPS 的 authorized_keys 文件里会有两行记录。

如果 B 电脑丢失,只需从 VPS 的 authorized_keys 中删除 B 对应的公钥,A 电脑不受影响。

确认密钥可用后关闭密码登录

确认 SSH Key 能稳定登录后,可以关闭密码登录,减少密码被爆破的风险。修改前保持一个已经登录的终端会话,避免配置错误后无法进入服务器。

编辑 /etc/ssh/sshd_config

PasswordAuthentication no
PubkeyAuthentication yes

重启 SSH 服务:service ssh restart