RustDesk通过API防止服务器被滥用 自动编译将服务器等信息内置客户端


自建 RustDesk 服务端、API 及定制化客户端完整指南

本教程将指导你完成 RustDesk 服务端及 API 的安装部署,并通过修改源码的方式将服务器信息编译到客户端,最后利用 GitHub Actions 自动编译生成定制化客户端。


一、服务端及 API 安装

若想通过 API 控制 RustDesk 客户端,我们将使用 Github 大佬 lejianwen 修改的服务端源码及其开源的 API 项目。

1.1 SSH 远程连接服务器

教程开始之前,你需要准备一台云服务器,并使用 WindTerm 等工具通过 SSH 连接到服务器。

1.2 安装 1Panel 管理面板

安装 RustDesk 服务端时会用到 Docker Compose,这里推荐使用 1Panel 面板进行管理。

1Panel 安装脚本:

# RedHat / CentOS:
curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sh quick_start.sh

# Ubuntu:
curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sudo bash quick_start.sh

# Debian:
curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && bash quick_start.sh

安装过程注意:

  • 你可以自定义面板访问端口(例如:6666)。
  • 也可以自定义用户名和密码。

1.3 服务器后台开放端口

1Panel 安装好后,在浏览器中访问提示的地址(多数情况下需要先在服务器后台安全组/防火墙中开放端口)。同时,我们将 RustDesk 服务端及 API 所需端口一并开启。

开放端口列表:

  • TCP: 21114-21119, 6666 (1Panel 自定义端口)
  • UDP: 21116

1.4 Compose 一键部署 RustDesk 服务端及 API

  1. 访问 1Panel 面板,左侧导航点击 容器 -> 编排 -> 创建编排
  2. 名称随意(便于区分即可),粘贴如下 docker-compose 配置代码:
networks:
  rustdesk-net:
    external: false

services:
  rustdesk:
    ports:
      - 21114:21114
      - 21115:21115
      - 21116:21116
      - 21116:21116/udp
      - 21117:21117
      - 21118:21118
      - 21119:21119
    image: lejianwen/rustdesk-server-s6:latest
    environment:
      - RELAY=<relay_server[:port]>         # 中继服务器:21117
      - ENCRYPTED_ONLY=1
      - MUST_LOGIN=Y                         # 默认为 N,设置为 Y 则必须登录才能连接
      - TZ=Asia/Shanghai
      - RUSTDESK_API_RUSTDESK_ID_SERVER=<id_server[:21116]>      # ID 服务器
      - RUSTDESK_API_RUSTDESK_RELAY_SERVER=<relay_server[:21117]> # 中继服务器
      - RUSTDESK_API_RUSTDESK_API_SERVER=http://<api_server[:21114]> # API 服务器
      - RUSTDESK_API_KEY_FILE=/data/id_ed25519.pub
      - RUSTDESK_API_JWT_KEY=xxxxxx                             # 请随便设置一个字符串
    volumes:
      - /data/rustdesk/server:/data
      - /data/rustdesk/api:/app/data                           # 将数据库挂载出来
    networks:
      - rustdesk-net
    restart: unless-stopped
  1. 点击 确定,等待拉取 Docker 镜像并启动服务。

说明: 一个 Compose 文件同时部署了 RustDesk 服务端及 API。此服务端基于原版修改,更兼容第三方 API,并增加了功能(如必须登录客户端才能发起远程连接,有效杜绝滥用)。

1.5 获取密钥及 API 管理

  • 查看 Key: 通过 Docker 挂载的路径 /data/rustdesk/server 可以查看客户端连接所需的密钥。
  • API 后台: 访问 http://你的服务器IP:21114
    • 用户名默认为 admin
    • 初始密码需通过查看刚部署的容器日志获取。
  • 修改 API 管理员密码(在容器内执行):
    ./apimain reset-admin-pwd <你的新密码>

    登录 API 后台后,请务必及时修改默认密码!

1.6 测试部署的服务端及 API

将服务器 IP、API 地址以及 Key 等信息填入 RustDesk 官方客户端,进行远程连接测试。

  • 正常情况下,连接应成功。
  • 确认在客户端未登录的情况下,无法发起远程协助(MUST_LOGIN=Y 生效)。

二、修改 RustDesk 源码

早期教程中通过 GitHub 环境变量编译客户端的方法已失效。本节将指导你通过修改源码的方式,将服务器信息硬编码到客户端,并利用 GitHub Actions 自动编译。

2.1 修改源码准备工作

所需工具:

  1. Git: 用于克隆、修改和推送源码。
  2. 代码编辑器: 推荐使用 HBuilder X(美观易用)。
  3. 网络工具: 推荐使用 dev-sidecar 解决 GitHub 访问问题。

2.2 配置开发环境

  1. 安装 dev-sidecar 下载安装后,以管理员身份运行,根据引导安装证书,并开启代理服务、系统代理及 Git 代理。
  2. 安装 Git: 从官网下载安装,终端输入 git --version 验证安装。
  3. 安装 HBuilder X: 官网下载绿色免安装版,解压即用。

2.3 Fork RustDesk 项目

  1. 登录你的 GitHub 账号。
  2. Fork 主仓库 rustdesk/rustdesk 到你的账号下。
  3. Fork 子模块仓库:
    • rustdesk 项目代码页,点击 libs 目录下的 hbb_common 链接。
    • 跳转后,将其 Fork 到你的账号下。

安全提示: Fork 的仓库默认为公开。如果你担心服务器信息泄露,可以自建私有仓库,并分别导入 RustDesk 及子模块源码。

2.4 配置 GitHub SSH Key

  1. 打开 Git Bash 或终端,执行以下命令:

    # 配置 Git 用户信息
    git config --global user.name "你的用户名"
    git config --global user.email "你的邮箱"
    
    # 生成 SSH 密钥 (一直按回车)
    ssh-keygen -t rsa -C "你的邮箱"
    
    # 查看公钥
    cat ~/.ssh/id_rsa.pub
  2. 复制输出的公钥内容。
  3. 访问 GitHub: Settings -> SSH and GPG keys -> New SSH key
  4. Title 随意,将公钥粘贴到 Key 文本框,点击 Add SSH key
  5. 测试连接:
    ssh -T git@github.com

    出现 You've successfully authenticated 即表示成功。

2.5 克隆源码到本地

在本地任意目录打开终端,执行:

git clone git@github.com:你的用户名/rustdesk.git
cd rustdesk

2.6 修改子模块远程仓库地址

  1. 用 HBuilder X 打开项目根目录下的 .gitmodules 文件。
  2. 将子模块 URL 替换为你 Fork 的地址:
    [submodule "libs/hbb_common"]
        path = libs/hbb_common
        url = git@github.com:你的用户名/hbb_common.git  # 替换为你的地址
  3. 在终端中执行以下命令,完成地址变更与提交:
    # 同步新的子模块URL
    git submodule sync
    # 提交修改
    git add .gitmodules
    git commit -m "更新子模块地址至我的Fork仓库"
    git push origin master

2.7 修改 ID/中继服务器地址 (关键步骤)

  1. 进入子模块目录并创建新分支:
    cd libs/hbb_common
    git checkout -b my-custom-server
  2. 修改服务器配置:
    • 用 HBuilder X 打开文件:libs/hbb_common/src/config.rs
    • 找到第 101-102 行左右(请以实际行为准),修改 DEFAULT_ID_SERVERDEFAULT_RELAY_SERVER 的值为你的服务器地址和密钥。
      // 示例:修改为你自己的服务器IP和从服务端获取的Key
      pub const DEFAULT_ID_SERVER: &str = "你的服务器IP:21116";
      pub const DEFAULT_RELAY_SERVER: &str = "你的服务器IP:21117";
      pub const DEFAULT_API_SERVER: &str = "http://你的服务器IP:21114";
      pub const DEFAULT_KEY: &str = "你的密钥";
  3. 提交并推送子模块修改:
    git add .
    git commit -m “改为自己的ID/中继服务器和API地址”
    git push origin my-custom-server

2.8 在主仓库中更新子模块引用

  1. 返回主仓库根目录:
    cd ../../
  2. 更新主仓库对子模块的提交记录并推送:
    git add libs/hbb_common
    git commit -m “更新子模块至自定义服务器版本”
    git push origin master

2.9 删除客户端内的广告提示栏

  1. 在主仓库根目录,使用 HBuilder X 打开文件:
    flutter/lib/desktop/pages/connection_page.dart
  2. 找到 setupServerWidget() 方法(大约在81-110行),将其内容替换为如下代码,以隐藏公共服务器提示栏:
    Widget setupServerWidget() => Flexible(
      child: Offstage(
        offstage: !(!_svcStopped.value &&
            stateGlobal.svcStatus.value == SvcStatus.ready &&
            _svcIsUsingPublicServer.value),
        child: Row(
          crossAxisAlignment: CrossAxisAlignment.center,
          children: [], // 清空原有内容,不显示任何提示
        ),
      ),
    );
  3. 提交并推送修改:
    git add .
    git commit -m “隐藏客户端内的公共服务器广告提示栏”
    git push origin master

三、使用 GitHub Actions 编译客户端

通过以上操作,服务器及 API 信息已写入源码。现在可以利用 GitHub Actions 进行自动化编译。

  1. 在你 Fork 的 rustdesk GitHub 仓库页面,点击 Actions 标签页。
  2. 如果这是首次使用,可能需要点击 I understand my workflows, go ahead and enable them 启用工作流。
  3. 已有的 Build 工作流会在你推送代码后自动触发。你也可以手动点击 Run workflow 来启动编译。
  4. 编译过程可能需要 1 小时或更长时间,请耐心等待。
  5. 编译完成后,在 Actions 页面点击完成的工作流,在 Artifacts 部分即可下载编译好的客户端安装包(如 Windows 安装包)。

最终效果:

  • 获得的客户端将不再显示“您的数据将被转发到……”的广告提示栏。
  • 客户端必须登录你在 API 后台创建的用户后才能发起远程连接,控制生效。
  • 登录后,远程连接功能一切正常。

文章目录


    FRP内网穿透搭建详细教程

    微PE工具箱V1.2+V2.1+V2.3集成经典工具合盘

    评 论