RustDesk Server CLI工具使用指南:rustdesk-utils全功能解析
前言:为什么需要rustdesk-utils?
还在为RustDesk Server密钥管理头疼?无法快速诊断服务器连接问题?rustdesk-utils命令行工具(CLI工具)提供一站式解决方案,让你轻松管理密钥、诊断网络问题,保障远程桌面服务稳定运行。本文将系统介绍该工具的安装方法、核心功能及实战案例,帮助管理员提升运维效率。
读完本文你将掌握:
- 密钥对生成与验证的完整流程
- 服务器连接诊断的高级技巧
- 三种部署环境下的工具使用方法
- 常见问题的排查与解决策略
工具概述
rustdesk-utils是RustDesk Server配套的命令行工具集,采用Rust语言开发,提供密钥管理和服务器诊断两大核心功能。该工具随服务器软件一同发布,无需额外安装即可使用。
功能架构
技术特性
- 安全可靠:基于libsodium加密库实现密钥生成
- 跨平台:支持Linux、Windows、macOS等主流操作系统
- 轻量级:单一可执行文件,无外部依赖
- 易用性:简洁命令行接口,丰富错误提示
安装与环境配置
源码编译安装
# 克隆代码仓库
git clone https://gitcode.com/gh_mirrors/ru/rustdesk-server.git
cd rustdesk-server
# 编译发布版本
cargo build --release
# 验证安装
./target/release/rustdesk-utils --help
Docker环境使用
无需本地安装,直接通过Docker运行:
docker run --rm --entrypoint /usr/bin/rustdesk-utils \
rustdesk/rustdesk-server-s6:latest --help
系统包安装
Debian/Ubuntu系统可通过官方deb包安装:
# 下载对应版本的rustdesk-server-utils包
dpkg -i rustdesk-server-utils_<version>_amd64.deb
# 验证安装
rustdesk-utils --help
密钥管理详解
生成密钥对(genkeypair)
RustDesk Server采用Ed25519算法进行加密通信,需要生成公私钥对。使用genkeypair命令可快速创建符合规范的密钥:
rustdesk-utils genkeypair
输出示例:
Public Key: 8BLLhtzUBU/XKAH4mep3p+IX4DSApe7qbAwNH9nv4yA=
Secret Key: egAVd44u33ZEUIDTtksGcHeVeAwywarEdHmf99KM5ajwEsuG3NQFT9coAfiZ6nen4hfgNICl7upsDA0f2e/jIA==
安全最佳实践:
- 密钥存储:私钥应存储在安全加密的位置,避免明文保存
- 权限控制:设置文件权限为600,仅所有者可读写
- 定期轮换:建议每90天更新一次密钥对
- 备份策略:生成后立即离线备份,并存放在安全物理介质中
验证密钥对(validatekeypair)
当需要确认密钥对有效性或排查加密问题时,可使用validatekeypair命令:
rustdesk-utils validatekeypair <public_key> <secret_key>
成功验证示例:
rustdesk-utils validatekeypair \
"8BLLhtzUBU/XKAH4mep3p+IX4DSApe7qbAwNH9nv4yA=" \
"egAVd44u33ZEUIDTtksGcHeVeAwywarEdHmf99KM5ajwEsuG3NQFT9coAfiZ6nen4hfgNICl7upsDA0f2e/jIA=="
Key pair is VALID
常见错误及解决:
| 错误信息 | 可能原因 | 解决方案 |
|---|---|---|
| Invalid secret key | 私钥格式错误或Base64解码失败 | 检查私钥是否完整,无多余空格或换行 |
| Invalid Public key | 公钥长度不正确 | 确认公钥为44个字符的Base64编码字符串 |
| Key pair is INVALID | 公私钥不匹配 | 重新生成密钥对,确保公私钥对应 |
密钥文件管理
生成的密钥对需妥善保管,建议按以下方式存储:
# 创建密钥存储目录
mkdir -p /etc/rustdesk-server/keys
chmod 700 /etc/rustdesk-server/keys
# 生成并保存密钥对
rustdesk-utils genkeypair > /etc/rustdesk-server/keys/keypair.txt
chmod 600 /etc/rustdesk-server/keys/keypair.txt
# 分离公私钥
grep "Public Key" /etc/rustdesk-server/keys/keypair.txt | awk '{print $3}' > /etc/rustdesk-server/keys/public.key
grep "Secret Key" /etc/rustdesk-server/keys/keypair.txt | awk '{print $3}' > /etc/rustdesk-server/keys/private.key
服务器诊断工具(doctor)
doctor命令提供全方位的服务器健康检查,帮助管理员快速定位问题。
基本用法
rustdesk-utils doctor <server_address>
诊断内容详解
1. 网络层检测
2. 端口检测矩阵
| 端口 | 服务 | 协议 | 诊断结果 |
|---|---|---|---|
| 21114 | API服务 | TCP | OK in 42 ms |
| 21115 | NAT测试 | TCP | OK in 38 ms |
| 21116 | hbbs主端口 | TCP/UDP | OK in 27 ms |
| 21117 | hbbr中继 | TCP | OK in 31 ms |
| 21118 | hbbsWebSocket | TCP | OK in 45 ms |
| 21119 | hbbrWebSocket | TCP | OK in 39 ms |
3. 完整诊断示例
rustdesk-utils doctor rustdesk.example.com
Checking server: rustdesk.example.com
Found 2 IP addresses:
- 192.168.1.100
- 2001:db8::100
Checking IP address: 192.168.1.100
Is IPV4: true
Is IPV6: false
Reverse DNS lookup: 'rustdesk.example.com' MATCHES server address
TCP Port 21114 (API): OK in 42 ms
TCP Port 21115 (hbbs extra port for nat test): OK in 38 ms
TCP Port 21116 (hbbs): OK in 27 ms
TCP Port 21117 (hbbr tcp): OK in 31 ms
TCP Port 21118 (hbbs websocket): OK in 45 ms
TCP Port 21119 (hbbr websocket): OK in 39 ms
Checking IP address: 2001:db8::100
Is IPV4: false
Is IPV6: true
Reverse DNS lookup: 'rustdesk.example.com' MATCHES server address
TCP Port 21114 (API): OK in 58 ms
TCP Port 21115 (hbbs extra port for nat test): OK in 47 ms
TCP Port 21116 (hbbs): OK in 36 ms
TCP Port 21117 (hbbr tcp): OK in 42 ms
TCP Port 21118 (hbbs websocket): OK in 51 ms
TCP Port 21119 (hbbs websocket): OK in 48 ms
常见问题诊断案例
案例1:端口阻塞问题
TCP Port 21116 (hbbs): ERROR
排查步骤:
- 检查服务器防火墙规则:
ufw status或iptables -L - 验证服务是否正常运行:
systemctl status rustdesk-hbbs - 测试本地端口监听:
netstat -tlnp | grep 21116 - 检查云服务商安全组配置
案例2:DNS解析异常
Reverse DNS lookup: 'server-192-168-1-100.example.com' DOESN'T MATCH server address 'rustdesk.example.com'
解决方案:
- 检查DNS记录配置:
dig rustdesk.example.com A - 验证PTR记录设置:
dig -x 192.168.1.100 - 更新服务器主机名:
hostnamectl set-hostname rustdesk.example.com
高级应用场景
1. 密钥轮换自动化
创建定期轮换密钥的脚本:
#!/bin/bash
# 密钥轮换脚本 /usr/local/bin/rotate-rustdesk-keys.sh
# 备份旧密钥
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
mkdir -p /etc/rustdesk-server/keys/backup/$TIMESTAMP
cp /etc/rustdesk-server/keys/* /etc/rustdesk-server/keys/backup/$TIMESTAMP/
# 生成新密钥
rustdesk-utils genkeypair > /etc/rustdesk-server/keys/keypair.txt
grep "Public Key" /etc/rustdesk-server/keys/keypair.txt | awk '{print $3}' > /etc/rustdesk-server/keys/public.key
grep "Secret Key" /etc/rustdesk-server/keys/keypair.txt | awk '{print $3}' > /etc/rustdesk-server/keys/private.key
# 重启服务应用新密钥
systemctl restart rustdesk-hbbs
systemctl restart rustdesk-hbbr
# 验证服务状态
if systemctl is-active --quiet rustdesk-hbbs && systemctl is-active --quiet rustdesk-hbbr; then
echo "密钥轮换成功,新公钥: $(cat /etc/rustdesk-server/keys/public.key)"
else
echo "密钥轮换失败,正在回滚..."
cp /etc/rustdesk-server/keys/backup/$TIMESTAMP/* /etc/rustdesk-server/keys/
systemctl restart rustdesk-hbbs
systemctl restart rustdesk-hbbr
fi
2. 服务器健康监控集成
将doctor命令集成到Prometheus监控系统:
#!/bin/bash
# 监控脚本 /usr/local/bin/rustdesk-doctor-exporter.sh
METRIC_FILE="/var/lib/node_exporter/rustdesk_doctor.prom"
SERVER="rustdesk.example.com"
# 执行诊断并解析结果
DIAG_RESULT=$(rustdesk-utils doctor $SERVER)
# 提取端口状态指标
PORTS=("21114" "21115" "21116" "21117" "21118" "21119")
echo "# HELP rustdesk_port_status TCP port connectivity status (1=up, 0=down)" > $METRIC_FILE
echo "# TYPE rustdesk_port_status gauge" >> $METRIC_FILE
for PORT in "${PORTS[@]}"; do
if echo "$DIAG_RESULT" | grep "TCP Port $PORT" | grep -q "OK"; then
echo "rustdesk_port_status{port=\"$PORT\"} 1" >> $METRIC_FILE
else
echo "rustdesk_port_status{port=\"$PORT\"} 0" >> $METRIC_FILE
fi
done
# 提取响应时间指标
echo "# HELP rustdesk_port_latency_ms TCP port connection latency in milliseconds" >> $METRIC_FILE
echo "# TYPE rustdesk_port_latency_ms gauge" >> $METRIC_FILE
for PORT in "${PORTS[@]}"; do
LATENCY=$(echo "$DIAG_RESULT" | grep "TCP Port $PORT" | grep -oP '\d+ ms' | cut -d' ' -f1)
if [ -n "$LATENCY" ]; then
echo "rustdesk_port_latency_ms{port=\"$PORT\"} $LATENCY" >> $METRIC_FILE
else
echo "rustdesk_port_latency_ms{port=\"$PORT\"} NaN" >> $METRIC_FILE
fi
done
故障排除参考
工具自身问题
| 问题 | 解决方案 |
|---|---|
| 命令未找到 | 确认工具路径已添加到PATH:export PATH=$PATH:/path/to/rustdesk-utils |
| 权限被拒绝 | 使用sudo运行或检查文件权限:chmod +x rustdesk-utils |
| 编译失败 | 安装依赖:sudo apt install build-essential libssl-dev pkg-config |
密钥相关错误
| 错误 | 可能原因 | 解决步骤 |
|---|---|---|
| 服务器启动失败,日志显示密钥错误 | 密钥文件损坏或权限不当 | 1. 检查密钥文件权限 2. 验证密钥格式 3. 重新生成密钥对 |
| 客户端无法连接,提示密钥不匹配 | 公私钥不匹配或未正确配置 | 1. 使用validatekeypair验证 2. 确保服务器与客户端使用相同公钥 3. 检查环境变量配置 |
| 生成密钥时出现内存不足 | 系统资源限制 | 1. 检查系统内存使用 2. 关闭其他应用释放内存 3. 直接使用预生成密钥 |
总结与最佳实践
rustdesk-utils作为RustDesk Server的重要配套工具,为管理员提供了密钥管理和服务器诊断的关键功能。通过本文介绍的方法,你可以:
- 安全管理密钥:定期轮换密钥,采用加密存储
- 主动监控服务器:集成doctor命令到监控系统
- 自动化运维:编写脚本实现密钥轮换和状态检查
- 快速故障定位:利用诊断工具缩短排障时间
建议定期执行以下操作:
- 每周运行doctor命令检查服务器健康状态
- 每季度轮换一次密钥对
- 监控端口响应时间变化趋势
- 备份密钥对并存储在安全位置
通过合理利用rustdesk-utils工具,管理员可以显著提升RustDesk Server的安全性和可靠性,为远程办公提供稳定高效的支持。
下期预告
下一篇文章将深入探讨RustDesk Server的性能优化策略,包括负载均衡配置、带宽管理和高可用部署方案,敬请关注。
如果觉得本文有帮助,请点赞、收藏并关注作者,获取更多RustDesk Server管理技巧。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



