VSCode 通过 SSH 密钥远程连接云服务器教程

1. 目标

本文记录如何在 Windows 本机 使用 Ed25519 SSH 密钥,并通过 VSCode Remote-SSH 远程连接云服务器。

推荐使用:

ssh-keygen -t ed25519

原因:

  • 安全性高
  • 密钥文件更短
  • 连接速度快
  • 适合现代 Linux 云服务器

2. 前提条件

需要准备:

项目示例
云服务器公网 IP123.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服务器登录用户
PortSSH 端口,默认是 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).

常见原因:

  1. 公钥没有放到服务器的 authorized_keys
  2. 服务器用户名写错
  3. VSCode 配置的私钥路径写错
  4. 服务器 .ssh 权限不正确

服务器上检查:

ls -la ~/.ssh
cat ~/.ssh/authorized_keys

修复权限:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

13.2 连接超时

报错类似:

Connection timed out

检查:

  1. 云服务器安全组是否放行 22 端口
  2. 服务器防火墙是否放行 SSH
  3. SSH 服务是否启动
  4. 公网 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 指定对应私钥。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇