RustDesk-Client anpassen und portable Version für den Supporter erstellen

Möchte man RustDesk OSS mit bestimmen Voreinstellungen verteilen oder gar eine portable Version bauen, so ist es hilfreich zu Wissen wo was gespeichert wird.

Dieser Beitrag basiert auf Version 1.2.3-1 der Open Source-Ausgabe.

Speicherort der Konfiguration

RustDesk speichert unter Windows seine Einstellungen unter

%APPDATA%\RustDesk\config

bzw. wenn es als Dienst installiert ist unter

C:\Windows\ServiceProfiles\LocalService\AppData\Roaming\RustDesk\config

D.h. man kann bestimmte Konfigurationsdateien (*.toml) hier ablegen bzw. überschreiben um z.B. Voreinstellungen festzulegen. Primär interessant sind hier

RustDesk_local.toml
RustDesk2.toml

denn diese enthalten einen Großteil der eigentlichen Konfiguration (ohne Favoriten, Adressbuch, …). Man sollte keinesfalls alle Dateien aus einer bestehenden Installation bzw. einer vorigen Ausführung von RustDesk verwenden, da mitunter eindeutige Daten wie beispielsweise Schlüssel oder Kennwörter dort hinterlegt sind. Die genannten Dateien können (nach aktuellem Kenntnistand) in der Regel ohne Anpassungen übernommen werden.

Möchte man eine portable Version von RustDesk erstellen, so muss man ebenfalls den genannten Pfad verwenden, da dieser bislang leider nicht verändert werden kann. Dieses Thema schwelt allerdings bereits seit Jahren vor sich hin.

Was kann oder sollte man anpassen

Grundsätzlich gilt alles was man nicht benötigt deaktiviert werden sollte. Nicht die schlechteste Idee ist es die Audio-Übertragung zu deaktivieren oder Stumm zu schalten um ungewollte Übermittlungen zu vermeiden.

Zuträglich für die Sicherheit kann sein, die “LAN-Erkennung” zu deaktivieren und ggf. die IP-Whitelist (nur den eigenen Relay-Server eintragen) zu verwenden.

Für feste Installationen von RustDesk (auch als Dienst, s.u.) kann es sinnvoll sein ein statisches Kennwort zu vergeben.

Baut man eine eigene RustDesk.exe oder verpackt diese um (s.u.) dann sollte “Beim Start auf Softwareaktualisierung prüfen” deaktiviert werden um mögliche Irritationen auf Benutzerseite zu vermeiden.

Server-Adresse und öffentlichen Schlüssel verstecken (für den spontanen Support)

Eine Gegebenheit bei RustDesk ist, das man relativ leicht und ungewollt den eigenen RustDesk Server OSS  samt öffentlichen Schlüssel (Public Key) exponieren kann. Wenn man aber nicht möchte, das jemand so leicht an diese Daten rankommen kann, muss man etwas kreativ werden.

Die offizielle Herangehensweise lautet RustDesk mit Server-Adresse und Key selbst zu kompilieren. Das setzt allerdings voraus das man eine entsprechende Build-Umgebung aufbaut und pflegt. (Imho) Einfacher ist es möglich die ausführbare RustDesk-Datei sozusagen umzuverpacken. Gemeint ist das man ein eigenes selbstentpackendes Archiv erstellt das alle Daten enthält. Unter Windows führt ein Weg über 7-Zip:

  • Die aktuelle RustDesk.exe herunterladen und den Dateinamen um “-host=<IP-oder-FQDN>,key=<PublicKey-des-Servers>,” erweitern.
  • Das aktuelle 7-Zip herunterladen und installieren.
  • Das aktuelle LZMA SDK herunterladen und entpacken.
  • Eine Text-Datei mit dem Namen “config.txt” und folgenden Inhalt erstellen:
    ;!@Install@!UTF-8!
    Title="RustDesk"
    ExecuteFile="rustdesk-host=-host=<IP-oder-FQDN>,key=<PublicKey-des-Servers>,.exe"
    ExecuteParameters=""
    ;!@InstallEnd@!
  • In einer Eingabeaufforderung folgenden Befehl ausführen:
    copy /b lzma2301\bin\7zSD.sfx + config.txt + "rustdesk-host=<IP-oder-FQDN>,key=<PublicKey-des-Servers>,.exe.7z" MyCustomRustDesk.exe

Den Namen der resultierenden *.exe-Datei kann man (natürlich) selbst wählen. Führt man diese Datei aus, wird das Archiv entpackt und RustDesk gestartet. Der Nachteil an dieser Variante ist, das nach wie vor Reste im System zurück bleiben und allem voran das die 7-Zip-Variante immer erhöhte Rechte anfordert. Das ist allerdings unpraktisch wenn ein Benutzer, der eben nur Benutzerrechte hat, RustDesk ausführen können soll.

Daher ist es besser eine Alternative zu verwenden. Während des Schreibens dieser Zeilen wurde nach weiteren Möglichkeiten gesucht, SFX-Dateien zu erstellen. Siehe

Selbstentpackendes Archiv das ein Skript oder eine Anwendung ausführt erstellen

Im Zuge der weiteren Tests wurde dann mit WinRAR gearbeitet. Geschickter ist insgesamt, statt direkt der Exe-Datei ein Skript zu starten, das nach dem Beenden von RustDesk aufräumt und so keine Reste im System zurückbleiben.

Vorbereitung 

Vorab sei angemerkt, es geht nachfolgend nicht um das Installieren von RustDesk, sondern darum ein SFX zu erstellen, das ein vorkonfiguriertes RustDesk für den spontanen Support ausführt.

  • Die aktuelle RustDesk.exe herunterladen und auf einem System ausführen.
  • Die gewünschte Konfiguration vornehmen und RustDesk beenden.
  • Aus dem Ordner “%APPDATA%\RustDesk\config” die Dateien “RustDesk_local.toml” und “RustDesk2.toml” kopieren.

Ein einfaches *.cmd-Skript (nicht empfohlen)

In einen Ordner das nachfolgende Batch-Skript, die RustDesk-Datei mit dem Namen “rustdesk.exe” und einen “config”-Unterordner mit den kopierten Konfigurationsdateien hinterlegen:

@echo off

title RustDesk - Spontaner Support

echo.
echo Die Fernwarnwartung wird gestartet, bitte warten...

rem Konfiguration kopieren

 xcopy /s /i /y "config" "%AppData%\RustDesk\config" >nul

rem RustDesk ausfuehren

 rustdesk.exe

rem Warten bis das RustDesk wirklich beendet ist,
rem andernfalls klappt das Aufraeumen nicht.

 :loop
 tasklist | find "rustdesk.exe" >nul
 if %ERRORLEVEL% equ 0 (
  timeout /t 1 >nul
  goto loop
 )

rem Ordner entfernen

 rmdir "%LocalAppData%\RustDesk" /S /Q >nul
 rmdir "%AppData%\RustDesk" /S /Q >nul

rem Beenden

 exit

Oldschool, i know, aber es läuft 😉Nebenbei bemerkt: PowerShell (statt Batch) habe ich ebenfalls versucht, aber da scheiterte es an der Execution-Policy, die je nach Konfiguration nicht vom gemeinen Benutzer geändert werden kann.

Nun in WinRAR ein neues SFX-Archiv mit folgendem Inhalt

config
rustdesk.exe
rustdesk.cmd

und mindestens diesen Einstellungen erstellen:

Die daraus resultierende *.exe-Datei kann ohne erhöhte Rechte ausgeführt, für den spontanen Support an Kunden gereicht oder auf der eigenen Homepage zum Download angeboten werden.

Die Nachteile an dieser Variante sind, das man ein Fenster der Eingabeaufforderung sieht und wenn der Benutzer Dieses schließt das Skript abgebrochen wird und so Reste im System zurückbleiben.

Wichtig: Diese Variante nimmt aktuell keine Rücksicht auf ein ggf. vorhandenes RustDesk!

Weiteres

In den weiteren Einstellungen von WinRAR lässt sich zudem beispielweise das Icon ändern, ein Text oder eine Lizenz hinterlegen und mehr. Eine Überlegung die man vielleicht anstellen sollte wäre das Setzen eines Kennwort (beim Erstellen des Archivs), so das nicht einfach jeder die Fernwartung starten bzw. erst gar nicht erst entpacken kann. Dies würde die Server-Adresse samt Public Key zusätzlich schützen.

AutoIt – Eine bessere Alternative zum einfachen *.cmd-Skript (empfohlen)

Wie so oft löst (für mich) AutoIt die eine oder andere Unzulänglichkeit (sichtbare Eingabeaufforderung, …) ganz einfach. Anbei der Quellcode für (m)eine “rustdesk-helper.au3”-Datei aus der man dann eine entsprechende *.exe-Datei kompiliert:

; Infobereichssymbol ausblenden

 #NoTrayIcon

; Konfigurationsordner verschieben
; Ziel: "%AppData%\RustDesk"

 DirMove (@WorkingDir & "\config", @AppDataDir & "\RustDesk\config", 0)

; RustDesk ausfuehren
; WICHTIG: Nicht rustdesk.exe verwenden!

 Run ("rustdesk-full.exe", "")

; Warten bis das RustDesk gestartet wurde
; Timeout: 60 Sekunden

 ProcessWait ("rustdesk.exe", 60)

; Warten bis RustDesk beendet wurde

 ProcessWaitClose ("rustdesk.exe", 0)

; Aufräumen
; Unter "%AppData%" und "%LocalAppData%" jeweils den RustDesk-Ordner entfernen

 DirRemove (@AppDataDir & "\RustDesk", 1)
 DirRemove (@LocalAppDataDir & "\rustdesk", 1)

Im *.zip-Archiv ist der oben gezeigte Quellcode und eine daraus kompilierte *.exe-Datei (64-bit) enthalten:

RustDesk-Helper.zip

Diese “rustdesk-helper.exe”-Datei verwendet man anstelle der “rustdesk.cmd” und lässt diese dann von WinRAR (SFX) ausführen. Vor dem Packen ist zu beachten, das man die “rustdesk.exe” in “rustdesk-full.exe” umbenennt!

Kurzum: (Imho) Einfacher, effizienter, versteckt (kein Fenster sichtbar) und vor allem ganz einfach!

Wichtig: Diese Variante nimmt aktuell keine Rücksicht auf ein ggf. vorhandenes RustDesk!

Hinweis: Um es an dieser Stelle noch mal ganz klar zu formulieren: 100%-ige Sicherheit gibt es nicht. Mit genug Wissen (aus diesem Beitrag), ein paar IT-Grundkenntnisse und einer woher auch immer stammenden angepassten RustDesk.exe kommt man dennoch relativ leicht an die Daten (gemeint ist Server-Adresse oder Public Key) heran. Mit diesen Daten kann jeder den eigenen RustDesk Server OSS nutzen. Dieser Tatsache muss man sich bewusst sein.

Und wenn man doch erhöhte Rechte benötigt?

Während einer Sitzung können erhöhte Rechte angefordert werden:

Zu beachten ist allerdings, wenn man die Daten selbst eingibt, das dennoch auf der entfernten Seite jemand zunächst einmal “Ja” klicken muss.

Ansonsten die via WinRAR-erstellte *.exe-Datei via “Rechtsklick – Als Administrator ausführen” starten um von vornherein erhöhte Rechte zu haben.

RustDesk als Dienst installieren

Im Gegensatz zu manch anderen Fernwartungslösungen gibt es bei RustDesk nur eine ausführbare Datei, die sowohl für die spontane Ausführung als auch für eine Installation verwendet werden kann. Daraus ergibt sich, das man zunächst die aktuelle RustDesk.exe herunterlädt und ausführt, anschließend klickt man links unten auf “Installieren”:

Man bestätigt den Installationspfad, ob Verknüpfungen angelegt werden sollen und stimmt der Lizenz zu. Nach der Installation und dem daraus resultierenden Neustart von RustDesk wird “Installieren” nicht mehr in der Oberfläche angezeigt. Darüber hinaus gibt es nun einen Dienst mit dem Namen “RustDesk Service” und dessen Konfiguration wird unter dem eingangs erwähnten Pfad gespeichert.

Achtung: Beendet man RustDesk über das Infobereichssymbol, wird der Dienst ebenfalls beendet und sogar entfernt!

RustDesk portable machen (für den Supporter)

Wegen der Einschränkung, das RustDesk in die eingangs genannten Ordner die Konfiguration speichert, muss man etwas tricksen um das Programm portable zu machen. Das nachfolgende Batch-Skript zusammen mit der aktuellen “rustdesk.exe” und einer ggf. vorhandenen Konfiguration in einen Ordner kopieren.

@echo off

title RustDesk - portable

echo.
echo RustDesk Portable wird gestartet, bitte warten...

rem Konfiguration kopieren

 xcopy /s /i /y "config" "%AppData%\RustDesk\config" >nul

rem RustDesk ausfuehren

 rustdesk.exe

rem Warten bis das RustDesk wirklich beendet ist,
rem andernfalls klappt das Aufraeumen nicht.

 :loop
 tasklist | find "rustdesk.exe" >nul
 if %ERRORLEVEL% equ 0 (
 timeout /t 1 >nul
 goto loop
 )

rem Die Konfiguration zurueck kopieren

 xcopy /s /i /y "%AppData%\RustDesk\config" "config" /exclude:exclude.txt >nul

rem Ordner entfernen

 rmdir "%LocalAppData%\RustDesk" /S /Q >nul
 rmdir "%AppData%\RustDesk" /S /Q >nul

rem Beenden

 exit

Die “exlude.txt” enthält folgende Einträge:

RustDesk.toml
RustDesk_hwcodec.toml

Startet man nun das Skript wird die Konfiguration nach APPDATA kopiert und RustDesk gestartet. Sobald es beendet wurde, wird die Konfiguration zurück kopiert und aufgeräumt.

Hinweis: Dieses Skript prüft in der aktuellen Form nicht, ob bereits jemand anders die portable Ausgabe ausführt. Darüber hinaus gibt es ein Fenster der Eingabeaufforderung das nicht geschlossen werden darf.

Erfolgreiche Fehlschläge

Zum Thema “Erfolgreicher Fehlschlag” anbei ein paar Ergebnisse aus einigen Test-Reihen was leider nicht funktioniert:

Das Ändern der Umgebungsvariablen um damit den Speicherort der Konfiguration selbst festlegen zu können waren alle samt nicht von Erfolg gekrönt.

Ändert man nur APPDATA ab, wird dies von RustDesk völlig ignoriert, naheliegend ist, das mittels System Call der Pfad ermittelt wird.

Interessanterweise liest und speichert RustDesk überhaupt keine Konfigurationsdateien mehr wenn man die Variable USERPROFILE ändert. Gleiches Spiel mit HOMEPATH.

Vermutlich wäre es schlicht zu einfach gewesen, auf diese Art RustDesk portable zu machen.

Beim Versuch via WinRAR und Batch das Fenster der Eingabeaufforderung wenigstens zu minimieren wurde u.a. der Befehl

cmd /c start /min rustdesk.cmd

versucht, aber das hatte den Nachteil, das ein Ordner unter “TMP” zurückbleibt, was wir natürlich nicht möchten, da in diesem wieder alles drin ist.

Wie geht es weiter?

Die hier gezeigten Skripte sind quasi Version  1, teilweise ist bereits eine Version 2 in Arbeit. In absehbarer Zeit wird es also das eine oder andere Update geben.

6 Kommentare

  1. squat0001

    Danke für diesen netten hilfreichen Blog Eintrag.

    zum Eintrag:
    das 7zip Modul räumt selbst auf wenn man das 7zSD.sfx verwendet, das erstellt ein Temp Verzeichnis und löscht die Daten. In der aktuell RustDesk Version 1.2.3, wenn man die Config in den Filenamen steckt, wird die Config aus dem Config File lokal nicht geladen, nicht geschrieben.

    Bevor für mich ein verändern der lokalen User Config in Frage käme, wozu auch ein verschieben/umbenennen zählt, würde ich den Client selbst bauen mit eigenem AppData Verzeichnis.

    Ich bin also beim Ansatz mit dem 7zip geblieben, habe aber das Manifest angepasst, sodass keine Admin Rechte notwendig sind.

    https://stackoverflow.com/a/27148617/1634374

  2. Flex

    Toller Beitrag, vielen Dank. Noch ein Hinweis. Wenn man ein permanenten Passwort mit in die Konfiguration einbinden möchte, muss auch die Datei RustDesk.toml mit in dem config Ordner sein.

    Für die Supportversion funktioniert das alles so wie beschrieben, ich hab es mit AutoIT Script gemacht.

    Wenn ich jetzt aber die Installationsversion ausführe, dann habe ich noch keine Möglichkeit gefunden, wie ich die config-Daten hier integrieren kann (also ID, Key und permanentes Passwort). Eine Anleitung dafür wäre sehr schön. Danke.

  3. Andy

    Ich habe bei meinen bisherigen Versuchen einfach mein vorkonfiguriertes “Profil” zuerst ans Ziel kopiert und dann erst RD installiert.
    Soweit ich es beurteilen kann, hat das funktioniert.

  4. Flex

    Hallo Andy. Danke für die Antwort. Das hat bei mir leider nicht funktioniert. Wenn ich vor der Installation die drei Dateien im “config” Ordner an den Zielordner in %appdata% und %windir% kopiere, wird es bei der Installation überschrieben.

    Wenn ich die Installation durchführe und abschließe, danach RD beende (auch über das Systemtray und dann die config-Dateien in die o. g. Ordner sind die Einstellungen beim nächsten Start vorhanden.

    Hab aber keine Möglichkeit gefunden, das alles “automatisiert” mit einem Installationsdurchgang umzusetzten, da ist immer manuelle Handarbeit nötig.

  5. Andy

    Hi,

    zum Thema selbst kompilieren. Man muss nicht unbedingt ein eigenes Buildsystem aufsetzen. Die Dateien lassen sich auch super über Actions auf Github kompilieren 🙂

    Ohne Premiumaccount dauert es zwar etwas aber es funktioniert.

    Um ein Fork zu erstellen der Privat ist kann folgender Link genutzt werden:

    https://github.com/new/import

    Danach einfach diese Anleitung befolgen und den Abschnitt für das forken überspringen

    https://rustdesk.com/docs/en/dev/build/all/

    Nun könnte man natürlich trotzdem dein Ansatz nutzen um das System zu bereinigen. Denn die Dateien werden totzdem abgelegt. Darin befinden sich dann aber nur die Server Adresse. Der Key ist nicht zu finden.

  6. blubaa

    2. Kommentarversuch + Ergänzung 🙂

    Vielen Dank für den tollen Beitrag.

    Ich habe dann noch etwas recheriert und herausgefunden, dass man nicht unbedingt eine eigene Buildumgebung aufbauen und pflegen muss. Über Github Action lässt sich der eigene, modifizierte Code compilieren.

    dafür habe ich einen privaten Fork erstellt:
    https://github.com/new/import

    Dann bin ich nach folgender Anleitung vorgegangen. (Absatz für Fork erstellen überspringen)
    https://rustdesk.com/docs/en/dev/build/all/

    nach etwa 40min waren meine releases erstellt.

    Wenn man nun die erstellte exe startet (am besten auf einem System testen, wo noch kein rustdesk installiert war) sind die Einstellungen für Server leer aber die Verbindung ist trotzdem aufgebaut.

    Da aber nun trotzdem Reste beim Kunden auf dem System zurückbleiben würden. Habe ich
    den Helpercode modifiziert und die Zeile zum kopieren der Configdateien entfernt. (wird nicht mehr benötigt) compiliert und wieder eine .exe mit winRAR erstellt. Hier muss man aber nur noch Rustdesk-full.exe (eigenes Build) und Rustdesk-helper.exe packen und ausführbar machen.

    Wenn man nun startet funktioniert alles wie gewohnt. Nach dem beenden werden die Reste aus dem AppData folder gelöscht. Und sollte das mal schieflaufen, findet man in den hinterlassenen dateien maximal die Serveradresse. Der Key ist nicht zu finden.

    beste Grüße Andy

Schreibe einen Kommentar

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

© 2024 Andy's Blog

Theme von Anders NorénHoch ↑