[VSCode远程开发]使用阿里云ECS + Frp内网穿透 +VSCode Remote-SSH编程

1 前言

1.1 设备环境

  • 访问者:个人windows设备,系统win 11
  • 服务器:阿里云ECS,系统ubuntu 22.04
  • 客户端(被访问者/内网设备):个人ubuntu设备,系统ubuntu 22.04

1.2 需求

客户端在工位是内网设备,想在家里远程连接工位内网设备进行代码工作,且无需重新配置代码环境。

1.3 参考网站

  • frp源码:https://github.com/fatedier/frp/releases
  • frp手册:https://gofrp.org/zh-cn/
  • Xshell和Xftp免费版下载网址:https://www.xshell.com/zh/free-for-home-school/
  • 其他教程:小标快跑frp教程

2 框架图

参考小标快跑的TCP框架图,原视频入口

image-20250107211922857

图中的ip号和端口号略有不同,并不影响实际效果。

3 使用TCP代理的操作流程

3.1 服务器端

3.1.1 阿里云ecs租借
  1. 进入阿里云官网,选择“产品” -> “计算” -> “云服务器ECS”。

    1978ec43ea51700609ebf836a390091

  2. 选择合适的方案购买,试用或者1年99元,2核2G配置即可。

  3. 购买详情中注意选择镜像,我使用和客户端相同的ubuntu22.04,其他默认即可。

    image-20250107173626452

  4. 购买完成后可以再控制台看到云服务器ECS实例信息

    image-20250107173955506

  5. 接下来进入实例的详情页,选择”全部操作“ -> ”重置示例密码“。

    image-20250107174138230

  6. 输入密码,确认修改。

    image-20250107174428511

3.1.2 下载与安装frp
  1. 使用服务器连接工具连接租借的阿里云ECS,以Xshell为例,创建新的连接,主机号即为实例的公网ip:

    image-20250107174739050

    选择左侧的“用户身份验证”,输入刚才重置的用户名和密码:

    image-20250107175206102

    其他保持默认即可。点击“连接”,遇到SSH安全警告点击“接受并保存”,可以看到成功上租借的服务器:

    image-20250107175251182

  2. 在/usr/local下创建并进入frp目录。

    cd /usr/local
    mkdir frp
    cd frp
    

    image-20250107175533574

  3. 在https://github.com/fatedier/frp/releases上下载对应服务端和架构的包

    image-20250107180455658

  4. 使用服务器文件传输工具,上传frp的安装包到/usr/local/frp下,以Xftp为例,创建新的连接,主机为ecs实例的公网ip,用户名和密码同为刚才重置的,其他保持默认即可,点击“连接”:

    image-20250107175938297

    将下载的包上传到/usr/local/frp目录下:

    image-20250107180622675

  5. 解压并进入

    tar -zxvf frp_0.61.1_linux_amd64.tar.gz
    cd frp_0.61.1_linux_amd64/
    

    image-20250107180825569

3.1.3 配置服务端frp

由于租借ECS用于作为frp的服务端,故只需要使用frps相关的文件,其中frps是执行程序,frps.toml是配置文件。

  1. 进入配置文件frps.toml

    vim frps.toml
    # 按 i 进入编辑模式
    
  2. 写入配置信息:

    # 客户端与服务端的连接端口
    bindPort = 7000
    # 客户端连接服务端时用于认证的token
    auth.token = "any_token"
    # web管理页面配置
    webServer.addr = "0.0.0.0"
    webServer.port = 7500
    webServer.user = "admin"
    webServer.password = "admin"
    

    保存并退出:

    # 按 esc 进入命令模式
    :wq
    
3.1.4 开放端口

我们需要在阿里云的控制台中为上面使用到的端口放行。

  1. 进入示例详情页,点击”安全组“ -> ”安全组ID“。

    image-20250107200908458

  2. 在“入方向”中点击“手动添加”,输入要开放的端口号7000和7500,授权对象为“所有IPv4”,保存。

    image-20250107201144670

3.1.5 运行服务端frp

这一步中,我们使用systemd命令管理frps服务,以便设置为开机自启动。

  1. 在/etc/systemd/system目录下创建frps.service文件,用于配置frps服务:

    sudo vim /etc/systemd/system/frps.service
    
  2. 写入配置内容:

    [Unit]
    # 服务名称,可自定义
    Description = frp server
    After = network.target syslog.target
    Wants = network.target
    
    [Service]
    Type = simple
    # 启动frps的命令,需修改为您的frps的安装路径
    ExecStart = /usr/local/frp/frp_0.61.1_linux_amd64/frps -c /usr/local/frp/frp_0.61.1_linux_amd64/frps.toml
    
    [Install]
    WantedBy = multi-user.target
    
  3. 使用systemd管理frps服务:

    # 启动frp
    sudo systemctl start frps
    # 停止frp
    sudo systemctl stop frps
    # 重启frp
    sudo systemctl restart frps
    # 查看frp状态
    sudo systemctl status frps
    

    设置frps开机自启动:

    sudo systemctl enable frps
    

    可以看到如下输出:

    image-20250107183523317

  4. frps服务启动成功后,可以在web管理页面看到相关信息,进入网址182.92.163.5:7500,输入账号密码

    image-20250107201547448

    可以看到管理页面如下:

    image-20250107202031600

3.2 客户端

3.2.1 下载与安装frp
  1. 在https://github.com/fatedier/frp/releases上下载对应服务端和架构的包到/home/tsy529/frp目录,客户端仍然是ubuntu22.04,amd64架构。

  2. 解压并进入:

    tar -zxvf frp_0.61.1_linux_amd64.tar.gz
    cd frp_0.61.1_linux_amd64/
    
3.2.2 配置客户端frp

由于内网设备作为frp的客户端,只需要使用frpc相关的文件,其中frpc是执行程序,frpc.toml是配置文件。

  1. 进入配置文件frpc.toml

  2. 写入内容,假设frps所在服务器公网ip为182.92.163.5:

    serverAddr = "182.92.163.5"
    serverPort = 7000
    auth.token = "any_token"
    
    [[proxies]]
    name = "rdp"
    type = "tcp"
    localIP = "127.0.0.1"
    localPort = 22
    remotePort = 6000
    
    • localIPlocalPort 配置为需要从公网访问的内网服务的地址和端口。
    • remotePort 表示在 frp 服务端监听的端口,访问此端口的流量将被转发到本地服务的相应端口。
3.2.3 开放端口

在“入方向”中点击“手动添加”,输入要开放的端口号6000,授权对象为“所有IPv4”,保存。

image-20250107202123239

3.2.4 运行frpc程序
  1. 命令行输入:

    ./frpc -c ./frpc.toml
    

    运行成功后输出:

    6a996c473bb9d8949a5530a08fb9010

  2. 在Web管理页的“Proxies” -> “TCP”可以看到客户端信息

    image-20250107202542026

3.3 访问者端

3.3.1 测试SSH远程连接
  1. 打开命令行输入以下命令通过SSH访问客户端(内网设备),假设内网设备的用户名是tsy529

    ssh -o Port=6000 tsy529@182.92.163.5
    
  2. 若输出如下信息则代表成功连接:

    image-20250107203128457

3.3.2 在vscode中使用Remote - SSH插件进行远程连接
  1. 在“扩展”中搜索“Remote - SSH”,安装插件。

    image-20250107203424957

  2. 点击左下角的蓝色按钮,再点击“Connect to Host”。

    image-20250107203608825

  3. 点击“Configure SSH Hosts”。

    image-20250107203816762

    再点击第一个选项,进入到配置页面

    image-20250107203713322

  4. 写入内容后保存:

    Host 182.92.163.5
    	HostName 182.92.163.5
    	Port 6000
    	User tsy529
    
  5. 点击左侧远程连接图标,选择创建好的远程主机,点击在新窗口中连接。

    image-20250107204356764

  6. 接下来选择客户端的系统,我们是linux:

    image-20250107204707810

    输入客户端对应用户的密码:

    image-20250107204757469

    可以看到成功连接到客户端(内网设备):

    image-20250107205015967

4 更换为STCP代理

由于TCP代理会将内网设备的服务直接暴露在公网ip上,可能存在风险。使用stcp(secret tcp)类型的代理可以安全地将内网服务暴露给经过授权的用户,这需要访问者也部署frpc客户端。

4.1 客户端修改配置文件

  1. 修改客户端的frpc.toml,替换为以下内容:

    serverAddr = "182.92.163.5"
    serverPort = 7000
    auth.token = "any_token"
    
    [[proxies]]
    name = "rdp_client"
    type = "stcp"
    # 只有与此处设置的 secretKey 一致的用户才能访问此服务
    secretKey = "abcdefg"
    localIP = "127.0.0.1"
    localPort = 22
    

    将type修改为stcp,且不再需要remotePort

  2. 重新启动客户端,命令行输入:

    ./frpc -c ./frpc.toml
    
  3. 可以在Web管理页中看到客户端STCP的信息

    image-20250107210101809

4.2 访问端部署frp并进行连接

  1. 由于我们的访问端是win,所以选择下载frp_0.61.1_windows_amd64.zip,解压后看到文件如下:

    image-20250107210431972

  2. 访问端在frp中的角色仍然是客户端,修改frpc.toml配置文件,写入以下内容:

    serverAddr = "182.92.163.5"
    serverPort = 7000
    auth.token = "any_token"
    
    [[visitors]]
    name = "rdp_visitor"
    type = "stcp"
    serverName = "rdp_client"
    secretKey = "abcdefg"
    bindAddr = "127.0.0.1"
    bindPort = 6000
    
  3. 在命令行中输入以下命令,运行frpc程序(注意此处是win中)

    ./frpc.exe -c ./frpc.toml
    

    运行成功后输出:

    image-20250107211031660

  4. 另开一个命令行,输入以下命令,测试SSH远程连接:

    ssh -o Port=6000 tsy529@127.0.0.1
    

    连接成功的输出如下:

    image-20250107211145429

  5. 修改vscode中的配置文件,重新连接即可。

    Host 127.0.0.1
    	HostName 127.0.0.1
    	Port 6000
    	User tsy529
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值