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,写入文件,客户端填新公钥
相关推荐
悟乙己1 小时前
AFAC2026 赛题四金融长文本 Agent竞赛学习笔记:赛题解析(一)
笔记·学习·金融
大侠归来2 小时前
Docker 部署 Dolibarr:从零开始的完整指南
运维·docker·容器
KING-WU5122 小时前
Linux GDB 调试实战指南:从编译到断点调试
linux·运维·服务器
傲世仙尊2 小时前
类和对象中-构造函数与析构函数把初始化清理自动化
java·运维·自动化
七月吃橘子2 小时前
WSL2+Docker+Ollama,本地部署大模型实践(Qwen1.8b)
运维·docker·容器
贵州诚鑫致达科技有限公司2 小时前
PVID 是什么?端口参数三身份
服务器·经验分享
PC2005-cloud2 小时前
MySQL学习笔记:GTID 主从复制,从原理到实践,告别传统 Binlog+Position 的痛点
笔记·学习·mysql
影视飓风TIM2 小时前
Linux 进程信号原理与剖析
linux·运维·服务器
缘友一世2 小时前
开源 Linux截图工具闪构(SnapForge)
linux·运维·ubuntu·开源·截图