Full stack example (hbbs + hbbr + rustdesk-api) with everything inline: public endpoints, a fixed Ed25519 key pair (secret on the servers, public on the API) and the JWT key. No .env required. The included key is an example and should be regenerated for production. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
RustDesk API
本项目使用 Go 实现了 RustDesk 的 API,并包含了 Web Admin 和 Web 客户端。
搭配lejianwen/rustdesk-server使用更佳。
lejianwen/rustdesk-serverfork自RustDesk Server官方仓库
- 解决了使用API链接超时问题
- 可以强制登录后才能发起链接
- 支持客户端websocket
特性
- PC端API
- 个人版API
- 登录
- 地址簿
- 群组
- 授权登录
- 支持
github,google和OIDC登录, - 支持
web后台授权登录 - 支持
LDAP(AD和OpenLDAP已测试), 如果API Server配置了LDAP
- 支持
- i18n
- Web Admin
- 用户管理
- 设备管理
- 地址簿管理
- 标签管理
- 群组管理
- Oauth 管理
- 配置LDAP, 配置文件或者环境变量
- 登录日志
- 链接日志
- 文件传输日志
- 快速使用web client
- i18n
- 通过 web client 分享给游客
- server控制(一些官方的简单的指令 WIKI)
- Web Client
- 自动获取API server
- 自动获取ID服务器和KEY
- 自动获取地址簿
- 游客通过临时分享链接直接远程到设备
- CLI
- 重置管理员密码
功能
API 服务
基本实现了PC端基础的接口。支持Personal版本接口,可以通过配置文件rustdesk.personal或环境变量RUSTDESK_API_RUSTDESK_PERSONAL来控制是否启用
| 登录 | |
![]() |
|
| 地址簿 | 群组 |
![]() |
![]() |
Web Admin:
-
使用前后端分离,提供用户友好的管理界面,主要用来管理和展示。前端代码在rustdesk-api-web
-
后台访问地址是
http://<your server>[:port]/_admin/ -
初次安装管理员为用户名为
admin,密码将在控制台打印,可以通过命令行更改密码
-
每个用户可以多个地址簿,也可以将地址簿共享给其他用户
-
分组可以自定义,方便管理,暂时支持两种类型:
共享组和普通组 -
可以直接打开webclient,方便使用;也可以分享给游客,游客可以直接通过webclient远程到设备
-
Oauth,支持了
Github,Google以及OIDC, 需要创建一个OAuth App,然后配置到后台- 对于
Google和Github,Issuer和Scopes不需要填写. - 对于
OIDC,Issuer是必须的。Scopes是可选的,默认为openid,profile,email. 确保可以获取sub,email和preferred_username github oauth app在Settings->Developer settings->OAuth Apps->New OAuth App中创建,地址 https://github.com/settings/developersAuthorization callback URL填写http://<your server[:port]>/api/oidc/callback,比如http://127.0.0.1:21114/api/oidc/callback
- 对于
-
登录日志
-
链接日志
-
文件传输日志
-
server控制
- LDAP 支持, 当在API Server上设置了LDAP(已测试AD和LDAP),可以通过LDAP中的用户信息进行登录 https://github.com/lejianwen/rustdesk-api/issues/114 ,如果LDAP验证失败,返回本地用户
Web Client:
- 如果已经登录了后台,web client将自动直接登录
- 如果没登录后台,点击右上角登录即可,api server已经自动配置好了
- 登录后,会自动同步ID服务器和KEY
- 登录后,会将地址簿自动保存到web client中,方便使用
自动化文档: 使用 Swag 生成 API 文档,方便开发者理解和使用 API。
CLI
# 查看帮助
./apimain -h
重置管理员密码
./apimain reset-admin-pwd <pwd>
安装与运行
相关配置
- 配置文件
- 参考
conf/config.yaml配置文件,修改相关配置。 - 如果
gorm.type是sqlite,则不需要配置mysql相关配置。 - 语言如果不设置默认为
zh-CN
环境变量
环境变量和配置文件conf/config.yaml中的配置一一对应,变量名前缀是RUSTDESK_API
下面表格并未全部列出,可以参考conf/config.yaml中的配置。
| 变量名 | 说明 | 示例 |
|---|---|---|
| TZ | 时区 | Asia/Shanghai |
| RUSTDESK_API_LANG | 语言 | en,zh-CN |
| RUSTDESK_API_APP_WEB_CLIENT | 是否启用web-client; 1:启用,0:不启用; 默认启用 | 1 |
| RUSTDESK_API_APP_REGISTER | 是否开启注册; true, false 默认false |
false |
| RUSTDESK_API_APP_SHOW_SWAGGER | 是否可见swagger文档;1显示,0不显示,默认0不显示 |
1 |
| RUSTDESK_API_APP_TOKEN_EXPIRE | token有效时长 | 168h |
| RUSTDESK_API_APP_DISABLE_PWD_LOGIN | 是否禁用密码登录; true, false 默认false |
false |
| RUSTDESK_API_APP_REGISTER_STATUS | 注册用户默认状态; 1 启用,2 禁用, 默认 1 | 1 |
| RUSTDESK_API_APP_CAPTCHA_THRESHOLD | 验证码触发次数; -1 不启用, 0 一直启用, >0 登录错误次数后启用 ;默认 3 |
3 |
| RUSTDESK_API_APP_BAN_THRESHOLD | 封禁IP触发次数; 0 不启用, >0 登录错误次数后封禁IP; 默认 0 |
0 |
| -----ADMIN配置----- | ---------- | ---------- |
| RUSTDESK_API_ADMIN_TITLE | 后台标题 | RustDesk Api Admin |
| RUSTDESK_API_ADMIN_HELLO | 后台欢迎语,可以使用html |
|
| RUSTDESK_API_ADMIN_HELLO_FILE | 后台欢迎语文件,如果内容多,使用文件更方便。 会覆盖 RUSTDESK_API_ADMIN_HELLO |
./conf/admin/hello.html |
| -----GIN配置----- | ---------- | ---------- |
| RUSTDESK_API_GIN_TRUST_PROXY | 信任的代理IP列表,以,分割,默认信任所有 |
192.168.1.2,192.168.1.3 |
| -----GORM配置----- | ---------- | --------------------------- |
| RUSTDESK_API_GORM_TYPE | 数据库类型sqlite或者mysql,默认sqlite | sqlite |
| RUSTDESK_API_GORM_MAX_IDLE_CONNS | 数据库最大空闲连接数 | 10 |
| RUSTDESK_API_GORM_MAX_OPEN_CONNS | 数据库最大打开连接数 | 100 |
| RUSTDESK_API_RUSTDESK_PERSONAL | 是否启用个人版API, 1:启用,0:不启用; 默认启用 | 1 |
| -----MYSQL配置----- | ---------- | ---------- |
| RUSTDESK_API_MYSQL_USERNAME | mysql用户名 | root |
| RUSTDESK_API_MYSQL_PASSWORD | mysql密码 | 111111 |
| RUSTDESK_API_MYSQL_ADDR | mysql地址 | 192.168.1.66:3306 |
| RUSTDESK_API_MYSQL_DBNAME | mysql数据库名 | rustdesk |
| RUSTDESK_API_MYSQL_TLS | 是否启用TLS, 可选值: true, false, skip-verify, custom |
false |
| -----RUSTDESK配置----- | ---------- | ---------- |
| RUSTDESK_API_RUSTDESK_ID_SERVER | Rustdesk的id服务器地址 | 192.168.1.66:21116 |
| RUSTDESK_API_RUSTDESK_RELAY_SERVER | Rustdesk的relay服务器地址 | 192.168.1.66:21117 |
| RUSTDESK_API_RUSTDESK_API_SERVER | Rustdesk的api服务器地址 | http://192.168.1.66:21114 |
| RUSTDESK_API_RUSTDESK_KEY | Rustdesk的key | 123456789 |
| RUSTDESK_API_RUSTDESK_KEY_FILE | Rustdesk存放key的文件 | ./conf/data/id_ed25519.pub |
| RUSTDESK_API_RUSTDESK_WEBCLIENT _MAGIC_QUERYONLINE |
Web client v2 中是否启用新的在线状态查询方法; 1:启用,0:不启用,默认不启用 |
0 |
| RUSTDESK_API_RUSTDESK_WS_HOST | 自定义Websocket Host | wss://192.168.1.123:1234 |
| ----PROXY配置----- | ---------- | ---------- |
| RUSTDESK_API_PROXY_ENABLE | 是否启用代理:false, true |
false |
| RUSTDESK_API_PROXY_HOST | 代理地址 | http://127.0.0.1:1080 |
| ----JWT配置---- | -------- | -------- |
| RUSTDESK_API_JWT_KEY | 自定义JWT KEY,为空则不启用JWT 如果没使用 lejianwen/rustdesk-server中的MUST_LOGIN,建议设置为空 |
|
| RUSTDESK_API_JWT_EXPIRE_DURATION | JWT有效时间 | 168h |
运行
docker运行
-
直接docker运行,配置可以通过挂载配置文件
/app/conf/config.yaml来修改,或者通过环境变量覆盖配置文件中的配置docker run -d --name rustdesk-api -p 21114:21114 \ -v /data/rustdesk/api:/app/data \ -e TZ=Asia/Shanghai \ -e RUSTDESK_API_LANG=zh-CN \ -e RUSTDESK_API_RUSTDESK_ID_SERVER=192.168.1.66:21116 \ -e RUSTDESK_API_RUSTDESK_RELAY_SERVER=192.168.1.66:21117 \ -e RUSTDESK_API_RUSTDESK_API_SERVER=http://192.168.1.66:21114 \ -e RUSTDESK_API_RUSTDESK_KEY=<key> \ lejianwen/rustdesk-api -
使用
docker compose,参考WIKI
下载release直接运行
源码安装
-
克隆仓库
git clone https://github.com/lejianwen/rustdesk-api.git cd rustdesk-api -
安装依赖
go mod tidy #安装swag,如果不需要生成文档,可以不安装 go install github.com/swaggo/swag/cmd/swag@latest -
编译后台前端,前端代码在rustdesk-api-web中
cd resources mkdir -p admin git clone https://github.com/lejianwen/rustdesk-api-web cd rustdesk-api-web npm install npm run build cp -ar dist/* ../admin/ -
运行
#直接运行 go run cmd/apimain.go #或者使用generate_api.go生成api并运行 go generate generate_api.go注意:使用
go run或编译后的二进制时,当前目录下必须存在conf和resources目录。如果在其他目录运行,可通过-c和环境变量RUSTDESK_API_GIN_RESOURCES_PATH指定绝对路径,例如:RUSTDESK_API_GIN_RESOURCES_PATH=/opt/rustdesk-api/resources ./apimain -c /opt/rustdesk-api/conf/config.yaml -
编译,如果想自己编译,先cd到项目根目录,然后windows下直接运行
build.bat,linux下运行build.sh,编译后会在release目录下生成对应的可执行文件。直接运行编译后的可执行文件即可。 -
打开浏览器访问
http://<your server[:port]>/_admin/,默认用户名密码为admin,请及时更改密码。
使用lejianwen/server-s6镜像运行
- 已解决链接超时问题
- 可以强制登录后才能发起链接
- github https://github.com/lejianwen/rustdesk-server
networks:
rustdesk-net:
external: false
services:
rustdesk:
ports:
- 21114:21114
- 21115:21115
- 21116:21116
- 21116:21116/udp
- 21117:21117
- 21118:21118
- 21119:21119
image: lejianwen/rustdesk-server-s6:latest
environment:
- RELAY=<relay_server[:port]>
- ENCRYPTED_ONLY=1
- MUST_LOGIN=N
- TZ=Asia/Shanghai
- RUSTDESK_API_RUSTDESK_ID_SERVER=<id_server[:21116]>
- RUSTDESK_API_RUSTDESK_RELAY_SERVER=<relay_server[:21117]>
- RUSTDESK_API_RUSTDESK_API_SERVER=http://<api_server[:21114]>
- RUSTDESK_API_KEY_FILE=/data/id_ed25519.pub
- RUSTDESK_API_JWT_KEY=xxxxxx # jwt key
volumes:
- /data/rustdesk/server:/data
- /data/rustdesk/api:/app/data #将数据库挂载
networks:
- rustdesk-net
restart: unless-stopped
其他
鸣谢
感谢所有做过贡献的人!







