diff --git a/README.md b/README.md index df7ff0a..fe65020 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,75 @@ -# template_repository +# RustDesk Startscripte – Techniverse Fernwartung +Startscripte für [RustDesk](https://rustdesk.com/), vorkonfiguriert für den **Techniverse Fernwartungsserver**. +Der Endnutzer erhält ein einfaches Script, das RustDesk startet, den Server konfiguriert und nach Beendigung alles sauber aufräumt. +--- +## Scripte im Überblick -Wichtig: Link für Lizenz anpassen. +| Script | Beschreibung | +|---|---| +| `START Rustdesk lokal.cmd` | Startet eine **lokal vorhandene** `rustdesk.exe` mit Techniverse-Serverkonfiguration. | +| `START Rustdesk Online-DL.cmd` | Lädt die **neueste RustDesk-Version** von GitHub herunter, konfiguriert und startet sie. Der Nutzer braucht nur diese eine Datei. | +--- +## Schnellstart + +### Variante 1 – Lokal (offline-fähig) + +1. `rustdesk.exe` neben das Script `START Rustdesk lokal.cmd` legen. +2. Script per Doppelklick starten. +3. Die angezeigte **ID** und das **Einmalpasswort** dem Techniverse-Support mitteilen. +4. RustDesk schließen – das Script räumt automatisch auf. + +### Variante 2 – Online-Download + +1. `START Rustdesk Online-DL.cmd` per Doppelklick starten. +2. Das Script lädt RustDesk automatisch von GitHub herunter. +3. Die angezeigte **ID** und das **Einmalpasswort** dem Techniverse-Support mitteilen. +4. RustDesk schließen – das Script räumt automatisch auf (inkl. Download). + +> **Hinweis:** Für die Online-Variante wird eine Internetverbindung benötigt. + +--- + +## Funktionsweise (Kurzfassung) + +Beide Scripte führen folgende Schritte aus: + +1. Bestehende RustDesk-Konfiguration sichern (Backup) +2. Techniverse-Serverkonfiguration schreiben +3. RustDesk starten +4. Warten, bis der Nutzer RustDesk schließt +5. Konfiguration wiederherstellen / aufräumen + +Technische Details findest du in der [Dokumentation](docs/TECHNIK.md). + +--- + +## Voraussetzungen + +- **Windows 10** oder neuer (ANSI-Farbcodes werden genutzt) +- Online-Variante: PowerShell 5.1+, Internetzugang, TLS 1.2 + +--- + +## Konfiguration anpassen + +Die Serverdaten können in beiden Scripten im Abschnitt **KONFIGURATION** geändert werden: + +| Parameter | Beschreibung | +|---|---| +| `SERVER` / `$srv` | Rendezvous- und Relay-Server-Adresse | +| `KEY` / `$key` | Öffentlicher Schlüssel des Servers | +| `API_SERVER` / `$api` | Optionaler API-Server (leer lassen wenn nicht benötigt) | + +--- + +## Lizenz + +[MIT License](./LICENSE) – © 2026 Patrick Asmus

diff --git a/START Rustdesk Online-DL.cmd b/START Rustdesk Online-DL.cmd new file mode 100644 index 0000000..621c5b0 --- /dev/null +++ b/START Rustdesk Online-DL.cmd @@ -0,0 +1,151 @@ +@echo off +:: Techniverse Fernwartung - Online Version +:: Laedt RustDesk direkt von GitHub, konfiguriert den Server und startet +:: Der Nutzer braucht NUR diese eine Datei. +title Techniverse Fernwartung - Online +chcp 65001 >nul 2>&1 + +set "PS1=%TEMP%\techniverse-starter.ps1" + +:: PS1 aus dem eingebetteten Block extrahieren (alles zwischen BEGIN_PS1 und END_PS1) +setlocal +set "FOUND=" +(for /f "usebackq delims=" %%a in ("%~f0") do ( + if defined FOUND ( + if "%%a"==":: END_PS1" (goto :run_ps1) + echo(%%a + ) + if "%%a"==":: BEGIN_PS1" set "FOUND=1" +)) > "%PS1%" + +:run_ps1 +endlocal +powershell.exe -NoProfile -ExecutionPolicy Bypass -File "%PS1%" +del "%PS1%" >nul 2>&1 +exit /b + +:: BEGIN_PS1 +$ErrorActionPreference = 'Stop' +$Host.UI.RawUI.WindowTitle = 'Techniverse Fernwartung' + +# ========================== KONFIGURATION =========================== +# Server-Adresse (Rendezvous + Relay) +$srv = 'fernwartung.techniverse.net' +# Oeffentlicher Schluessel des Servers +$key = 'uE3lJCcnk21qN0VUdqtwJG6QAnpahdB5b2gVe40oMbU=' +# API-Server (optional) - Nur setzen wenn ein eigener API-Server vorhanden ist +# Beispiel: $api = 'api.beispiel.de' +$api = '' +# ==================================================================== + +$tmp = Join-Path $env:TEMP 'techniverse-fernwartung' +$cfgDir = Join-Path $env:APPDATA 'RustDesk\config' +$cfg2 = Join-Path $cfgDir 'RustDesk2.toml' +$cfg2Bak = Join-Path $cfgDir 'RustDesk2.toml.techniverse-bak' +$installDir = Join-Path $env:LOCALAPPDATA 'rustdesk' +$hadBackup = $false + +try { + Write-Host '' + Write-Host ' ==============================================' -F DarkCyan + Write-Host ' Techniverse Fernwartung (Online)' -F DarkCyan + Write-Host ' ==============================================' -F DarkCyan + Write-Host '' + + Get-Process rustdesk* -EA 0 | Stop-Process -Force -EA 0 + Start-Sleep 2 + + New-Item -ItemType Directory $tmp -Force | Out-Null + $exe = Join-Path $tmp 'rustdesk.exe' + + Write-Host " [1/4] Ermittle aktuelle RustDesk-Version..." -F White + [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 + $ProgressPreference = 'SilentlyContinue' + $rel = Invoke-RestMethod -Uri 'https://api.github.com/repos/rustdesk/rustdesk/releases/latest' -UseBasicParsing + $ver = $rel.tag_name -replace '^v','' + $asset = $rel.assets | Where-Object { $_.name -like 'rustdesk-*-x86_64.exe' } | Select-Object -First 1 + if (-not $asset) { throw 'Kein passender Download fuer x86_64 im neuesten Release gefunden.' } + $url = $asset.browser_download_url + Write-Host " Aktuelle Version: $ver" -F DarkGray + Write-Host " $url" -F DarkGray + Write-Host ' (Das kann einen Moment dauern...)' -F DarkGray + Invoke-WebRequest -Uri $url -OutFile $exe -UseBasicParsing + $ProgressPreference = 'Continue' + if (-not (Test-Path $exe)) { throw 'Download fehlgeschlagen' } + $mb = [math]::Round((Get-Item $exe).Length/1MB,1) + Write-Host " Heruntergeladen: $mb MB" -F DarkGray + + Write-Host ' [2/4] Sichere bestehende Konfiguration...' -F White + New-Item -ItemType Directory $cfgDir -Force | Out-Null + if (Test-Path $cfg2) { + Copy-Item $cfg2 $cfg2Bak -Force + $hadBackup = $true + Write-Host ' Backup erstellt.' -F DarkGray + } else { + Write-Host ' Keine bestehende Konfiguration.' -F DarkGray + } + + Write-Host ' [3/4] Konfiguriere Server...' -F White + $toml = @" +rendezvous_server = "$srv" +nat_type = 1 +serial = 0 + +[options] +custom-rendezvous-server = "$srv" +relay-server = "$srv" +key = "$key" +"@ + if ($api) { $toml += "`napi-server = `"$api`"" } + Set-Content -Path $cfg2 -Value $toml -Encoding UTF8 + + Write-Host ' [4/4] Starte RustDesk...' -F White + Start-Process $exe + Write-Host ' Warte auf Start...' -F DarkGray + Start-Sleep 8 + if (-not (Get-Process rustdesk* -EA 0)) { throw 'RustDesk konnte nicht gestartet werden.' } + + Write-Host '' + Write-Host ' ==============================================' -F DarkCyan + Write-Host ' RustDesk laeuft.' -F White + Write-Host ' Teile deine ID mit dem Techniverse-Support.' -F White + Write-Host '' + Write-Host ' Schliesse RustDesk um die Sitzung zu beenden.' -F DarkYellow + Write-Host ' Dieses Fenster NICHT schliessen.' -F Red + Write-Host ' ==============================================' -F DarkCyan + Write-Host '' + Write-Host ' !! ACHTUNG - BETRUGSWARNUNG !!' -F Red + Write-Host ' Teile deine ID und dein Einmalpasswort' -F DarkYellow + Write-Host ' NUR mit Personen, denen du vertraust!' -F DarkYellow + Write-Host ' RustDesk wird haeufig fuer Betrug missbraucht.' -F DarkYellow + Write-Host ' Techniverse wird dich NIE unaufgefordert' -F DarkYellow + Write-Host ' nach deiner ID oder deinem Passwort fragen.' -F DarkYellow + Write-Host '' + do { Start-Sleep 2 } while (Get-Process rustdesk* -EA 0) + +} catch { + Write-Host "`n FEHLER: $_" -F Red + Write-Host ' Bitte kontaktiere den Techniverse-Support.' -F DarkYellow + Write-Host '' + Read-Host ' Druecke Enter zum Beenden' +} finally { + Write-Host "`n Raeume auf..." -F DarkYellow + Get-Process rustdesk* -EA 0 | Stop-Process -Force -EA 0 + Start-Sleep 3 + if (Test-Path $cfg2Bak) { + Copy-Item $cfg2Bak $cfg2 -Force + Remove-Item $cfg2Bak -Force -EA 0 + } elseif (Test-Path $cfg2) { + Remove-Item $cfg2 -Force -EA 0 + } + if (Test-Path $installDir) { Remove-Item $installDir -Recurse -Force -EA 0 } + if (-not $hadBackup) { + $rdAD = Join-Path $env:APPDATA 'RustDesk' + if (Test-Path $rdAD) { Remove-Item $rdAD -Recurse -Force -EA 0 } + } + if (Test-Path $tmp) { Remove-Item $tmp -Recurse -Force -EA 0 } + Write-Host ' Aufgeraeumt. Bis zum naechsten Mal.' -F DarkGreen + Start-Sleep 3 +} +:: END_PS1 + diff --git a/START Rustdesk lokal.cmd b/START Rustdesk lokal.cmd new file mode 100644 index 0000000..31bca3d --- /dev/null +++ b/START Rustdesk lokal.cmd @@ -0,0 +1,165 @@ +@echo off +chcp 65001 >nul 2>&1 +title Techniverse Fernwartung +setlocal + +:: ============================================================ +:: Techniverse Fernwartung - RustDesk Portable Starter +:: Startet RustDesk mit vorkonfiguriertem Server +:: Räumt nach dem Beenden alles auf +:: ============================================================ + +:: ========================== KONFIGURATION =========================== +:: Server-Adresse (Rendezvous + Relay) +set "SERVER=fernwartung.techniverse.net" +:: Öffentlicher Schlüssel des Servers +set "KEY=uE3lJCcnk21qN0VUdqtwJG6QAnpahdB5b2gVe40oMbU=" +:: API-Server (optional) - Nur setzen wenn ein eigener API-Server vorhanden ist +:: Beispiel: set "API_SERVER=api.beispiel.de" +set "API_SERVER=" +:: ==================================================================== + +:: ANSI-Farbcodes definieren (Windows 10+) +for /f %%a in ('echo prompt $E ^| cmd') do set "ESC=%%a" +set "CYAN=%ESC%[36m" +set "WHITE=%ESC%[97m" +set "GRAY=%ESC%[90m" +set "YELLOW=%ESC%[33m" +set "RED=%ESC%[91m" +set "GREEN=%ESC%[32m" +set "RESET=%ESC%[0m" + +set "RUSTDESK_EXE=%~dp0rustdesk.exe" +set "CONFIGDIR=%APPDATA%\RustDesk\config" +set "CONFIG2=%CONFIGDIR%\RustDesk2.toml" +set "CONFIG2_BAK=%CONFIGDIR%\RustDesk2.toml.techniverse-bak" +set "INSTALLDIR=%LOCALAPPDATA%\rustdesk" + +:: Prüfe ob die RustDesk EXE vorhanden ist +if not exist "%RUSTDESK_EXE%" ( + echo. + echo %RED%FEHLER: rustdesk.exe nicht gefunden.%RESET% + echo %YELLOW%Bitte lege diese Datei neben %~nx0%RESET% + echo. + pause + exit /b 1 +) + +echo. +echo %CYAN%══════════════════════════════════════════════%RESET% +echo %CYAN% Techniverse Fernwartung%RESET% +echo %CYAN%══════════════════════════════════════════════%RESET% +echo. +echo %WHITE%RustDesk wird vorbereitet...%RESET% +echo. + +:: Eventuell laufende RustDesk-Instanzen beenden +taskkill /f /im rustdesk.exe >nul 2>&1 +timeout /t 2 /nobreak >nul + +:: Config-Verzeichnis erstellen falls nicht vorhanden +mkdir "%CONFIGDIR%" >nul 2>&1 + +:: Bestehende Config sichern (falls vorhanden) +echo %WHITE%[1/3] Sichere bestehende Konfiguration...%RESET% +if exist "%CONFIG2%" ( + copy /y "%CONFIG2%" "%CONFIG2_BAK%" >nul + echo %GRAY%Backup erstellt.%RESET% +) else ( + echo %GRAY%Keine bestehende Konfiguration gefunden.%RESET% +) + +:: Server-Konfiguration schreiben +echo %WHITE%[2/3] Konfiguriere Techniverse-Server...%RESET% +( +echo rendezvous_server = "%SERVER%" +echo nat_type = 1 +echo serial = 0 +echo. +echo [options] +echo custom-rendezvous-server = "%SERVER%" +echo relay-server = "%SERVER%" +echo key = "%KEY%" +) > "%CONFIG2%" +if defined API_SERVER ( + echo api-server = "%API_SERVER%" >> "%CONFIG2%" +) + +:: RustDesk starten +echo %WHITE%[3/3] Starte RustDesk...%RESET% +start "" "%RUSTDESK_EXE%" + +:: Warte kurz bis RustDesk sich initialisiert hat +echo %GRAY%Warte auf RustDesk-Start...%RESET% +timeout /t 8 /nobreak >nul + +:: Prüfe ob RustDesk tatsächlich läuft +tasklist /fi "imagename eq rustdesk.exe" 2>nul | find /i "rustdesk.exe" >nul +if errorlevel 1 ( + echo. + echo %RED%FEHLER: RustDesk konnte nicht gestartet werden.%RESET% + echo %YELLOW%Versuche es erneut oder kontaktiere den Support.%RESET% + echo. + pause + goto :cleanup +) + +echo. +echo %CYAN%══════════════════════════════════════════════%RESET% +echo %WHITE%RustDesk laeuft.%RESET% +echo %WHITE%Teile deine ID mit dem Techniverse-Support.%RESET% +echo. +echo %YELLOW%Schliesse RustDesk um die Sitzung zu beenden.%RESET% +echo %RED%Dieses Fenster NICHT schliessen.%RESET% +echo %CYAN%══════════════════════════════════════════════%RESET% +echo. +echo %RED% !! ACHTUNG - BETRUGSWARNUNG !!%RESET% +echo %YELLOW% Teile deine ID und dein Einmalpasswort%RESET% +echo %YELLOW% NUR mit Personen, denen du vertraust!%RESET% +echo %YELLOW% RustDesk wird haeufig fuer Betrug missbraucht.%RESET% +echo %YELLOW% Techniverse wird dich NIE unaufgefordert%RESET% +echo %YELLOW% nach deiner ID oder deinem Passwort fragen.%RESET% +echo. + +:: Warte bis alle RustDesk-Prozesse beendet sind (Polling-Schleife) +:waitloop +timeout /t 2 /nobreak >nul +tasklist /fi "imagename eq rustdesk.exe" 2>nul | find /i "rustdesk.exe" >nul +if not errorlevel 1 goto :waitloop + +:cleanup +echo. +echo %YELLOW%Raeume auf...%RESET% + +:: RustDesk Prozesse beenden (falls noch laufend) +taskkill /f /im rustdesk.exe >nul 2>&1 +timeout /t 3 /nobreak >nul + +:: Config wiederherstellen oder aufräumen +if exist "%CONFIG2_BAK%" ( + echo %GRAY%Stelle urspruengliche Konfiguration wieder her...%RESET% + copy /y "%CONFIG2_BAK%" "%CONFIG2%" >nul + del "%CONFIG2_BAK%" >nul 2>&1 +) else ( + echo %GRAY%Entferne Fernwartungs-Konfiguration...%RESET% + del "%CONFIG2%" >nul 2>&1 +) + +:: RustDesk-Installation aufräumen (entpackte Dateien) +if exist "%INSTALLDIR%" ( + echo %GRAY%Entferne RustDesk-Dateien...%RESET% + rmdir /s /q "%INSTALLDIR%" >nul 2>&1 +) + +:: RustDesk AppData aufräumen (nur wenn es vorher nicht installiert war) +if not exist "%CONFIG2_BAK%" ( + if exist "%APPDATA%\RustDesk" ( + echo %GRAY%Entferne RustDesk AppData...%RESET% + rmdir /s /q "%APPDATA%\RustDesk" >nul 2>&1 + ) +) + +echo %GREEN%Aufgeraeumt. Bis zum naechsten Mal.%RESET% +echo. +timeout /t 3 /nobreak >nul +exit /b 0 diff --git a/docs/TECHNIK.md b/docs/TECHNIK.md new file mode 100644 index 0000000..7b3711b --- /dev/null +++ b/docs/TECHNIK.md @@ -0,0 +1,101 @@ +# Technische Details + +## Ablauf der Scripte + +### START Rustdesk lokal.cmd + +``` +Batch-Script (.cmd) +│ +├── Prüfe ob rustdesk.exe neben dem Script liegt +├── Beende laufende RustDesk-Instanzen (taskkill) +├── Sichere bestehende RustDesk2.toml → .techniverse-bak +├── Schreibe Server-Konfiguration in RustDesk2.toml +├── Starte rustdesk.exe +├── Warte bis Nutzer RustDesk schließt (Polling-Schleife) +└── Cleanup + ├── Konfiguration aus Backup wiederherstellen (oder löschen) + ├── %LOCALAPPDATA%\rustdesk entfernen + └── %APPDATA%\RustDesk entfernen (nur wenn vorher nicht vorhanden) +``` + +### START Rustdesk Online-DL.cmd + +``` +Batch-Wrapper → extrahiert eingebettetes PowerShell-Script +│ +├── PowerShell-Code wird aus dem .cmd in %TEMP% extrahiert +├── Ermittle neueste RustDesk-Version via GitHub API +│ └── GET https://api.github.com/repos/rustdesk/rustdesk/releases/latest +├── Download von rustdesk-*-x86_64.exe nach %TEMP%\techniverse-fernwartung\ +├── Sichere bestehende RustDesk2.toml → .techniverse-bak +├── Schreibe Server-Konfiguration in RustDesk2.toml +├── Starte rustdesk.exe +├── Warte bis Nutzer RustDesk schließt (Polling-Schleife) +└── Cleanup (im finally-Block, läuft auch bei Fehler) + ├── Konfiguration aus Backup wiederherstellen (oder löschen) + ├── %LOCALAPPDATA%\rustdesk entfernen + ├── %APPDATA%\RustDesk entfernen (nur wenn vorher nicht vorhanden) + └── %TEMP%\techniverse-fernwartung\ entfernen +``` + +--- + +## Dateipfade + +| Pfad | Zweck | +|---|---| +| `%APPDATA%\RustDesk\config\RustDesk2.toml` | RustDesk-Konfigurationsdatei (Server, Key, etc.) | +| `%APPDATA%\RustDesk\config\RustDesk2.toml.techniverse-bak` | Backup der originalen Konfiguration | +| `%LOCALAPPDATA%\rustdesk\` | Von RustDesk entpackte Dateien (wird beim Cleanup entfernt) | +| `%TEMP%\techniverse-fernwartung\` | Temporärer Download-Ordner (nur Online-Variante) | +| `%TEMP%\techniverse-starter.ps1` | Temporär extrahiertes PowerShell-Script (nur Online-Variante) | + +--- + +## Generierte Konfiguration (RustDesk2.toml) + +```toml +rendezvous_server = "fernwartung.techniverse.net" +nat_type = 1 +serial = 0 + +[options] +custom-rendezvous-server = "fernwartung.techniverse.net" +relay-server = "fernwartung.techniverse.net" +key = "uE3lJCcnk21qN0VUdqtwJG6QAnpahdB5b2gVe40oMbU=" +``` + +Falls ein API-Server konfiguriert ist, wird zusätzlich `api-server` gesetzt. + +--- + +## Batch/PowerShell-Hybrid (Online-Variante) + +Das Online-Script nutzt einen Trick: Die `.cmd`-Datei enthält eingebetteten PowerShell-Code zwischen den Markern `:: BEGIN_PS1` und `:: END_PS1`. Der Batch-Teil extrahiert diesen Code in eine temporäre `.ps1`-Datei und führt sie aus. Dadurch braucht der Nutzer nur eine einzige Datei. + +**Ausführung:** `powershell.exe -NoProfile -ExecutionPolicy Bypass -File .ps1` + +--- + +## Cleanup-Verhalten + +Beide Scripte räumen nach dem Beenden von RustDesk auf: + +- **Backup vorhanden:** Die originale `RustDesk2.toml` wird wiederhergestellt, das Backup gelöscht. +- **Kein Backup:** Die geschriebene `RustDesk2.toml` wird gelöscht. Zusätzlich wird der gesamte `%APPDATA%\RustDesk`-Ordner entfernt (da RustDesk vorher nicht installiert war). +- **Installationsreste:** `%LOCALAPPDATA%\rustdesk` wird immer entfernt. +- **Online-Variante:** Der Cleanup läuft im `finally`-Block und wird auch bei Fehlern ausgeführt. + +--- + +## Voraussetzungen im Detail + +| Anforderung | Lokal | Online | +|---|---|---| +| Windows 10+ | ✅ | ✅ | +| Administratorrechte | ❌ | ❌ | +| Internetverbindung | ❌ | ✅ | +| PowerShell 5.1+ | ❌ | ✅ | +| TLS 1.2 | – | ✅ | +| rustdesk.exe im gleichen Ordner | ✅ | ❌ (wird heruntergeladen) |