Ce projet implémente l’API RustDesk en Go et inclut un panneau d’administration web ainsi qu’un client web.
Préférable avec lejianwen/rustdesk-server.
lejianwen/rustdesk-server est un fork du dépôt officiel RustDesk Server.
- Corrige le problème de délai d’attente de connexion API.
- Permet de forcer la connexion avant d’initier une session.
- Prend en charge le websocket côté client.
- API côté PC
- API personnelle
- Connexion
- Carnet d’adresses
- Groupes
- Authentification autorisée
- Prise en charge de la connexion
GitHub,GoogleetOIDC - Prise en charge de l’authentification via le
back office web - Prise en charge de
LDAP(AD et OpenLDAP testés), si le serveur API est configuré pour LDAP
- Prise en charge de la connexion
- i18n
- Web Admin
- Gestion des utilisateurs
- Gestion des appareils
- Gestion du carnet d’adresses
- Gestion des étiquettes
- Gestion des groupes
- Gestion OAuth
- Configuration LDAP via fichier ou variables d’environnement
- Journaux de connexion
- Journaux de connexion/liaison
- Journaux de transfert de fichiers
- Accès rapide au client web
- i18n
- Partage vers des invités via le client web
- Contrôle serveur (quelques commandes officielles simples : WIKI)
- Web Client
- Récupération automatique du serveur API
- Récupération automatique du serveur ID et de la clé
- Récupération automatique du carnet d’adresses
- Les invités peuvent accéder à distance au poste via un lien de partage temporaire
- CLI
- Réinitialisation du mot de passe administrateur
L’API de base du client PC est implémentée. La version personnelle est prise en charge et peut être activée via le fichier rustdesk.personal ou la variable d’environnement RUSTDESK_API_RUSTDESK_PERSONAL.
| Connexion | |
![]() |
|
| Carnet d’adresses | Groupes |
![]() |
![]() |
-
Le projet utilise une séparation front/back pour offrir une interface d’administration conviviale, principalement pour la gestion et l’affichage. Le code du front est dans rustdesk-api-web.
-
L’adresse d’accès au panneau d’administration est
http://<votre serveur>[:port]/_admin/. -
Lors de la première installation, l’administrateur est nommé
adminet le mot de passe est affiché dans la console. Il peut être modifié via la ligne de commande.
-
Chaque utilisateur peut avoir plusieurs carnets d’adresses et les partager avec d’autres utilisateurs.
-
Les groupes sont personnalisables. Deux types sont actuellement supportés :
groupe partagéetgroupe normal. -
Il est possible d’ouvrir directement le client web, ou de le partager à des invités qui peuvent accéder à distance aux postes via le client web.
-
OAuth : prise en charge de
GitHub,GoogleetOIDC. Il faut créer uneOAuth Apppuis la configurer dans le panneau d’administration.- Pour
GoogleetGitHub,IssueretScopesne sont pas requis. - Pour
OIDC,Issuerest obligatoire.Scopesest optionnel et par défautopenid,profile,email. Vérifiez que l’application a bien accès àsub,emailetpreferred_username. - La
GitHub OAuth Appest créée dansSettings->Developer settings->OAuth Apps->New OAuth App. Voir : https://github.com/settings/developers - Définir l’URL de callback :
http://<votre serveur[:port]>/api/oidc/callbackpar exemplehttp://127.0.0.1:21114/api/oidc/callback
- Pour
-
Journaux de connexion
-
Journaux de liaison/connexion
-
Journaux de transfert de fichiers
-
Contrôle du serveur
-
Mode simple: certaines commandes sont rendues conviviales et peuvent être exécutées directement depuis le panneau d’administration.
-
Mode avancé: les commandes peuvent être exécutées directement depuis le back-office.- Commandes officielles prises en charge
- Ajout de commandes personnalisées
- Exécution de commandes personnalisées
- Support LDAP : si LDAP est configuré sur le serveur API (AD et LDAP testés), les utilisateurs peuvent se connecter via leurs données LDAP. Voir : lejianwen#114. En cas d’échec LDAP, l’authentification revient à l’utilisateur local.
- Si vous êtes déjà connecté au panneau d’administration, le client web se connecte automatiquement.
- Si vous n’êtes pas connecté, cliquez sur le bouton de connexion en haut à droite ; le serveur API est déjà configuré automatiquement.
- Après la connexion, le serveur ID et la clé sont synchronisés automatiquement.
- Après la connexion, le carnet d’adresses est enregistré automatiquement dans le client web pour faciliter l’utilisation.
L’API est documentée via Swag pour faciliter la compréhension et l’utilisation de l’API par les développeurs.
- Documentation du back-office :
<votre serveur[:port]>/admin/swagger/index.html - Documentation côté PC :
<votre serveur[:port]>/swagger/index.html
# afficher l’aide
./apimain -h./apimain reset-admin-pwd <pwd>- Fichier de configuration
- Modifier la configuration dans
conf/config.yaml. - Si
gorm.typevautsqlite, la configuration MySQL n’est pas nécessaire. - Si la langue n’est pas définie, la valeur par défaut est
zh-CN.
Les variables d’environnement correspondent une par une aux configurations du fichier conf/config.yaml. Le préfixe est RUSTDESK_API.
Le tableau ci-dessous n’est pas exhaustif. Consultez le fichier conf/config.yaml pour le détail complet.
| Variable | Description | Exemple |
|---|---|---|
| TZ | Fuseau horaire | Asia/Shanghai |
| RUSTDESK_API_LANG | Langue | en, zh-CN |
| RUSTDESK_API_APP_WEB_CLIENT | Activer/désactiver le client web ; 1 = activé, 0 = désactivé ; actif par défaut | 1 |
| RUSTDESK_API_APP_REGISTER | Inscription activée ; true, false ; défaut false |
false |
| RUSTDESK_API_APP_SHOW_SWAGGER | Afficher Swagger ; 1 = oui, 0 = non ; défaut 0 |
1 |
| RUSTDESK_API_APP_TOKEN_EXPIRE | Durée de validité du token | 168h |
| RUSTDESK_API_APP_DISABLE_PWD_LOGIN | Désactiver la connexion par mot de passe ; true, false ; défaut false |
false |
| RUSTDESK_API_APP_REGISTER_STATUS | Statut par défaut des utilisateurs inscrits ; 1 = activé, 2 = désactivé, défaut 1 | 1 |
| RUSTDESK_API_APP_CAPTCHA_THRESHOLD | Seuil captcha ; -1 = désactivé, 0 = toujours, >0 = activé après N échecs ; défaut 3 |
3 |
| RUSTDESK_API_APP_BAN_THRESHOLD | Seuil de bannissement IP ; 0 = désactivé, >0 = bannir après N échecs ; défaut 0 |
0 |
| ----- CONFIG ADMIN ----- | --- | --- |
| RUSTDESK_API_ADMIN_TITLE | Titre du panneau d’administration | RustDesk Api Admin |
| RUSTDESK_API_ADMIN_HELLO | Message d’accueil admin, accepte du HTML | |
| RUSTDESK_API_ADMIN_HELLO_FILE | Fichier du message d’accueil, le fichier remplace la variable RUSTDESK_API_ADMIN_HELLO |
./conf/admin/hello.html |
| ----- CONFIG GIN ----- | --- | --- |
| RUSTDESK_API_GIN_TRUST_PROXY | IP proxy de confiance, séparées par des virgules ; par défaut accepte tout | 192.168.1.2,192.168.1.3 |
| ----- CONFIG GORM ----- | --- | --- |
| RUSTDESK_API_GORM_TYPE | Type de base de données (sqlite ou mysql), défaut sqlite |
sqlite |
| RUSTDESK_API_GORM_MAX_IDLE_CONNS | Nombre maximum de connexions inactives | 10 |
| RUSTDESK_API_GORM_MAX_OPEN_CONNS | Nombre maximum de connexions ouvertes | 100 |
| RUSTDESK_API_RUSTDESK_PERSONAL | Activer l’API personnelle ; 1 = activée, 0 = désactivée ; défaut activée | 1 |
| ----- CONFIG MYSQL ----- | --- | --- |
| RUSTDESK_API_MYSQL_USERNAME | Nom d’utilisateur MySQL | root |
| RUSTDESK_API_MYSQL_PASSWORD | Mot de passe MySQL | 111111 |
| RUSTDESK_API_MYSQL_ADDR | Adresse MySQL | 192.168.1.66:3306 |
| RUSTDESK_API_MYSQL_DBNAME | Nom de la base MySQL | rustdesk |
| RUSTDESK_API_MYSQL_TLS | Activer TLS ; valeurs possibles : true, false, skip-verify, custom |
false |
| ----- CONFIG RUSTDESK ----- | --- | --- |
| RUSTDESK_API_RUSTDESK_ID_SERVER | Adresse du serveur ID RustDesk | 192.168.1.66:21116 |
| RUSTDESK_API_RUSTDESK_RELAY_SERVER | Adresse du relay RustDesk | 192.168.1.66:21117 |
| RUSTDESK_API_RUSTDESK_API_SERVER | Adresse du serveur API RustDesk | http://192.168.1.66:21114 |
| RUSTDESK_API_RUSTDESK_KEY | Clé RustDesk | 123456789 |
| RUSTDESK_API_RUSTDESK_KEY_FILE | Fichier contenant la clé RustDesk | ./conf/data/id_ed25519.pub |
| RUSTDESK_API_RUSTDESK_AUTO_ADD_ADDRESS_BOOK_COLLECTION_ID | ID du carnet nommé auquel ajouter automatiquement les postes qui remontent leur sysinfo ; 0 = désactivé. L’entrée appartient au propriétaire du carnet et un poste déjà présent n’est pas dupliqué. |
0 |
| RUSTDESK_API_RUSTDESK_WEBCLIENT _MAGIC_QUERYONLINE |
Activer la nouvelle méthode de requête de statut en ligne dans le client web v2 ; 1 = activée, 0 = désactivée, défaut 0 |
0 |
| RUSTDESK_API_RUSTDESK_WS_HOST | Base HTTPS/WSS optionnelle du proxy WebSocket. Le client ajoute /id pour le port 21118 et /relay pour le port 21119 |
https://rdapi.example.com/webclient-ws |
| ---- PROXY ----- | --- | --- |
| RUSTDESK_API_PROXY_ENABLE | Activer le proxy : false, true |
false |
| RUSTDESK_API_PROXY_HOST | Adresse du proxy | http://127.0.0.1:1080 |
| ---- JWT ---- | --- | --- |
| RUSTDESK_API_JWT_KEY | Clé JWT personnalisée ; vide = JWT désactivé. Si vous n’utilisez pas MUST_LOGIN du serveur lejianwen/rustdesk-server, il est conseillé de laisser vide |
|
| RUSTDESK_API_JWT_EXPIRE_DURATION | Durée de validité JWT | 168h |
-
Exécution directe avec Docker. La configuration peut être modifiée en montant le fichier
/app/conf/config.yaml, ou en remplaçant les valeurs via des variables d’environnement.docker run -d --name rustdesk-api -p 21114:21114 \ -v /data/rustdesk/api:/app/data \ -e TZ=Asia/Shanghai \ -e RUSTDESK_API_LANG=fr \ -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
-
Utiliser
docker compose: voir WIKI
-
Cloner le dépôt
git clone https://github.com/lejianwen/rustdesk-api.git cd rustdesk-api -
Installer les dépendances
go mod tidy # installer swag si vous voulez générer la documentation ; sinon, vous pouvez l’ignorer go install github.com/swaggo/swag/cmd/swag@latest -
Compiler le front d’administration. Le code du front est dans 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/
-
Exécution
# exécution directe go run cmd/apimain.go # ou générer l’API puis exécuter go generate generate_api.go
Note : lors de l’utilisation de
go runou du binaire compilé, les dossiersconfetresourcesdoivent être présents dans le répertoire courant. Si vous exécutez ailleurs, vous pouvez spécifier un chemin absolu avec-cet la variable d’environnementRUSTDESK_API_GIN_RESOURCES_PATH, par exemple :RUSTDESK_API_GIN_RESOURCES_PATH=/opt/rustdesk-api/resources ./apimain -c /opt/rustdesk-api/conf/config.yaml
-
Compiler : si vous souhaitez compiler vous-même, placez-vous à la racine du projet. Sous Windows, exécutez
build.bat; sous Linux, exécutezbuild.sh. L’exécutable généré se trouve dans le dossierrelease. -
Ouvrez le navigateur sur
http://<votre serveur[:port]>/_admin/. Le nom d’utilisateur et le mot de passe par défaut sontadmin. Changez-le rapidement.
- Problème de délai d’attente de connexion corrigé
- Peut forcer la connexion avant de lancer une session
- 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 # clé JWT
volumes:
- /data/rustdesk/server:/data
- /data/rustdesk/api:/app/data # monter la base de données
networks:
- rustdesk-net
restart: unless-stoppedMerci à tous ceux qui ont contribué !





