1. 目标
本文记录如何在 Windows 本机 使用 Ed25519 SSH 密钥,并通过 VSCode Remote-SSH 远程连接云服务器。
推荐使用:
ssh-keygen -t ed25519
原因:
- 安全性高
- 密钥文件更短
- 连接速度快
- 适合现代 Linux 云服务器
2. 前提条件
需要准备:
| 项目 | 示例 |
|---|---|
| 云服务器公网 IP | 123.123.123.123 |
| 服务器登录用户 | root / ubuntu |
| Windows 本机 | 已安装 OpenSSH |
| VSCode | 已安装 |
| VSCode 插件 | Remote – SSH |
VSCode 插件名称:
Remote - SSH
安装 Microsoft 官方插件即可。
3. 自定义名称生成 Ed25519 密钥
打开 Windows PowerShell,执行:
ssh-keygen -t ed25519 -C "cloud-server" -f $env:USERPROFILE\.ssh\cloud_server
参数说明:
| 参数 | 说明 |
|---|---|
-t ed25519 | 指定密钥算法为 Ed25519 |
-C "cloud-server" | 给密钥添加备注,方便识别 |
-f | 指定密钥保存路径和文件名 |
cloud_server | 自定义密钥名称 |
执行后会提示:
Enter passphrase:
这里可以选择:
| 选择 | 说明 |
|---|---|
| 直接回车 | 不设置密码短语,连接更方便 |
| 输入密码 | 更安全,私钥泄露后别人也不能直接用 |
个人电脑自用可以直接回车。
公司电脑或重要服务器建议设置密码短语。
4. 生成后的文件
命令执行完成后,会在当前用户的 .ssh 目录下生成两个文件:
C:\Users\你的用户名\.ssh\cloud_server
C:\Users\你的用户名\.ssh\cloud_server.pub
例如 Windows 用户名是 dbp:
C:\Users\dbp\.ssh\cloud_server
C:\Users\dbp\.ssh\cloud_server.pub
两个文件区别:
| 文件 | 作用 | 是否可以泄露 |
|---|---|---|
cloud_server | 私钥,本机登录服务器用 | 不可以 |
cloud_server.pub | 公钥,放到服务器上 | 可以 |
一定要注意:私钥文件不能发给别人,也不要上传到 GitHub。
5. 查看公钥内容
在 PowerShell 中执行:
type $env:USERPROFILE\.ssh\cloud_server.pub
会输出类似下面的一整行内容:
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIxxxxxxxxxxxxxxxx cloud-server
复制这一整行,后面要放到服务器中。
6. 将公钥添加到云服务器
先使用密码登录云服务器:
ssh root@服务器IP
例如:
ssh root@123.123.123.123
如果你的服务器用户是 ubuntu,则使用:
ssh ubuntu@123.123.123.123
登录服务器后,执行:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
nano ~/.ssh/authorized_keys
把刚才复制的公钥粘贴进去。
保存后执行:
chmod 600 ~/.ssh/authorized_keys
如果使用的是 nano 编辑器:
Ctrl + O 保存
Enter 确认
Ctrl + X 退出
7. 测试 SSH 密钥登录
回到 Windows PowerShell,执行:
ssh -i $env:USERPROFILE\.ssh\cloud_server root@服务器IP
例如:
ssh -i $env:USERPROFILE\.ssh\cloud_server root@123.123.123.123
如果服务器用户是 ubuntu:
ssh -i $env:USERPROFILE\.ssh\cloud_server ubuntu@123.123.123.123
如果可以直接登录,说明密钥配置成功。
8. 配置 SSH config 文件
打开 Windows 的 SSH 配置文件:
C:\Users\你的用户名\.ssh\config
如果没有 config 文件,就新建一个,注意没有后缀名。
写入以下内容:
Host cloud-server
HostName 123.123.123.123
User root
Port 22
IdentityFile C:\Users\你的用户名\.ssh\cloud_server
例如 Windows 用户名是 dbp:
Host cloud-server
HostName 123.123.123.123
User root
Port 22
IdentityFile C:\Users\dbp\.ssh\cloud_server
字段说明:
| 字段 | 说明 |
|---|---|
Host | 本地连接别名,可自定义 |
HostName | 云服务器公网 IP |
User | 服务器登录用户 |
Port | SSH 端口,默认是 22 |
IdentityFile | 本地私钥路径 |
9. 推荐配置模板
可以使用下面这个模板:
Host cloud-server
HostName 你的服务器公网IP
User root
Port 22
IdentityFile C:\Users\dbp\.ssh\cloud_server
ServerAliveInterval 60
ServerAliveCountMax 3
其中:
ServerAliveInterval 60
ServerAliveCountMax 3
作用是保持连接活跃,减少远程连接长时间不用后断开的情况。
10. VSCode 连接服务器
打开 VSCode,按:
Ctrl + Shift + P
输入:
Remote-SSH: Connect to Host
选择刚才配置的:
cloud-server
第一次连接时,VSCode 会提示选择服务器类型,选择:
Linux
然后 VSCode 会自动在服务器上安装 VS Code Server。
连接成功后,VSCode 左下角会显示类似:
SSH: cloud-server
11. 打开服务器目录
连接成功后,点击:
File -> Open Folder
常用目录:
/root
/home/ubuntu
/home/你的用户名
/opt
/www
/www/wwwroot
如果是 root 用户,常用:
/root
如果是普通用户,比如 ubuntu:
/home/ubuntu
12. 一个服务器对应一个密钥的推荐命名方式
如果你有多台云服务器,建议每台服务器使用不同密钥。
例如:
ssh-keygen -t ed25519 -C "aliyun-prod" -f $env:USERPROFILE\.ssh\aliyun_prod
ssh-keygen -t ed25519 -C "tencent-test" -f $env:USERPROFILE\.ssh\tencent_test
ssh-keygen -t ed25519 -C "huawei-dev" -f $env:USERPROFILE\.ssh\huawei_dev
对应 SSH 配置:
Host aliyun-prod
HostName 服务器IP
User root
Port 22
IdentityFile C:\Users\dbp\.ssh\aliyun_prod
Host tencent-test
HostName 服务器IP
User ubuntu
Port 22
IdentityFile C:\Users\dbp\.ssh\tencent_test
Host huawei-dev
HostName 服务器IP
User root
Port 22
IdentityFile C:\Users\dbp\.ssh\huawei_dev
这样做的好处:
- 每台服务器密钥独立
- 某个密钥泄露时,只影响一台服务器
- VSCode 连接时更清晰
- 后续迁移、删除、禁用都更方便
13. 常见问题排查
13.1 Permission denied publickey
报错示例:
Permission denied (publickey).
常见原因:
- 公钥没有放到服务器的
authorized_keys - 服务器用户名写错
- VSCode 配置的私钥路径写错
- 服务器
.ssh权限不正确
服务器上检查:
ls -la ~/.ssh
cat ~/.ssh/authorized_keys
修复权限:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
13.2 连接超时
报错类似:
Connection timed out
检查:
- 云服务器安全组是否放行 22 端口
- 服务器防火墙是否放行 SSH
- SSH 服务是否启动
- 公网 IP 是否正确
Ubuntu / Debian 检查 SSH 服务:
sudo systemctl status ssh
sudo systemctl restart ssh
CentOS / Rocky / AlmaLinux 检查 SSH 服务:
sudo systemctl status sshd
sudo systemctl restart sshd
13.3 私钥路径错误
Windows 路径示例:
IdentityFile C:\Users\dbp\.ssh\cloud_server
也可以写:
IdentityFile ~/.ssh/cloud_server
如果路径中有空格,可以加引号:
IdentityFile "C:\Users\dbp\.ssh\cloud server"
不过不建议密钥文件名带空格。
13.4 服务器用户写错
如果服务器实际用户是 ubuntu,但配置成了:
User root
就可能登录失败。
应改成:
User ubuntu
14. 不建议使用的密钥算法
不推荐:
ssh-keygen -t dsa
也不优先推荐:
ssh-keygen -t ecdsa
推荐优先级:
| 算法 | 推荐度 | 说明 |
|---|---|---|
ed25519 | 高 | 推荐首选 |
rsa -b 4096 | 中高 | 老服务器兼容性好 |
ecdsa | 一般 | 不优先使用 |
dsa | 不推荐 | 已过时 |
如果服务器太老,不支持 Ed25519,可以改用 RSA 4096:
ssh-keygen -t rsa -b 4096 -C "cloud-server" -f $env:USERPROFILE\.ssh\cloud_server_rsa
15. 最终流程总结
1. Windows 生成 Ed25519 密钥
↓
2. 自定义密钥名称,例如 cloud_server
↓
3. 将 cloud_server.pub 公钥复制到服务器 ~/.ssh/authorized_keys
↓
4. 本地用 ssh -i 测试连接
↓
5. 配置 C:\Users\用户名\.ssh\config
↓
6. VSCode 安装 Remote - SSH 插件
↓
7. VSCode 连接 cloud-server
↓
8. 像本地一样编辑服务器文件
16. 常用命令汇总
生成自定义名称 Ed25519 密钥
ssh-keygen -t ed25519 -C "cloud-server" -f $env:USERPROFILE\.ssh\cloud_server
查看公钥
type $env:USERPROFILE\.ssh\cloud_server.pub
测试密钥登录
ssh -i $env:USERPROFILE\.ssh\cloud_server root@服务器IP
服务器创建 .ssh 目录
mkdir -p ~/.ssh
chmod 700 ~/.ssh
编辑公钥文件
nano ~/.ssh/authorized_keys
设置公钥文件权限
chmod 600 ~/.ssh/authorized_keys
VSCode SSH 配置模板
Host cloud-server
HostName 你的服务器公网IP
User root
Port 22
IdentityFile C:\Users\dbp\.ssh\cloud_server
ServerAliveInterval 60
ServerAliveCountMax 3
17. 我的推荐实践
个人使用时,建议这样做:
ssh-keygen -t ed25519 -C "cloud-server" -f $env:USERPROFILE\.ssh\cloud_server
然后 VSCode 配置:
Host cloud-server
HostName 你的服务器公网IP
User root
Port 22
IdentityFile C:\Users\dbp\.ssh\cloud_server
一句话总结:
SSH 密钥优先使用 Ed25519,通过
-f参数自定义密钥名称,然后在 VSCode 的 SSH config 中用IdentityFile指定对应私钥。