1
2
3
4
5
6
7
8
9
# 阿里云 ECS + Frp + VSCode Remote-SSH 远程开发全指南

> [!abstract] 简介
> 本文档详细记录了如何利用 **阿里云 ECS** 作为中转服务器,配合 **Frp** 内网穿透工具,实现外网环境下通过 **VSCode Remote-SSH** 访问并开发处于内网(如家中/公司)的高性能主机。
>
> **核心优势**:
> * **低成本**:使用按量付费或特惠 ECS,成本极低。
> * **高性能**:利用内网主机的算力(如 GPU),摆脱笔记本性能焦虑。
> * **安全性**:通过 STCP 模式或白名单限制,保障内网安全。

🛠️ 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 配置安全组 (防火墙) [关键步骤]

阿里云默认关闭大部分端口,必须手动放行。

  1. 登录阿里云控制台 -> ECS 实例 -> 安全组 -> 配置规则
  2. 入方向 添加以下规则:
端口范围 协议 授权对象 说明
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
2
3
4
5
6
7
8
9
10
# 1. 下载 Frp (以 amd64 为例,请去 GitHub Release 页面确认最新版本)
wget [https://github.com/fatedier/frp/releases/download/v0.58.1/frp_0.58.1_linux_amd64.tar.gz](https://github.com/fatedier/frp/releases/download/v0.58.1/frp_0.58.1_linux_amd64.tar.gz)

# 2. 解压并重命名
tar -zxvf frp_0.58.1_linux_amd64.tar.gz
sudo mv frp_0.58.1_linux_amd64 /usr/local/frp

# 3. 配置文件
cd /usr/local/frp
sudo vim frps.toml

frps.toml 内容如下:

Ini, TOML

1
2
3
4
5
6
7
8
9
10
11
12
13
# frps.toml
bindPort = 7000 # 服务端与客户端通信端口

# 身份验证(一定要设置,防止被白嫖)
auth.method = "token"
auth.token = "YourStrongPassword123"

# Dashboard (可选,用于查看连接状态)
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "admin123"

2.4 设置开机自启 (Systemd)

创建服务文件:sudo vim /etc/systemd/system/frps.service

Ini, TOML

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[Unit]
Description=Frp Server Service
After=network.target

[Service]
Type=simple
User=root
Restart=on-failure
RestartSec=5s
ExecStart=/usr/local/frp/frps -c /usr/local/frp/frps.toml

[Install]
WantedBy=multi-user.target

启动并启用服务:

Bash

1
2
3
4
5
sudo systemctl daemon-reload
sudo systemctl enable frps
sudo systemctl start frps
sudo systemctl status frps # 检查状态,应为 Active (running)


🏠 3. 内网机器配置 (被控端)

3.1 开启 SSH 服务

确保内网机器已安装并运行 SSH Server。

Bash

1
2
3
4
5
sudo apt update
sudo apt install openssh-server
sudo systemctl enable ssh
sudo systemctl start ssh

3.2 安装 Frpc (Client)

步骤与服务端类似,下载同版本的 Frp 到内网机器。

Bash

1
2
3
# 假设解压到了 /usr/local/frp
cd /usr/local/frp
sudo vim frpc.toml

frpc.toml 内容如下:

Ini, TOML

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# frpc.toml
serverAddr = "x.x.x.x" # 阿里云 ECS 的公网 IP
serverPort = 7000 # 对应 frps.toml 中的 bindPort

auth.method = "token"
auth.token = "YourStrongPassword123" # 必须与服务端一致

# 映射 SSH 服务
[[proxies]]
name = "home-pc-ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22 # 内网机器的 SSH 端口
remotePort = 6000 # 阿里云 ECS 上暴露的端口

3.3 设置开机自启

创建服务文件:sudo vim /etc/systemd/system/frpc.service

Ini, TOML

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[Unit]
Description=Frp Client Service
After=network.target
Wants=network.target

[Service]
Type=simple
User=root
Restart=on-failure
RestartSec=5s
ExecStart=/usr/local/frp/frpc -c /usr/local/frp/frpc.toml

[Install]
WantedBy=multi-user.target

启动服务:

Bash

1
2
sudo systemctl enable frpc
sudo systemctl start frpc

[!TIP] 验证 此时,你应该可以通过 ssh -p 6000 内网用户名@阿里云公网IP 连接到内网机器了。如果通了,再进行下一步。


💻 4. VSCode Remote-SSH 配置 (访问端)

这是实现“像在本地一样开发”的关键步骤。

4.1 配置 SSH 免密登录 (强烈推荐)

为了避免每次打开 VSCode 都要输入密码,建议配置 SSH Key。

  1. 在访问端(笔记本)生成密钥(如果已有可跳过):

    Bash

    1
    2
    ssh-keygen -t rsa -b 4096
    # 一路回车,默认生成在 ~/.ssh/id_rsa
  2. 将公钥上传到内网机器: 由于我们已经打通了 Frp,可以直接通过 Frp 端口上传。

    Bash

    1
    2
    # 在笔记本终端执行
    ssh-copy-id -p 6000 内网用户名@阿里云公网IP

    如果 Windows 没有 ssh-copy-id,可以手动复制 id_rsa.pub 的内容,粘贴到内网机器的 ~/.ssh/authorized_keys 文件中。

4.2 配置 VSCode

  1. 安装插件:Remote - SSH (Microsoft 官方)。

  2. 点击左下角绿色图标 -> Open SSH Configuration File -> 选择第一个配置文件(通常是 ~/.ssh/config)。

  3. 添加如下配置:

代码段

1
2
3
4
5
6
7
8
9
10
11
12
13
# 阿里云 ECS 直连 (可选,用于管理 ECS)
Host aliyun-ecs
HostName x.x.x.x
User root
Port 22

# 内网开发机 (通过 Frp)
Host home-pc-dev
HostName x.x.x.x # 阿里云公网 IP
User your_home_user # 内网机器的用户名
Port 6000 # Frp 映射的端口
IdentityFile ~/.ssh/id_rsa
ServerAliveInterval 60 # 防止空闲断开

4.3 开始远程开发

  1. 点击 VSCode 左下角绿色图标 -> Connect to Host

  2. 选择 home-pc-dev

  3. VSCode 会在远程机器安装 Server 端,连接成功后,打开文件夹即为内网机器的文件系统。


🛡️ 5. 进阶:STCP 模式 (更安全)

[!NOTE] 为什么需要 STCP? 普通 TCP 模式下,remotePort = 6000 是暴露在公网的,任何人只要知道端口和密码都有可能尝试攻击。STCP (Secret TCP) 模式要求访问端也运行一个 frpc,只有持有密钥的客户端才能连接,不在公网暴露端口

5.1 修改内网机器 (frpc.toml)

Ini, TOML

1
2
3
4
5
6
[[proxies]]
name = "secret-ssh"
type = "stcp"
secretKey = "SecretKey123" # STCP 专用密钥
localIP = "127.0.0.1"
localPort = 22

注意:不需要 remotePort

5.2 笔记本端安装 Frpc

在你的笔记本(访问端)也下载 Frp,配置 frpc-visitor.toml

Ini, TOML

1
2
3
4
5
6
7
8
9
10
11
serverAddr = "x.x.x.x"
serverPort = 7000
auth.token = "YourStrongPassword123"

[[visitors]]
name = "secret-ssh-visitor"
type = "stcp"
serverName = "secret-ssh" # 对应内网机器的 proxy name
secretKey = "SecretKey123" # 必须匹配
bindAddr = "127.0.0.1"
bindPort = 6000 # 映射到笔记本本地的 6000

在笔记本启动 frpc:./frpc -c frpc-visitor.toml

5.3 修改 SSH Config

此时,SSH 连接的目标变成了笔记本本地。

代码段

1
2
3
4
5
Host home-pc-stcp
HostName 127.0.0.1
User your_home_user
Port 6000
IdentityFile ~/.ssh/id_rsa

❓ 常见问题排查 (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 没关干净。