RustDesk 自建服务器 Key 强校验配置笔记

RustDesk 自建服务器 Key 强校验配置笔记

一、问题背景

服务器(公网 IP shturl.cc/puYaT)停电重启后,所有客户端报 Key 不匹配 ,远程无法接入。排查后发现是私钥文件损坏 + systemd 启动参数配置错误两个问题叠加。


二、最终正确配置

1. 服务端目录

复制代码
/data/rustdesk/amd64/
├── hbbs              # ID 注册服务器
├── hbbr              # 中继服务器
├── rustdesk-utils    # 密钥工具
├── id_ed25519        # 私钥(RustDesk 生成)
├── id_ed25519.pub   # 公钥(客户端填的 Key)
└── db_v2.sqlite3    # 数据库

2. hbbs.service(ID 服务器)

复制代码
[Unit]
Description=RustDesk ID Server (hbbs)
After=network.target

[Service]
Type=simple
ExecStart=/data/rustdesk/amd64/hbbs -r <服务器IP>:21117 -k _
WorkingDirectory=/data/rustdesk/amd64
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

3. hbbr.service(中继服务器)

复制代码
[Unit]
Description=RustDesk Relay Server (hbbr)
After=network.target

[Service]
Type=simple
ExecStart=/data/rustdesk/amd64/hbbr -k _
WorkingDirectory=/data/rustdesk/amd64
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target

4. 关键参数说明

参数 作用
-r <服务器IP>:21117 指定中继服务器地址
-k _ 强制校验 key ,从工作目录加载 id_ed25519 / id_ed25519.pub

⚠️ -k 后面必须跟下划线 _,不能跟 key 字符串,也不能跟文件路径!

  • ❌ -k <key字符串> → 不生效
  • ❌ -k /data/rustdesk/amd64/id_ed25519.pub(跟文件路径)→ 被当成 key 字符串,校验失败
  • ✅ -k _(下划线)→ 从工作目录加载密钥对,强制校验

三、客户端配置

配置文件位置

复制代码
C:\Users\<用户名>\AppData\Roaming\RustDesk\config\RustDesk2.toml

⚠️ 是 RustDesk2.toml,不是 RustDesk.toml!后者是旧文件,不生效。

关键配置项

复制代码
[options]
custom-rendezvous-server = '<服务器IP>:21116'
relay-server = '<服务器IP>:21117'
key = '<服务器公钥字符串>'

客户端 key 值来源

在服务器上执行:

复制代码
cat /data/rustdesk/amd64/id_ed25519.pub

输出就是客户端要填的 key。


四、Key 校验机制(重要)

RustDesk 的 key 校验分服务端校验 和客户端校验两部分:

角色 校验方 key 填错的后果
被控端(被远程的机器) 服务器校验注册 注册失败 → 离线 → 谁都连不上
控制端(发起远程的机器) 客户端校验服务器身份 弹"非安全连接"警告 → 点 Continue 还能连

强校验的关键:确保所有被控端 key 都填对!


五、常用排查命令

服务端

复制代码
# 查看服务状态
systemctl status hbbs hbbr --no-pager

# 查看 hbbs 日志(找 key / invalid key)
journalctl -u hbbs --no-pager | grep -i key
journalctl -u hbbs --no-pager | tail -20

# 查看当前 key
cat /data/rustdesk/amd64/id_ed25519.pub

# 验证密钥对是否配对
cd /data/rustdesk/amd64
./rustdesk-utils validatekeypair "公钥字符串" "私钥字符串"

# 生成全新密钥对
./rustdesk-utils genkeypair

# 重载配置并重启
systemctl daemon-reload
systemctl restart hbbs hbbr

客户端

复制代码
:: 重启 RustDesk 后台服务(改完 toml 必须执行)
net stop RustDesk
net start RustDesk

:: 查看配置文件
notepad "%APPDATA%\RustDesk\config\RustDesk2.toml"

六、本次踩过的坑

坑 说明
私钥文件损坏 停电导致 id_ed25519 文件损坏,rustdesk-utils validatekeypair 报 Invalid secret key,必须重新生成密钥对
-k 跟文件路径 systemd service 里写了 -k /data/rustdesk/amd64/id_ed25519.pub,hbbs 把路径字符串当成 key,客户端永远不匹配
-k 跟 key 字符串 写 -k <key字符串> 也不生效,必须用 -k _
改错配置文件 一直在改 RustDesk.toml,实际生效的是 RustDesk2.toml
改完 toml 不重启服务 RustDesk 后台服务缓存旧配置,必须 net stop/start RustDesk
客户端缓存旧 key RustDesk.toml 里的 [keys_confirmed] 缓存了旧服务器指纹,换 key 后需清除

七、快速恢复流程

如果遇到 key 不匹配,按这个顺序排查:

  1. 看服务器日志 :journalctl -u hbbs --no-pager | grep -i key
  2. 确认 hbbs 加载的 key :日志里 Key: xxx= 就是当前公钥
  3. 确认客户端 key :RustDesk2.toml 里的 key = 'xxx='
  4. 两边逐字符对比 (注意 l 和 1、大小写、首尾空格)
  5. 客户端改完 toml 重启服务 :net stop RustDesk && net start RustDesk
  6. 还不行就验证密钥对 :./rustdesk-utils validatekeypair
  7. 私钥损坏就重新生成 :./rustdesk-utils genkeypair,写入文件,客户端填新公钥
相关推荐
NailiConveyor9 小时前
柔性物流方案如何适配工厂升级?自动化输送流水线定制要点
大数据·运维·自动化·制造·业界资讯
Lsetea9 小时前
Certbot webroot申请SSL证书总是404:Nginx挑战目录与路径映射检查
运维·nginx·https·ssl证书·certbot
如若1239 小时前
Windows SSH + Headscale/Tailscale 组网及免密登录完整配置教程
运维·windows·ubuntu·ssh·内网穿透
开开心心就好9 小时前
音频降噪剪辑工具,音量裁剪一键处理
运维·服务器·前端·spring·ocr·音视频·1024程序员节
一枕槐安48710 小时前
大模型限流、重试、超时处理:API 调用健壮性方案
linux·服务器·php·大模型api·指数退避·限流控制·超时预算
黑十10 小时前
PyTorch 报 “no CUDA GPUs are available“ 怎么办?3 步排查
服务器·网络·人工智能·pytorch·python
゛凌乱的记忆づ10 小时前
好用的md文件编辑器——TyporaS与Typora
笔记·git·typora·markdown
李纲明10 小时前
WordPress 白屏或提示「出现了严重错误」:先开 WP_DEBUG 抓致命错误,再二分插件与主题
运维·php·debug·wordpress·白屏·插件冲突·devdiy
zroooo10 小时前
计算机学习-知识庞大而繁杂
笔记·学习
坤坤子吖11 小时前
算法学习——单调队列
开发语言·c++·笔记·学习·算法