前情提要

本地 Windows 已经保存了云服务器原来的 SSH 私钥。

重装云服务器 Linux 系统时,重新选择了原来的密钥对;同时删除了 VS Code Remote-SSH 配置文件:

C:\Users\20720\.ssh\config中的全部内容。

因此需要重新建立 VS Code 与云服务器的 SSH 连接。

在这里插入图片描述

解决流程

按下面步骤操作:

1. 重装服务器时重新绑定原来的密钥对

云服务器重装时,选择之前使用的同一密钥对

原因: 重装系统后,服务器中的 SSH 公钥授权通常会重新生成/配置。重新绑定原密钥对后,服务器会重新保存与 Windows 本机私钥相匹配的登录公钥,从而允许该私钥登录。

2. Windows PowerShell 删除旧服务器 Host Key

执行:

ssh-keygen -R 服务器IP

原因: 服务器重装后,服务器自己的 SSH Host Key 通常会重新生成,而 Windows 的:

C:\Users\20720\.ssh\私钥

仍保存着重装前的服务器指纹,因此需要删除旧记录。

这里的 Host Key 是服务器用于证明自己身份的密钥,与用于登录服务器的“本机私钥 + 服务器 authorized_keys 中的公钥”不是同一个东西。

3. 使用原私钥测试 SSH 登录

在本地win的 PowerShell 执行:

ssh -i C:\Users\20720\.ssh\私钥文件名 root@服务器IP

第一次连接新系统时,如果出现:

Are you sure you want to continue connecting?

输入:

yes

如果能够成功登录,说明以下部分都正常:

服务器 SSH 服务       ✅
服务器登录公钥        ✅
Windows 本机私钥      ✅
root 公钥登录         ✅

4. 在 VS Code 中重新添加服务器

执行:

Ctrl + Shift + P
→ Remote-SSH: Add New SSH Host...

输入:

ssh root@服务器IP

然后选择配置文件:

C:\Users\20720\.ssh\config

VS Code 会自动生成类似:

Host 服务器IP
    HostName 服务器IP
    User root

但此时可能仍然出现:

Permission denied (publickey)

原因: VS Code 此时知道服务器 IP 和用户名,但不一定知道应该使用 Windows 中的哪一个私钥。

5. 在 config 中指定私钥

在对应服务器配置下面增加:

IdentityFile C:/Users/20720/.ssh/私钥文件名

最终最简配置为:

Host 服务器IP
    HostName 服务器IP
    User root
    IdentityFile C:/Users/20720/.ssh/私钥文件名

然后回到 VS Code:

Ctrl + Shift + P
→ Remote-SSH: Connect to Host...
→ 选择:服务器IP

即可连接。

核心原理

服务器重装
→ 重新绑定原密钥对
→ 让新系统重新认可本机私钥对应的登录公钥

服务器重装后 Host Key 改变
→ ssh-keygen -R 服务器IP
→ 删除 Windows 保存的旧服务器指纹

PowerShell 使用 -i 可以手动指定私钥
→ VS Code 没有手动写 -i
→ 在 config 中使用 IdentityFile 指定私钥

一句话总结:

重新绑定原密钥对解决“服务器认不认识你的私钥”;ssh-keygen -R 解决“本机认不认识重装后的服务器”;IdentityFile 解决“VS Code 到底应该使用哪一把私钥”。

更多推荐