Rustdesk Server Installation, Tipps, Tricks

Wenn Du schon mal über die Nutzung von Rustdesk (Server) als Alternative zu Teamviewer & Co nachgedacht hast, dann findest Du hier einige Informationen um das System einmal zu testen, mögliche Herausforderungen und Limitierungen (der selfhosted Server Variante) und einige Tricks und Tipps.

Im letzten Artikel habe ich meine persönliche Reise durch die verschiedenen Fernwartungslösungen geschildert und bereits ein bisschen gespoilert. Wie dort erwähnt, nutze ich die kostenlose Rustdesk selfhosted Version auf einem VPS System bei einem Hoster, installiert im Docker Container. Die folgende Anleitung verwendet Docker und Docker Compose unter Debian Linux und basiert auf verschiedenen Internet Ressourcen, darunter möchte ich besonders einen Artikel über Rustdesk zum selber hosten auf Andy’s Blog und einen über Rustdesk als Alternative für AnyDesk und TeamViewer bei TECH-SUPPORT.KOELN hinweisen.

Für den Zugriff auf den VPS beim Hoster wird ein SSH Client und i.d.R. ein SSH-Key benötigt. Den Key kannst Du mit PuTTYgen generieren und als SSH Client kann ich den Bitvise SSH Client empfehlen.

Wenn Du keinen Hoster verwenden möchtest sondern eine lokale Installation bevorzugst, musst Du Dich um das Portforwarding / Firewall Freigaben kümmern:

21115:21119/tcp
21116/udp
Code-Sprache: Bash (bash)

Installation

Nach dem Login auf dem Linuxsystem muss zunächst die Docker und Docker Compose Installation durchgeführt werden. Ich persönlich lege immer einen Ordner „data“ im Rootverzeichnis an, in dem ich alle Daten ablege – auch wenn das vielleicht nicht der empfohlene oder sauberste Weg ist, hilft es mir, alle Daten kompakt zusammen zu halten.

apt-get install docker.io -y
apt-get install docker-compose -y
 
mkdir /data/docker-compose/rustdesk
cd /data/docker-compose/rustdesk

nano docker-compose.yml
Code-Sprache: Bash (bash)

In die docker-compose.yml kommt folgender Inhalt. Hier werden zwei Container angelegt, einer für den Rustdesk ID/Signaling Server (hbbs) und einen für den Rustdesk Relay Server (hbbr)
Zu beachten: Für den ersten Start muss der auskommentierte Parameter –key für die beiden Commands auskommentiert bleiben, damit das Key-Paar erzeugt wird.

version: '3.5'
 
services:
  hbbs:
    container_name: hbbs
    ports:
     - 21114:21114
     - 21115:21115
     - 21116:21116
     - 21116:21116/udp
     - 21118:21118
    image: rustdesk/rustdesk-server:latest
    command: hbbs -r <your-domain>:21117 #--key <private-key>
    volumes:
     - ./data/hbbs:/root
    networks:
     - net_rustdesk
    depends_on:
     - hbbr
    restart: unless-stopped
 
  hbbr:
    container_name: hbbr
    ports:
     - 21117:21117
     - 21119:21119
    image: rustdesk/rustdesk-server:latest
    command: hbbr #--key <private-key>
    volumes:
     - ./data/hbbr:/root
    networks:
     - net_rustdesk
    restart: unless-stopped
 
networks:
  net_rustdesk:
Code-Sprache: Dockerfile (dockerfile)

Nach dem Speichern der Datei starten wir das Ganze einmal (dauert eine Weile bis die Images aus dem Docker Repository geladen wurden) und beenden es wieder.

Anschließend können der Private- und der Public Key ausgelesen werden. Der Private Key muss an die entsprechende Stelle in der docker-compose.yml eingefügt werden (das Kommentarzeichen beim Parameter –key muss natürlich entfernt werden).

Warum machen wir das: Damit nur die Menschen den eigenen Rustdesk Verbindungsserver nutzen können, die den Public Key (und die URL/IP) kennen).

docker compose up -d
docker compose stop
 
# Private Key anzeigen und sicher speichern
cat /data/docker-compose/rustdesk/data/hbbs/id_ed25519
 
# Public Key anzeigen und sicher speichern
cat /data/docker-compose/rustdesk/data/hbbs/id_ed25519.pub

# Private Key in docker-compose.yml einfügen

docker compose up -dCode-Sprache: PHP (php)

Und damit ist die Installation und Einrichtung der Rustdesk Server bereits fertig. Einfach, oder?

Auf der Seite von TECH-SUPPORT.KOELN (siehe Link oben im Text) findet sich auch noch ein sinnvolles Update Script um das System einfach aktualisieren zu können.

Client-Konfiguration

Kommen wir also zum Client. Diesen kann man für verschiedenste Betriebssysteme unter https://github.com/rustdesk/rustdesk/releases/ herunterladen.

Standardmäßig verbindet sich der Client mit den öffentlichen Rustdesk ID und Relayservern. Um unseren eigenen Server zu nutzen, müssen wir in die Einstellungen > Netzwerk > ID/Relay Server die Felder ID-Server (IP/Adresse des Servers) und Key (Public Key) konfigurieren. Ob das geklappt hat, sieht man im Programm auf der Hauptseite in der Statuszeile unten. Dort steht dann einfach nur Bereit. Im Falle des Public Server steht dort Bereit, für eine schnellere Verbindung richten Sie bitte Ihren eigenen Server ein.

Unter Einstellungen > Sicherheit > Permanentes Passwort festlegen kann man ein dauerhaftes Passwort für den unbeaufichtigten Zugriff hinterlegen.

Will man die Konfiguration nicht immer manuell durchführen oder es dem Kunden einfacher machen, kann man Serveradresse und Public Key im Dateinamen der rustdesk*.exe übergeben: rustdesk-host=<server-adresse>,key=<public-key>.exe

Installation und Verteilung

Für eine einfache Installation und Konfiguration des Rustdesk Clients (mit Serverinformationen und permanentem Passwort) habe ich ein Powershell-Script erstellt (mit Unterstützung von Gemini). Hierfür benötigt man einen Config String, diesen kann man bei einem Rustdesk Client, der bereits mit dem eigenen Server verbunden ist, exportieren. Dazu geht man wieder in Einstellungen > Netzwerk > ID/Relay Server und klickt dort auf das Kopieren-Symbol.

Das Script kann man nun entweder mit dem kopierten Config-String und dem einzustellenden, permanenten Passwort vorkonfigurieren oder diese Daten mittels Parameter übergeben, wenn man das Script in irgendeiner Automation verwenden möchte. Alternativ kann man es auch einfach interaktiv nutzen, indem man es ausführt ohne die Daten zu übergeben oder vorzubelegen. In dem Fall fragt es beide Werte ab. Ebenso ist es möglich, nur den Config String einzutragen und das Passwort abfragen zu lassen oder umgekehrt.

Das Script ist in Deutsch und Englisch in unserem Github Powershell-Repository verfügbar.

Darüber hinaus gibt es eine MSI und bei Winget leider nur eine ältere Version. Mit diesen und möglichen, weiteren Varianten der Verteilung der der Konfiguration habe ich mich bisher noch nicht beschäftigt.

Public-Key Dilemma

Die Verbindung zu den Rustdesk Servern ist durch die asymmetrische Verschlüsselung (Public-Key Verfahren) sehr sicher. Nur wer den Public Key hat, kann sich mit dem Server verbinden.

Allerdings ist der Sinn und Zweck eines Public Keys (z.B. bei der E-Mail Verschlüsselung) eben der, dass er öffentlich ist und jeder darauf zugreifen kann, um E-Mails an den Besitzer des zugehörigen Private-Keys zu verschlüsseln bzw. dessen gesendete E-Mails auf Echtheit zu überprüfen.

Im Falle des Rustdesk Servers wollen wir aber i.d.R. nicht jedem die Nutzung gestatten, sondern nur unseren eigenen Kunden. Daher müssen wir umsichtig mit der „Verteilung“ des Public Keys umgehen und nicht einfach eine EXE die den Key im Namen trägt, zum Download auf unserer Webseite zur Verfügung stellen. Daher habe ich (wieder mit ein wenig Hilfe von Gemini) ein PHP Script für WordPress erstellt, mittels dem man Downloads über eine ID und PIN Abfrage schützen kann. Meinen Kunden kann ich ID und PIN telefonisch durchgeben und sie können den „vorkonfigurierten“ Client herunterladen.

Für Kunden denen man spontanen Support leistet, könnte man einfach den „unkonfigurierten“ Client öffentlich zum Download anbieten und in dem Falle über die öffentlichen Server connecten (siehe dazu auch den Hinweis bei Tipps & Tricks).

Die beste Variante ist sicherlich, eine eigene Rustdesk.exe zu kompilieren, in der diese Daten bereits enthalten sind. Dafür muss man sich aber eine Buildumgebung aufbauen oder einen Fork bei Github erstellen und die dortigen Actions verwenden um einen automatischen Build zu realisieren. Das geht auch mit dem kostenlosen Github Plan.

Darüber hinaus gibt es ein inoffizielles Github Repository für einen Inoffiziellen Custom Rustdesk Client Generator, welchen ich demnächst mal ausprobieren will. Es gibt sogar eine gehostete Webseite des Autors über die man das Tools direkt benutzen kann: Inoffizieller Rustdesk Client Online Generator direkt benutzen kann. Ob man der Quelle vertraut und einen Client mit dem eigenen Public Key und Serveradresse generiert, muss jeder selbst entscheiden.

Wie man Serveradresse und öffentlichen Schlüssel mit anderen Mitteln verstecken kann, hat Andy in seinem Blogbeitrag RustDesk-Client anpassen und portable Version für den Supporter erstellen beschrieben und welche Möglichkeiten er sieht, den eigenen Rustdeskserver weiter abzusichern, findest Du unter Den RustDesk Server OSS weiter absichern.

Weitere Möglichkeiten den eigenen Rustdesk Server vor unbefugtem Zugriff abzusichern, gibt es wohl nur in der Pro Version.

Adressbuch-Manko

Leider gibt es in der kostenlosen Rustdesk Version kein synchronisiertes Adressbuch, dieses ist der Pro Version vorenthalten.

Die vermutlich einfachste und sinnvollste Möglichkeit ist es, die Verbindungsdaten wie ID und Passwort in einem Passwortmanager zu speichern. Nutzt man z.B. KeepassXC, kann man sogar einen Command in das URL-Feld eintragen um per Single-Click eine Verbindung starten zu können. Für Windows muss ein solcher Command so aussehen: cmd://rustdesk –connect <id>. Voraussetzung, dass dies funktioniert ist, dass man den Pfad zum Rustdesk Installationsordner (i.d.R. c:\program files\rustdesk) in die Umgebungsvariable PATH einträgt (KeepassXC danach einmal neu starten).

Wenn man die KeepassXC Datenbank nun noch auf andere Systeme synchronisiert (z.B. mittels lokaler Nextcloud), hat man ein überall verfügbares Adressbuch.

Eine andere Möglichkeit ist, dass man die einmal getätigten Verbindungen als Favoriten speichert, umbenennt und sich so zumindest ein lokales Adressbuch bastelt. Die zugehörigen .toml Dateien liegen unter %appdata%\rustdesk\config\peers und können von dort kopiert/gesichert und bei Bedarf auf ein anderes System übertragen werden.

Allerdings gibt es hierbei wohl einen Fallstrick, wenn man versucht eine automatische Synchronisation zwischen mehreren Systemen zu realisieren (z.B. mittels Robocopy) oder die Daten manuell zu kopieren, solange der Client ausgeführt wird. Wie jemand bei Reddit herausgefunden hat, muss man aufpassen (meine bisherigen Beobachtungen bestätigen dies für die Version 1.4.4 allerdings nicht):

When RustDesk is launched, it reads the „Favorites“ files, loads them in to the „Favorites“ section and writes them to the „/home/username/.config/rustdesk/RustDesk_local.toml“ file as a „fav=“ array. But when you exit the program it writes those back (either from memory or from the RustDesk_local.toml file; not sure which) to the „peers“ directory and deletes anything else that was there previously. So, importantly, if you sync while the program is loaded, that sync will be overwritten once the program is closed and you will lose whatever agents were synced during that time!

Noch eine Möglichkeit wäre einen eigenen Rustdesk API Server einzurichten. Die offizielle Version ist wie gesagt der Pro Edition vorenthalten, aber bei Github gibt es einige „Nachbauten“, eine auch vom Autor des oben genannten Client Generators: Inoffizieller Rustdesk API Server. Auch diesen werde ich mir demnächst wohl mal genauer anschauen.

Mobile / Android / iOS

Um bei Android und iOS Geräten die eigene Serverbindung zu konfigurieren und nicht eintippen zu müssen, kann man einen QR Code scannen. Dazu geht man in die Einstellungen und klickt auf den QR-Code-Scan-Button oben rechts. Der QR Code muss wie folgt aufgebaut sein: config={„host“: „xxx“, „key“: „xxx“}

Leider habe ich bisher keine Möglichkeit gefunden, die Verbindungen (Favoriten) auf das Smartphone zu übertragen oder zu importieren (wäre bei einem gerooteten Gerät möglich). Allerdings kann man natürlich auch hier auf die Keepass Datenbank zugreifen (z.B. KeepassDX bei Android), wenn auch nicht die Verbindung per Single-Click starten.

Auch ein Fernzugriff auf das Smartphone ist bei Rustdesk möglich (zumindest Android, iOS habe ich noch nicht getestet).

Sonstiges

  • Leider gibt es keine Möglichkeit den eigenen Anzeigenamen zu ändern, der beim entfernten Computer bei einer eingehenden Verbindung eingeblendet wird. Hier wird standardmäßig der Windows Username (und nichtmal der Windows Anzeigename!) angezeigt.

Tipps & Tricks kompakt

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert