This project implements the RustDesk API using Go, and includes both a web UI and web client. RustDesk is a remote desktop software that provides self-hosted solutions.
GitHub, Google and OIDC login, supports web admin authorized loginCLI
Reset admin password
Because the server version lags behind the client version, the server does not respond to the client's secure_tcp request, causing the client to timeout.
Relevant code can be found at https://github.com/rustdesk/rustdesk/blob/master/src/client.rs#L322
if !key.is_empty() && !token.is_empty() {
// mainly for the security of token
allow_err!(secure_tcp(&mut socket, key).await);
}
As seen, when both key and token are not empty, secure_tcp is called, but the server does not respond, causing the client to timeout.
The secure_tcp code is located at https://github.com/rustdesk/rustdesk/blob/master/src/common.rs#L1203
bash
hbbs -r <relay-server-ip[:port]> -k <key>
hbbr -k <key>
For example
bash
hbbs -r <relay-server-ip[:port]> -k abc1234567
hbbr -k abc1234567
secure_tcp to return directly, then compile using Github Actions and download the compiled client.
Refer to official documentation
secure_tcp. You can download and use it directly from here
Github Actions, encrypted connection, ready to useIf encryption is not a high priority, use 1. If encryption is important, use 3 or 4.
Basic implementation of the PC client's primary interfaces.Supports the Personal version api, which can be enabled by configuring the rustdesk.personal file or the RUSTDESK_API_RUSTDESK_PERSONAL environment variable.
GitHub, Google and OIDC login, which can be used after configuration in the admin panel. See the OAuth
configuration section for details.Groups are divided into shared groups and regular groups. In shared groups, everyone can see the peers of all group members, while in regular groups, only administrators can see all members' peers.
The frontend and backend are separated to provide a user-friendly management interface, primarily for managing and displaying data.Frontend code is available at rustdesk-api-web
Admin panel URL: http://<your server[:port]>/_admin/. The default username and password for the initial
installation are admin admin, please change the password immediately.

In the top right corner, you can change the password, switch languages, and toggle between day/night mode.shared group and regular group.

GitHub, Google and OIDC are supported. You need to create an OAuth App and configure it in
the admin panel.
Google and Github, you don't need to fill the Issuer and ScpoesOIDC, you must set the Issuer. And Scopes is optional which default is openid,email,profile, please make sure this Oauth App can access sub, email and preferred_usernameGitHub OAuth App
at Settings -> Developer settings -> OAuth Apps -> New OAuth App here.Authorization callback URL to http://<your server[:port]>/api/oauth/callback,
e.g., http://127.0.0.1:21114/api/oauth/callback.v2 Preview, accessible at /webclient2

v2 preview deployment, WIKI<your server[:port]>/admin/swagger/index.html<your server[:port]>/swagger/index.html

# help
./apimain -h
./apimain reset-admin-pwd <pwd>
conf/config.yaml.gorm.type is set to sqlite, MySQL-related configurations are not required.en and zh-CN are supported. The default is zh-CN.lang: "en"
app:
web-client: 1 # web client route 1:open 0:close
register: false #register enable
show-swagger: 0 #show swagger 1:open 0:close
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: ""
The prefix for variable names is RUSTDESK_API. If environment variables exist, they will override the configurations in the configuration file.
| Variable Name | Description | Example |
|---|---|---|
| TZ | timezone | Asia/Shanghai |
| RUSTDESK_API_LANG | Language | en,zh-CN |
| RUSTDESK_API_APP_WEB_CLIENT | web client on/off; 1: on, 0 off, default: 1 | 1 |
| RUSTDESK_API_APP_REGISTER | register enable; true, false; default:false |
false |
| RUSTDESK_API_APP_SHOW_SWAGGER | swagger visible; 1: yes, 0: no; default: 0 | 0 |
| ----- ADMIN Configuration----- | ---------- | ---------- |
| RUSTDESK_API_ADMIN_TITLE | Admin Title | RustDesk Api Admin |
| RUSTDESK_API_ADMIN_HELLO | Admin welcome message, you can use html |
|
| RUSTDESK_API_ADMIN_HELLO_FILE | Admin welcome message file, will override RUSTDESK_API_ADMIN_HELLO |
./conf/admin/hello.html |
| ----- GIN Configuration ----- | --------------------------------------- | ----------------------------- |
| RUSTDESK_API_GIN_TRUST_PROXY | Trusted proxy IPs, separated by commas. | 192.168.1.2,192.168.1.3 |
| ----- GORM Configuration ----- | --------------------------------------- | ----------------------------- |
| RUSTDESK_API_GORM_TYPE | Database type (sqlite or mysql). Default is sqlite. |
sqlite |
| RUSTDESK_API_GORM_MAX_IDLE_CONNS | Maximum idle connections | 10 |
| RUSTDESK_API_GORM_MAX_OPEN_CONNS | Maximum open connections | 100 |
| RUSTDESK_API_RUSTDESK_PERSONAL | Open Personal Api 1:Enable,0:Disable | 1 |
| ----- MYSQL Configuration ----- | --------------------------------------- | ----------------------------- |
| RUSTDESK_API_MYSQL_USERNAME | MySQL username | root |
| RUSTDESK_API_MYSQL_PASSWORD | MySQL password | 111111 |
| RUSTDESK_API_MYSQL_ADDR | MySQL address | 192.168.1.66:3306 |
| RUSTDESK_API_MYSQL_DBNAME | MySQL database name | rustdesk |
| ----- RUSTDESK Configuration ----- | --------------------------------------- | ----------------------------- |
| RUSTDESK_API_RUSTDESK_ID_SERVER | Rustdesk ID server address | 192.168.1.66:21116 |
| RUSTDESK_API_RUSTDESK_RELAY_SERVER | Rustdesk relay server address | 192.168.1.66:21117 |
| RUSTDESK_API_RUSTDESK_API_SERVER | Rustdesk API server address | http://192.168.1.66:21114 |
| RUSTDESK_API_RUSTDESK_KEY | Rustdesk key | 123456789 |
| RUSTDESK_API_RUSTDESK_KEY_FILE | Rustdesk key file | ./conf/data/id_ed25519.pub |
| RUSTDESK_API_RUSTDESK_WEBCLIENT_MAGIC_QUERYONLINE | New online query method is enabled in the web client v2; '1': Enabled, '0': Disabled, not enabled by default | 0 |
| ---- PROXY ----- | --------------- | ---------- |
| RUSTDESK_API_PROXY_ENABLE | proxy_enable :false, true |
false |
| RUSTDESK_API_PROXY_HOST | proxy_host | http://127.0.0.1:1080 |
Run directly with Docker. Configuration can be modified by mounting the config file /app/conf/config.yaml, or by
using environment variables to override settings.
docker run -d --name rustdesk-api -p 21114:21114 \
-v /data/rustdesk/api:/app/data \
-e RUSTDESK_API_LANG=en \
-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=abc123456 \
lejianwen/rustdesk-api
Using docker-compose,look WIKI
Download the release from release.
Clone the repository:
git clone https://github.com/lejianwen/rustdesk-api.git
cd rustdesk-api
Install dependencies:
go mod tidy
# Install Swag if you need to generate documentation; otherwise, you can skip this step
go install github.com/swaggo/swag/cmd/swag@latest
Build the admin front-end (the front-end code is in 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/
Run:
# Run directly
go run cmd/apimain.go
# Or generate and run the API using generate_api.go
go generate generate_api.go
To compile, change to the project root directory. For Windows, run build.bat, and for Linux, run build.sh. After
compiling, the corresponding executables will be generated in the release directory. Run the compiled executables
directly.
Open your browser and visit http://<your server[:port]>/_admin/, with default credentials admin admin. Please
change the password promptly.