部署自己的远程桌面服务器RustDesk,RustDesk自定义客户端

远程桌面软件有很多,比如QQ远程协助、向日葵、ToDesk、TeamViewer等,但是都用注册后才可以使用,

所以我选择了自建服务器和客户端,不用登录不用安装即可使用,使用开源的远程桌面软件 RustDesk.

  1. 服务端部署
    这次直接使用服务端基于S6的镜像进行搭建,所以不用构建两个容器,它会自己帮我们管理 RustDesk 的ID服务和中继服务。
    https://github.com/rustdesk/rustdesk-server#s6-overlay-based-images (S6版叠加单服务)
    我使用的图形界面管理docker
    添加模板->添加自定义模板
    小风博客

    模板内容,docker-compose file,下面的rustdesk.example.com替换成你自己的域名

    version: '3'
    
    services:
      rustdesk-server:
        container_name: rustdesk-server
        ports:
          - 21115:21115
          - 21116:21116
          - 21116:21116/udp
          - 21117:21117
          - 21118:21118
          - 21119:21119
        image: rustdesk/rustdesk-server-s6:latest
        environment:
          - "RELAY=rustdesk.example.com:21117"
          - "ENCRYPTED_ONLY=1"
        volumes:
          - ./data:/data
        restart: unless-stopped

    小风博客

    添加好后,进入

    小风博客

    点部署堆栈,等待部署完成

    小风博客

    要实现外网使用,所以在路由器上还需要做下端口映射
    注册和中继端口需要映射的:21116、21117、WEB客户端使用的:21118、21119,如果你没有WEB客户端可以不用对外映射

    小风博客

    在Linux系统里找到KEY文件,作为控制端的时候需要使用,被控端不需要填写

    小风博客

    下载客户端就可以使用了,下载地址:https://github.com/rustdesk/rustdesk/releases/tag/1.3.1
    客户端配置
    小风博客

    配置中继

    小风博客

    连接成功

    小风博客


  2. 生成自己的客户端
    使用官方客户端首次都需要配置服务器地址和密钥,对我来说非常不友好,不利于分享,还可能暴露服务器信息和密钥,存在安全隐患。
    所以这次我们根据 RustDesk 开源项目构建属于自己的客户端软件,把服务端信息直接写入客户端,做到开箱即用,最大的好处是可以生成被控端,给别人远程解决问题时,只给对方被控端就行了.

    在浏览器中打开客户端的开源项目地址。(客户端和服务端是不同的两个项目,不要搞混了)
    利用 Github Actions 编译 RustDesk 客户端
    打开客户端地址,并点击右上角的Fork按钮。
    https://github.com/rustdesk/rustdesk
    小风博客

    把代码Fork到自己的仓库。(去掉仅copy the master 分支,可以克隆所有分支代码
    小风博客

    Fork完毕后,点击右上角的 Settings 进入到设置界面,新增 Actions 的密钥。

    小风博客
    1.Name 输入RENDEZVOUS_SERVER,Secret 输入我们群晖的DDNS域名。(不要加端口号)
    2.再增加一个密钥。Name 输入RS_PUB_KEY,Secret 输入服务端映射data目录下pub文件的内容。(客户端里填写的KEY内容)
    注:如果你需要把客户端给别人使用就不要把KEY编进去,这样生成的客户端就只能成为被控端,不会让人白漂你的服务器
    小风博客
    接下来就运行 Actions。点击 Actions 选项,可以看到左侧有很多 workflows。点击 Flutter Tag Build ,选择Run workflow,找到Tags下最新的版本。
    小风博客


    最后点击绿色的Run workflow按钮就会自动进行编译。

    小风博客

    稍等片刻,列表中就会出现一条记录,显示 workflow 正在运行,我们可以点击记录进到详情页查看编译的状态。

    小风博客

    整个编译过程大概需要一小时,借着这个时间,我们来简单了解下前面服务器的配置是如何写到代码中的。

    小风博客

    可以看到 flutter-tag.yml 调用了 flutter-build.yml 脚本。小风博客

    从 flutter-build.yml 脚本中可以看到它读取了secrets.RS_PUB_KEY、secrets.RENDEZVOUS_SERVER等其他配置。这些带有secrets.开头的都是引用的前面Settings下Actions选项中的secrets。

    小风博客



  3. workflow 运行完成后会自动把编译好的各个客户端发布到 Releases 界面。小风博客小风博客

  4. 在Releases 界面下载并安装客户端后,打开首页可以发现状态直接显示为就绪

    小风博客

  5. 打开设置,可以发现ID/中继服务器的配置为空。说明服务端信息已经被编译到了客户端。小风博客

    MacOS 上可能出现的的问题,用 Github Actions 编译的dmg程序在Mac上始终无法打开,排查后发现应该是 workflow 脚本中的证书导致的。


    默认的 workflow 脚本中有关于苹果开发者证书相关配置,如果没有上传相关证书就会导致无法打开,所以我们在 Mac 上安装完客户端后,需要重新对APP进行签名。


    签名的代码也非常简单,只需在终端执行如下命令即可。

     codesign -s - --deep --force --timestamp=none /Applications/RustDesk.app

    常见问题:
    在Windows上重新安装RustDesk并清除配置记录,CMD里面执行:


  6. rmdir /s /q %APPDATA%\RustDesk

    安装后的RustDesk,发现每次打开软件,服务没有启动,要手动启动,在Rustesk的快捷方式,右键-属性,在后面加上一行,
    --install-service -wait -Verbose,变成下面,以后打开Rustesk就会自动开启服务了
    小风博客

    开机自启
    复制RustDesk快捷方式到
    C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
    目录下即可开机启动,快捷方式名称不能是“RustDesk Tray”。

打 赏

小风博客
请点评论按钮,登录后发表评论
  • 最新评论
  • 总共1条评论
小风博客

墨殇:请问如何把控制密码和修改设置的pin码加到变量里,并且开启需要pin码才能修改设置?

2025-01-21 09:42:27 回复

小风博客
  • 小风 博主 回复 墨殇:没有研究过这个,想要实现估计有点麻烦,我这个主要是解决远控别人时只给他被控端就行,不会暴露自己的服务器,自用的话就不用这么麻烦手动配置下就行了
  • 2025-01-26 13:23:51 回复