RustDesk API
English Doc
本项目使用 Go 实现了 RustDesk 的 API,并包含了 Web Admin 和 Web 客户端。RustDesk 是一个远程桌面软件,提供了自托管的解决方案。
特性
- 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
- 自动获取地址簿
- 游客通过临时分享链接直接远程到设备
- v2 Preview
- 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/developers
Authorization callback URL
填写http://<your server[:port]>/api/oauth/callback
,比如http://127.0.0.1:21114/api/oauth/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中,方便使用
- 现已支持
v2 Preview
,访问路径是/webclient2

v2 preview
部署,参考WIKI
自动化文档: 使用 Swag 生成 API 文档,方便开发者理解和使用 API。
- 后台文档
<youer server[:port]>/admin/swagger/index.html
- PC端文档
<youer server[:port]>/swagger/index.html

CLI
# 查看帮助
./apimain -h
重置管理员密码
./apimain reset-admin-pwd <pwd>
安装与运行
相关配置
- 参考
conf/config.yaml
配置文件,修改相关配置。
- 如果
gorm.type
是sqlite
,则不需要配置mysql相关配置。
- 语言如果不设置默认为
zh-CN
lang: "en"
app:
web-client: 1 # 1:启用 0:禁用
register: false #是否开启注册
show-swagger: 0 #是否显示swagger文档
web-sso: true #是否显示web sso
token-expire: 168h #token有效时长
disable-pwd-login: false #是否禁用密码登录
gin:
api-addr: "0.0.0.0:21114"
mode: "release"
resources-path: 'resources'
trust-proxy: ""
gorm:
type: "sqlite"
max-idle-conns: 10
max-open-conns: 100
mysql:
username: "root"
password: "111111"
addr: "192.168.1.66:3308"
dbname: "rustdesk"
rustdesk:
id-server: "192.168.1.66:21116"
relay-server: "192.168.1.66:21117"
api-server: "http://192.168.1.66:21114"
key: "123456789"
personal: 1
logger:
path: "./runtime/log.txt"
level: "warn" #trace,debug,info,warn,error,fatal
report-caller: true
proxy:
enable: false
host: ""
jwt:
key: ""
expire-duration: 168h
ldap:
enable: false
url: "ldap://ldap.example.com:389"
tls: false
tls-verify: false
base-dn: "dc=example,dc=com"
bind-dn: "cn=admin,dc=example,dc=com"
bind-password: "password"
user:
base-dn: "ou=users,dc=example,dc=com"
enable-attr: "" #The attribute name of the user for enabling, in AD it is "userAccountControl", empty means no enable attribute, all users are enabled
enable-attr-value: "" # The value of the enable attribute when the user is enabled. If you are using AD, just set random value, it will be ignored.
filter: "(cn=*)"
username: "uid" # The attribute name of the user for usernamem if you are using AD, it should be "sAMAccountName"
email: "mail"
first-name: "givenName"
last-name: "sn"
sync: false # If true, the user will be synchronized to the database when the user logs in. If false, the user will be synchronized to the database when the user be created.
admin-group: "cn=admin,dc=example,dc=com" # The group name of the admin group, if the user is in this group, the user will be an admin.
环境变量
环境变量和配置文件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 |
-----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配置----- |
---------- |
---------- |
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 |
----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
-
编译,如果想自己编译,先cd到项目根目录,然后windows下直接运行build.bat
,linux下运行build.sh
,编译后会在release
目录下生成对应的可执行文件。直接运行编译后的可执行文件即可。
-
打开浏览器访问http://<your server[:port]>/_admin/
,默认用户名密码为admin
,请及时更改密码。
使用lejianwen/server-s6
镜像运行
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
其他
鸣谢
感谢所有做过贡献的人!
感谢你的支持!如果这个项目对你有帮助,请点个⭐️鼓励一下,谢谢!