阿里云 ECS + Frp + VSCode Remote-SSH 远程开发全指南
1 | # 阿里云 ECS + Frp + VSCode Remote-SSH 远程开发全指南 |
🛠️ 1. 准备工作
1.1 硬件/资源准备
| 角色 | 设备描述 | 需求 |
|---|---|---|
| 中转服务器 | 阿里云 ECS 实例 | 拥有 公网 IP,带宽建议 3M+ (主要影响代码同步速度,不影响终端响应) |
| 被控端 (内网) | 家中/公司的高性能 PC | 安装 Linux (Ubuntu/CentOS) 或 Windows (需启用 OpenSSH Server),无公网 IP |
| 访问端 | 随身笔记本 (Win/Mac) | 安装 VSCode, OpenSSH 客户端 |
1.2 软件版本说明
[!WARNING] 注意版本兼容性
本教程基于 Frp v0.52.0+ 编写,使用新的.toml配置文件格式。旧版本(v0.51 以前)使用.ini格式,不通用。
☁️ 2. 阿里云 ECS 配置 (服务端)
2.1 购买与系统选择
- 推荐系统:Ubuntu 20.04/22.04 LTS (轻量,社区支持好)。
- 计费模式:若仅临时使用,可选择“按量付费”,用完即停机(注意选择“停机不收费”模式)。
2.2 配置安全组 (防火墙) [关键步骤]
阿里云默认关闭大部分端口,必须手动放行。
- 登录阿里云控制台 -> ECS 实例 -> 安全组 -> 配置规则。
- 入方向 添加以下规则:
| 端口范围 | 协议 | 授权对象 | 说明 |
|---|---|---|---|
| 22 | TCP | 0.0.0.0/0 | 用于 SSH 连接 ECS 本身 |
| 7000 | TCP | 0.0.0.0/0 | Frp 服务端通信端口 (Bind Port) |
| 7500 | TCP | 0.0.0.0/0 | Frp Dashboard 管理面板 (可选) |
| 6000 | TCP | 0.0.0.0/0 | 内网机器 SSH 穿透端口 (用于 VSCode 连接) |
2.3 安装 Frps (Server)
SSH 登录到阿里云 ECS,执行以下命令:
1 | # 1. 下载 Frp (以 amd64 为例,请去 GitHub Release 页面确认最新版本) |
frps.toml 内容如下:
Ini, TOML
1 | # frps.toml |
2.4 设置开机自启 (Systemd)
创建服务文件:sudo vim /etc/systemd/system/frps.service
Ini, TOML
1 | [Unit] |
启动并启用服务:
Bash
1 | sudo systemctl daemon-reload |
🏠 3. 内网机器配置 (被控端)
3.1 开启 SSH 服务
确保内网机器已安装并运行 SSH Server。
Bash
1 | sudo apt update |
3.2 安装 Frpc (Client)
步骤与服务端类似,下载同版本的 Frp 到内网机器。
Bash
1 | # 假设解压到了 /usr/local/frp |
frpc.toml 内容如下:
Ini, TOML
1 | # frpc.toml |
3.3 设置开机自启
创建服务文件:sudo vim /etc/systemd/system/frpc.service
Ini, TOML
1 | [Unit] |
启动服务:
Bash
1 | sudo systemctl enable frpc |
[!TIP] 验证 此时,你应该可以通过
ssh -p 6000 内网用户名@阿里云公网IP连接到内网机器了。如果通了,再进行下一步。
💻 4. VSCode Remote-SSH 配置 (访问端)
这是实现“像在本地一样开发”的关键步骤。
4.1 配置 SSH 免密登录 (强烈推荐)
为了避免每次打开 VSCode 都要输入密码,建议配置 SSH Key。
在访问端(笔记本)生成密钥(如果已有可跳过):
Bash
1
2ssh-keygen -t rsa -b 4096
# 一路回车,默认生成在 ~/.ssh/id_rsa将公钥上传到内网机器: 由于我们已经打通了 Frp,可以直接通过 Frp 端口上传。
Bash
1
2# 在笔记本终端执行
ssh-copy-id -p 6000 内网用户名@阿里云公网IP如果 Windows 没有 ssh-copy-id,可以手动复制
id_rsa.pub的内容,粘贴到内网机器的~/.ssh/authorized_keys文件中。
4.2 配置 VSCode
安装插件:Remote - SSH (Microsoft 官方)。
点击左下角绿色图标 -> Open SSH Configuration File -> 选择第一个配置文件(通常是
~/.ssh/config)。添加如下配置:
代码段
1 | # 阿里云 ECS 直连 (可选,用于管理 ECS) |
4.3 开始远程开发
点击 VSCode 左下角绿色图标 -> Connect to Host。
选择
home-pc-dev。VSCode 会在远程机器安装 Server 端,连接成功后,打开文件夹即为内网机器的文件系统。
🛡️ 5. 进阶:STCP 模式 (更安全)
[!NOTE] 为什么需要 STCP? 普通 TCP 模式下,
remotePort = 6000是暴露在公网的,任何人只要知道端口和密码都有可能尝试攻击。STCP (Secret TCP) 模式要求访问端也运行一个 frpc,只有持有密钥的客户端才能连接,不在公网暴露端口。
5.1 修改内网机器 (frpc.toml)
Ini, TOML
1 | [[proxies]] |
注意:不需要 remotePort。
5.2 笔记本端安装 Frpc
在你的笔记本(访问端)也下载 Frp,配置 frpc-visitor.toml:
Ini, TOML
1 | serverAddr = "x.x.x.x" |
在笔记本启动 frpc:./frpc -c frpc-visitor.toml
5.3 修改 SSH Config
此时,SSH 连接的目标变成了笔记本本地。
代码段
1 | Host home-pc-stcp |
❓ 常见问题排查 (Troubleshooting)
Q1: 连接超时 (Connection Timed Out)
检查阿里云安全组:确认 7000 和 6000 端口是否已在“入方向”放行。
检查防火墙:ECS 内部防火墙 (
ufw status) 或内网机器防火墙是否拦截了端口。
Q2: 权限拒绝 (Permission Denied)
SSH 密钥权限:内网机器的
~/.ssh权限应为 700,authorized_keys权限应为 600。用户错误:确保 SSH Config 中的
User是内网机器的用户名,而不是阿里云 ECS 的root。
Q3: VSCode 一直显示 “Installing VS Code Server”
可能是内网机器无法连接 VSCode 更新服务器。
解决:在内网机器手动下载 VSCode Server,或确保内网机器能访问外网。
Q4: 端口被占用
如果是 ECS 上报错,检查是否有其他进程占用了 6000:
sudo lsof -i :6000。如果是 frpc 报错 “port already used”,说明端口冲突或上一次 frpc 没关干净。