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 不匹配,按这个顺序排查:
- 看服务器日志 :
journalctl -u hbbs --no-pager | grep -i key - 确认 hbbs 加载的 key :日志里
Key: xxx=就是当前公钥 - 确认客户端 key :
RustDesk2.toml里的key = 'xxx=' - 两边逐字符对比 (注意
l和1、大小写、首尾空格) - 客户端改完 toml 重启服务 :
net stop RustDesk && net start RustDesk - 还不行就验证密钥对 :
./rustdesk-utils validatekeypair - 私钥损坏就重新生成 :
./rustdesk-utils genkeypair,写入文件,客户端填新公钥