恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

把服务器地址和Key写死进RustDesk客户端:自建远程控制的完整编译指南

  • 首页
  • 资讯中心
  • /
  • 把服务器地址和Key写死进RustDesk客户端:自建远程控制的完整编译指南

相关资讯

Echarts导出图片实战:getDataURL、多图合并与服务端出图 2026/9/30 5:05:41
半离线安装gcc/g++:内网服务器离线部署完整指南 2026/9/30 5:05:41
PyCharm+Selenium深度调试与工程化实践指南 2026/9/30 5:00:40

最新资讯

大模型+智慧河长:从模型选型到私有化部署的落地技术路线
Claude配置治理系统:模板化、可执行、可观测的AI工具链管理
Linux Shell脚本零基础实战指南:从Bash概念到调试排查全解析
ACE-Step-1.5 本地 AI 音乐模型实战|text2music 歌词转人声,部署脚本、参数调优与排坑全记录
自动标注不是替代人工,而是构建标注-训练协同闭环
头盔检测数据集构建与YOLOv8训练全流程:从标注规范到调参避坑

今日推荐

模型优化器实战:从FP32到INT8的推理加速与精度平衡
LangGraph+FastAPI构建可审计AI编码助手
基于图像预处理与几何特征的人脸脸型发型搭配系统实现

本周热门

从像素到笔画:srt-whiteboard-animation骨架笔迹追踪实现(Zhang-Suen细化+8邻接追踪)
网站建设的英语怎么说?别只背单词,看完这套安全完整流程才敢上线
新手入门看这篇:建设网站加盟避坑指南与SEO实操

本月精选

自研推理加速器Redwood:两周内实现PyTorch模型高效部署的实战教程
V4L2摄像头采集实战:从camera_client.rar到出图全流程解析
从“谁发明了钢琴键”到知识问答智能体:RAG与记忆工程实践

把服务器地址和Key写死进RustDesk客户端:自建远程控制的完整编译指南

发布时间:2026/9/30 5:05:41
把服务器地址和Key写死进RustDesk客户端:自建远程控制的完整编译指南 把RustDesk的服务器地址和Key直接写死进客户端这事儿我前后折腾了快一周。刚开始以为就是改个配置文件然后编一遍结果被版本差异、Flutter依赖、老系统的GLIBC问题轮番教做人。自己做这套方案的原因很简单官方客户端连自建服务器虽然也能用但每台设备都要手工填服务器IP、填Key、再点掉那个“Key值未知”的安全提示对批量部署来说完全是灾难。更关键的是官方客户端允许用户随意改回官方服务器流量路径和安全边界都不受控。自己编译一份“锁死”的客户端把ID服务器地址、中继服务器和公钥全部内嵌到二进制里部署完开机即用从根本上绕开这些麻烦。下面把完整的思路、改码位置、编译流程和踩坑记录写清楚。不管你是给公司内部做统一远程工具还是自己想彻底掌控设备访问链路这份实操记录应该能帮你少走不少弯路。1. 为什么要自己编译RustDesk并把服务器信息写死进客户端1.1 先搞清楚RustDesk的组成RustDesk不是一个单文件程序而是“客户端服务端”的组合。服务端有两个核心服务hbbsID/Rendezvous服务器负责设备注册、设备发现和会话握手。hbbr中继服务器负责在NAT穿透失败时转发流量。客户端连接时需要知道三件事连哪个ID服务器、遇到打洞失败时走哪个中继、如何验证服务器身份。前两个属于连接地址问题第三个就是Key问题。连接过程和日常理解的“输入IP就能连”不太一样。客户端要先向hbbs查询对方设备的目前地址如果双方能直接打洞成功就走点对点通道如果打洞失败再找hbbr中转。所以你要自己掌控链路这三个信息都得准备好。1.2 官方客户端的配置痛点官方客户端确实可以在设置里填写服务器地址和Key填完之后这些信息会保存在本机。问题就在这里每个设备都要人工配置一遍而且配置面板里有个开关用户随时可以一键切换回官方服务器。这带来的实际困扰很具体。有一次我给公司十几台电脑部署远程支持工具每台机器都要远程或者到场去设置服务器地址。如果哪一步填错那台机器在关键时刻就连不上。后来我发现部分员工会把服务器地址改回官方服务器远程链路什么时候走到公共服务器都无感知。对于强调数据可控的场景这是不可接受的。1.3 自己编译的核心价值自己编译客户端本质上是把配置从“运行期外置”变成“编译期内置”。服务器地址、中继地址、公钥都变成二进制的一部分不依赖任何本地配置文件也不给用户留下顺手就改的入口。这还有一层安全意义Key写死之后客户端只会信任你指定的服务器公钥其他任何服务器即使伪造了同名的ID服务器地址也无法通过签名校验。相当于对远程控制链路做了双向绑定。当然自己编译不代表你不需要服务端。恰恰相反你得先把服务端跑起来拿到它生成的公钥才有东西可写。所以这是一个“先部署服务端后定制客户端”的完整流程。2. 编译前的准备环境、工具链与源码结构2.1 工具链和系统依赖清单完整编译RustDesk客户端需要以下基本环境Rust稳定版工具链用rustup安装即可。C/C编译器Windows下建议安装Visual Studio 2022 Build Tools并勾选“使用C的桌面开发”。Linux下用gcc/clang版本别太老。Flutter SDK新版RustDesk的界面基于Flutter版本建议3.x以上。pkg-config、cmake等构建辅助工具。我最初误以为它是一个纯Rust项目直接执行cargo build就能出产物。实际编译时缺libclang、缺Flutter依赖、缺各种Linux桌面库报错一个接一个。等把Flutter装好、系统依赖补齐之后构建才顺利跑起来。如果你在Linux下编译不同发行版的依赖包名略有差异。Ubuntu/Debian类系统可以参考sudo apt install build-essential pkg-config cmake libgtk-3-dev \ libayatana-appindicator3-dev libx11-dev libxcb1-dev \ libxcb-icccm4-dev libxcb-shape0-dev libxcb-xfixes0-dev \ libssl-dev libclang-dev clang个别老版本或特定组件还会牵扯到Qt相关依赖。如果你在网上搜到qscintilla下载与编译的教程多半是在处理Qt环境相关组件。主流版本不强制需要它但老系统折腾编译环境时可能碰上提前知道就行。2.2 拉取源码并认识目录结构客户端源码使用官方仓库服务端源码是另一个仓库。git clone https://github.com/rustdesk/rustdesk.git git clone https://github.com/rustdesk/rustdesk-server.git客户端仓库里几个关键位置libs/hbb_common/公共库协议、配置、加解密逻辑都在这里核心文件是config.rs。src/客户端业务逻辑旧版个性化设置也散落在这里。flutter/新版Flutter前端目录最终包装时会调用Rust后端。服务端仓库编译产物是hbbs和hbbr两个可执行文件。2.3 版本锁定问题RustDesk更新速度很快配置字段名和编译流程差异大。我踩过一个大坑在最新master分支上找配置项发现网上老教程里写的常量名已经不存在或者被挪到别的模块改了之后根本不生效。所以建议先选择一个稳定版本tag比如v1.2.x或v1.3.x。进入源码目录后执行git tag git checkout v1.3.x整个流程跑通之后再考虑要不要跟进最新版。第一次就追新代码往往是给自己挖坑。3. 服务器侧的准备编译hbbs/hbbr并导出公钥3.1 编译服务端服务端编译比客户端简单得多。进入rustdesk-server目录直接cargo build --release -p hbbs -p hbbr编译完成后在target/release/下能看到hbbs和hbbr两个二进制。把它们拷贝到服务器上说明你的服务端就位了。端口关系需要记清楚hbbs监听TCP 21115、21116以及UDP 21116。hbbr监听TCP 21117、21118以及UDP 21118。部署后记得把相关端口放行。我只放了21116的TCP和UDP结果客户端能连上ID服务器但打洞失败后无法走中继后来发现是21117没放行。3.2 首次运行与公钥生成在服务器上执行./hbbs ./hbbrhbbs第一次启动会自动生成一对Ed25519密钥位置在运行目录下id_ed25519和id_ed25519.pub。执行cat id_ed25519.pub输出是一整行Base64字符串这行内容就是后续要写进客户端源码的Key。为什么必须从服务器上取这个值因为RustDesk的握手协议是基于服务器签名校验的。服务器在握手时用私钥签名客户端用公钥验证。如果客户端不内置这个公钥就只能弹窗让用户手动确认也就是常见的“Key值未知”。写下这个值客户端在编译之后就建立了对这台服务器的信任。3.3 中继服务器参数配置如果网络环境普遍能直接打洞只跑hbbs也行。但跨运营商、复杂NAT场景下中继几乎是必备。启动hbbs时指定中继地址./hbbs -r your.example.com:21117使用域名而不是IP会更灵活。以后服务器换IP只改DNS解析不用重新编译部署客户端。密钥文件注意保管好。如果服务器更换了工作目录hbbs重新生成了一对密钥所有旧客户端会因为公钥不匹配而连接失败。这种“全部设备失联”的教训我后面会专门说。4. 修改客户端源码服务器地址、Key以及其他细节4.1 定位配置文件进入客户端仓库核心配置文件在libs/hbb_common/src/config.rs打开文件搜索以下关键词ID_SERVERRENDEZVOUS_SERVERKEY或PUB_KEY不同版本的常量名可能有差异比如有的版本叫PUB_KEY有的版本直接把Key放到Key结构里。不要硬套网上教程的代码最可靠的方式是grep -rn ID_SERVER libs/hbb_common/src/ grep -rn PUB_KEY\|KEY\|Key libs/hbb_common/src/config.rs确认实际生效的变量名再动手。4.2 写入服务器地址把ID服务器和中继服务器改成你自己的地址pub const ID_SERVER: str your.example.com; pub const RENDEZVOUS_SERVER: str your.example.com;如果你的服务器不是默认端口可以写成your.example.com:21116这种格式。RustDesk会根据端口识别ID服务器和中继。个人建议优先用域名。因为客户端已经编译进二进制一旦IP变了就得重新编译分发所有客户端。用域名的话改DNS就能平滑切换。4.3 写入服务器公钥把服务器上id_ed25519.pub的内容复制出来填进去pub const KEY: str 这里贴公钥Base64字符串;一个容易让人破防的细节复制内容时不要把末尾的换行符带进源码。有些终端工具复制的时候会把换行带进去。编译不报错但运行时校验会失败排查半天都找不到原因。正确的处理方式是把公钥粘贴到编辑器里后用hexdump或者直接肉眼确认末尾没有多余空行。填好之后客户端从第一次握手开始就携带了这个公钥。服务器返回身份签名后客户端本地验证匹配则通过不匹配则拒绝。这也是“Key值未知”弹窗消失的底层原理。4.4 顺手清理官方服务器入口如果你希望云控设备不能随便改回官方服务器可以做一次更深度的清理。搜遍源码grep -rn rustdesk.com src/ libs/把官方服务器相关引用全部替换成你自己的域名或者把设置面板里的服务器输入框隐藏掉、置为不可编辑。这个操作要注意范围。不同版本UI代码结构差异很大有的在src/ui/下有的在flutter/lib/下。改之前先看是传统UI还是Flutter UI避免改错地方。第一次建议只改服务器地址和Key先跑通全流程。等客户端能在所有设备上稳定连上自建服务器再去做界面隐藏和品牌替换。4.5 其他可选择的自定义项修改客户端显示名称搜索RustDesk字符串统一替换成你的品牌名。禁止用户切换ID服务器在UI设置里隐藏网络配置入口。修改默认语言在相关配置常量里写死语言代码。定制做得越多维护成本越高。每升级一次版本你的补丁可能就要重新打一遍。所以尽量把自定义集中在少数几个文件里。5. 完整编译流程从源码到安装包5.1 Windows客户端编译在Windows上我的环境组合是Windows 11 x64Visual Studio 2022 Build ToolsRust stable MSVC工具链Flutter 3.x加入PATH进入仓库根目录先处理Flutter依赖cd flutter flutter pub get cd ..然后执行完整构建cargo build --release --features flutter这里的关键参数是--features flutter。它会把Rust后端和Flutter前端组合起来。如果不加这个feature可能只编译出后端逻辑不会生成完整客户端。第一次构建会下载大量crates和Flutter依赖耗时比较长。国内网络环境建议提前配置好crates镜像源不然卡半天也正常。构建成功后Windows产物在target/release/下是一个exe文件和若干动态库。直接用这个exe运行也可以但要部署给多台机器最好打成安装包。可以用官方仓库提供的打包脚本或者用Flutter标准方式cd flutter flutter build windows --release产物会在build/windows/x64/runner/Release/下里面是一整套可分发目录包含所有dll和资源文件。5.2 Linux客户端编译Linux编译的主要差异在系统依赖。前面第2章列过Ubuntu/Debian的安装命令这里直接进入构建cd flutter flutter pub get cd .. cargo build --release --features flutter在CentOS 7或统信UOS老版本这类环境上系统自带gcc版本太低很容易编译到一半报错。网上那些“kylin v10编译gcc 12”的教程解决的就是这类问题。我的建议是先编译一个新版gcc安装到独立目录用update-alternatives切换当前用户环境但不要直接替换系统的/usr/bin/gcc否则系统自己的glibc依赖崩了连基础工具都用不了。Linux构建产物同样是二进制文件。想打成deb或rpm包可以使用仓库自带的打包脚本或借助fpm这类工具把产物和依赖文件打进去。5.3 验证编译结果编译完成后第一件事不是急着分发而是验证Key是否生效。随便找一台干净机器运行编译出的客户端直接输入另一台设备的ID发起连接。如果一切正常不会弹服务器配置窗口也不会出现“Key值未知”。连接成功后你可以在客户端关于页面或日志里确认当前服务器地址确实是你自己的。如果弹“Key值未知”按以下顺序排查源码里Key是否包含多余换行或空格。服务端id_ed25519.pub是否被重新生成过。客户端连接的端口是否是服务端实际监听的端口。如果连接始终转圈优先检查21116端口的TCP和UDP是否放行。防火墙一般默认阻挡UDP而UDP正是ID服务器设备发现的关键通道。6. 编译与运行中的常见问题速查6.1 编译期报错我用一张表记录下最常遇到的情况报错信息可能原因解决方向cannot find -lclang缺少LLVM/libclang安装clang并把LLVM目录加入PATH找不到gtk相关头文件Linux桌面依赖缺失按发行版补齐libgtk-3-dev等cannot find -lQt*个别老版本或组件依赖Qt用vcpkg编译对应Qt库包括qscintilla等组件link.exe报错Visual Studio组件不全确认安装了“使用C的桌面开发”Flutter命令不存在环境变量未配置执行flutter doctor检查我特别提醒一点网上很多旧教程会让你下载Sciter SDK那是RustDesk老版本的做法。新版用Flutter以后你不需要Sciter。照着旧教程走会在这里浪费很多时间。6.2 运行期连接问题现象可能原因排查方向客户端长时间转圈ID服务器不可达查看21116端口、UDP放行状态可连接但画面卡顿中继转发路径不通确认hbbr已启动hbbs的-r参数正确弹窗提示服务器Key未知客户端未预置Key或Key不匹配核对公钥值和服务器端的id_ed25519.pub连接成功但立即断开客户端与服务端版本差异大尽量使用同时间段版本编译两边运行期最隐蔽的问题是客户端编译时写入了错误端口。默认ID服务器端口是21116但如果你在RENDEZVOUS_SERVER里写了21117客户端会以为那是ID服务器结果永远连不上。建议把ID服务器和中继地址分开写不要只图省事统一填一个。6.3 老系统部署的服务端异常在CentOS 7这类老系统上直接运行新编译的hbbs时可能会报GLIBC_2.18 not found。原因是新版本Rust编译出来的二进制依赖了比系统更高的glibc版本。两种缓解思路在老系统上用老版本Rust工具链重新编译服务端。直接用官方预编译的服务器二进制不自己编服务端。客户端如果要兼容老Windows系统注意编译出的exe可能依赖较新的MSVC运行库。分发时把运行库一起带上或者配置Rust使用静态CRT。这一条经常被忽略部署到客户机器上就会开机报缺少dll。7. 我的几点实操心得这套方案最核心的教训就是“Key的一致性”必须当成一等大事来管理。我有一次更换服务器重新部署hbbs时没有注意到它在新目录里又生成了一对新密钥。结果旧客户端全部连不上逐个排查才发现是公钥换了。从那次以后我把服务器公钥和域名、端口一起写进一个专门的配置文档换服务器时同步记录防止再次踩坑。另外版本管理值得一开始就规划好。我在仓库里建了一个patch/目录每个版本放一个补丁脚本自动化完成“改域名、改Key、改品牌名”这几件事。官方发布新版本后我重新生成一次补丁编译分发基本控制在十分钟以内。你如果也要长期维护这套自建方案强烈建议做同样的事。最后再提一个小技巧源码里写死Key之后可以顺带改一下客户端文件版本号把你自定义的版本标识和官方版本区分开。这样远程查看设备信息时一眼就能认出哪些是自编译版本不会和官方包混淆。整套流程跑通后你会发现远程控制的“底座”真正落到了自己手里。设备分发出去打开就能连路径可控、身份可控、配置可控后续维护反而比之前逐台手动配服务器轻松得多。

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号