Tactical RMM

Tactical RMM ist ein Open-Scource Tool zur Fernüberwachung und -verwaltung, das mit Django, Vue und Golang entwickelt wurde. Es verwendet einen in Golang geschriebenen Agenten und ist mit MeshCentral integriert.

Aktualisieren des RMM

Server auf dem neuesten Stand halten

Sie sollten in regelmäßigen Abständen sudo apt update und sudo apt -y upgrade ausführen, um Ihren Server auf dem neuesten Stand zu halten. Ansonsten sollten Sie keine Änderungen an Ihrem Server vornehmen und alles andere dem Skript update.sh überlassen.

Versuchen Sie NICHT, Betriebssystem-Upgrades an Ort und Stelle durchzuführen, wie z.B. ein Upgrade von Debian 11 auf 12 an Ort und Stelle. Sie werden Ihren Server zerstören!

Aktualisierung auf die neueste RMM-Version¶

Machen Sie vor dem Update immer ein Backup rsp. ein Snapshot der aktuellen Installation

Melden Sie sich per SSH an Ihren Server an mit dem Benutzer, den Sie während der Installation angelegt haben.

Führen Sie niemals Update-Skripte oder -Befehle als Root-Benutzer aus. Das bringt die Berechtigungen durcheinander und macht Ihre Installation kaputt.

Laden Sie das Update-Skript herunter und führen Sie es aus:

wget -N https://raw.githubusercontent.com/amidaware/tacticalrmm/master/update.sh
chmod +x update.sh
./update.sh

Wenn Sie bereits auf der neuesten Version sind, wird das Update-Skript Sie darüber informieren und sofort zurückkehren.

Sie können die optionale Option --force an das Update-Skript übergeben, um ein Update zu erzwingen, wodurch die Prüfung auf die neueste Version umgangen wird.

wget -N https://raw.githubusercontent.com/amidaware/tacticalrmm/master/update.sh
chmod +x update.sh
./update.sh --force

Dies ist nützlich für eine verpfuschte Aktualisierung, die möglicherweise nicht vollständig abgeschlossen wurde.

Das Update-Skript korrigiert auch alle Berechtigungen, die während eines verpfuschten Updates durcheinander geraten sind, oder wenn Sie das Update-Skript versehentlich als Root-Benutzer ausgeführt haben.

Versuchen Sie nicht, MeshCentral manuell auf eine neuere Version zu aktualisieren. Sie sollten dies dem update.sh-Skript überlassen. Die Entwickler testen MeshCentral und stellen sicher, dass die Integration nicht unterbrochen wird, bevor sie die Mesh-Version aktualisieren.

Aktualisieren des Let's Encrypt SSL-Zertifikat

Derzeit erneuert das Update-Skript Ihr Let's Encrypt-Wildcard-Zertifikat, das alle 3 Monate abläuft, nicht automatisch, da es nicht ohne weiteres möglich ist, dies mit der DNS-TXT-Eintragsmethode zu automatisieren.

Let's Encrypt Wildcard Zertifikat erneuern

Um Ihre Let's Encrypt Wildcard Cert SSL-Zertifikate zu erneuern und zu aktualisieren, führen Sie den folgenden Befehl aus, wobei Sie example.com durch Ihre Domain und admin@example.com durch Ihre E-Mail-Adresse ersetzen:

sudo certbot certonly --manual -d *.example.com --agree-tos --no-bootstrap --preferred-challenges dns -m admin@example.com --no-eff-email
DNS TXT Eintrag aktualisieren

Die Propagierung von TXT-Einträgen kann je nach DNS-Anbieter zwischen 1 Minute und einigen Stunden dauern.
Bevor Sie die Eingabetaste drücken, sollten Sie überprüfen, ob der TXT-Datensatz bereitgestellt wurde.
Mit dem folgenden Befehl können Sie dies schnell überprüfen:
dig -t txt _acme-challenge.example.com (nicht vom TRMM-Server)
oder testen Sie mit: https://viewdns.info/dnsrecord/ Enter: _acme-herausforderung.beispiel.com

image.png

image.png

Neues Wildcard Zertifikat einbinden

Das erneuerte Zertifikat wird immer noch vollständig in Tactical verwendet. Führen Sie nun das Update Skript.

./update.sh --force

Linux Agent Installation & Management

📘 Zweck

Dieses Dokument beschreibt die Installation, Aktualisierung und Deinstallation des Linux-Agents über das bereitgestellte linuxrmm.sh-Skript.
Das Skript bindet Linux-Systeme an TacticalRMM / MeshCentral an und automatisiert die gesamte Einrichtung.


🧩 Voraussetzungen


🗝️ Parameterquellen in TacticalRMM

Da die Funktion „Add Linux Agent“ in unserer Umgebung derzeit nicht aktiv ist, müssen die Parameter manuell eingetragen werden.
Die folgenden Werte können direkt im TacticalRMM-Dashboard abgelesen werden:

Parameter Beschreibung Wo im TacticalRMM zu finden
<MESH_URL> Download-Link des Mesh Agents (Linux Installer) TacticalRMM → Settings → Global Settings → MeshCentral → Abschnitt Mesh Settings → Eintrag "Linux Agent Download URL"
<API_URL> URL zur TacticalRMM API TacticalRMM → Settings → Global Settings → Feld "Base API URL" (z. B. https://rmm.example.com)
<CLIENT_ID> Eindeutige Kunden-ID TacticalRMM → Clients → Kunde auswählen → Browser-Adresszeile (/clients/3) oder Tooltip „Client ID“
<SITE_ID> Standort-ID des Kunden TacticalRMM → Clients → Sites → Site auswählen → ID in der Adresszeile (/sites/1)
<AUTH_KEY> Installationsschlüssel (Authentifizierung) TacticalRMM → Settings → API Keys → Kategorie Agent Auth Keys → Neuen Key erstellen oder bestehenden verwenden
<AGENT_TYPE> Typ der Installation (server / workstation) Nach internem Standard definieren – dient der Unterscheidung im Dashboard

⚠️ Hinweis:
Auth-Keys und API-URLs sind sensibel und dürfen nicht in öffentlichen oder gemeinsam genutzten Dokumenten gespeichert werden.
Alle Parameter können auch über Administrator-Zugriff direkt aus den TacticalRMM-Einstellungen exportiert werden.


⚙️ Installation

🔧 Syntax

sudo bash linuxrmm.sh install <MESH_URL> <API_URL> <CLIENT_ID> <SITE_ID> <AUTH_KEY> <AGENT_TYPE>

💡 Beispiel

sudo bash linuxrmm.sh install \
"https://mesh.example.com/agent-linux64.sh" \
"https://rmm.example.com" \
3 1 "abcdefgh123456789" "server"

Das Skript lädt den passenden Agent (basierend auf der Systemarchitektur) herunter,
konfiguriert ihn automatisch für den Mandanten und startet den Systemdienst.


🔁 Update des Linux-Agents

sudo bash linuxrmm.sh update

Der laufende Dienst wird gestoppt, aktualisiert und automatisch neu gestartet.
Verbindungen zu TacticalRMM und MeshCentral bleiben erhalten.


❎ Deinstallation

🔧 Syntax

sudo bash linuxrmm.sh uninstall <MESH_FQDN> <MESH_ID>

💡 Beispiel

sudo bash linuxrmm.sh uninstall mesh.example.com A1B2C3D4E5

Der lokale Dienst und alle Dateien werden entfernt.
Der Eintrag im TacticalRMM-Dashboard bleibt bestehen und kann dort manuell gelöscht werden.


🧭 Status- und Fehlerdiagnose

Befehl Beschreibung
sudo systemctl status linux-agent Zeigt den aktuellen Status des Agent-Dienstes
journalctl -u linux-agent -n 50 Zeigt die letzten 50 Log-Zeilen
cat /var/log/linuxrmm/install.log Zeigt detaillierte Installations- und Laufzeit-Logs
sudo bash linuxrmm.sh update Erzwingt eine manuelle Aktualisierung

📁 Ordnerstruktur

Pfad Inhalt
/opt/linuxrmm/ Hauptverzeichnis des Agents
/opt/linuxrmm/conf/ Konfiguration, Client- und Site-Informationen
/opt/linuxrmm/bin/ Agent-Binary und Startskripte
/var/log/linuxrmm/ Installations- und Laufzeit-Logs

⚠️ Häufige Probleme

Fehler Ursache / Lösung
unsupported arch Architektur nicht unterstützt → uname -m prüfen
Dienst startet nicht automatisch sudo systemctl enable --now linux-agent ausführen
Keine Verbindung zum Dashboard Firewall / Proxy prüfen
API-Auth-Fehler Auth-Key abgelaufen → neuen Key generieren

💼 Best Practice

Knowledge Base

Aktive technische Knowledge-Base-Einträge aus Obsidian.

Knowledge Base

RustDesk in Tactical RMM Integrieren

Wiki: RustDesk in Tactical RMM Integrieren

note: > Aktueller CORESTREAM-Runbook-Entwurf: RustDesk Self-hosted Client Setup

Quellen:

https://rustdesk.com/docs/de/self-host/client-deployment/integrations/tactical-rmm/

https://github.com/matlat8/TRMM-RustDesk-Integration

Installationskript RustDesk

Mit diesem Skript wird der RustDesk Client installiert.

$ErrorActionPreference= 'silentlycontinue'

if (!(Test-Path C:\Temp))
{
    New-Item -ItemType Directory -Force -Path C:\Temp > null
}

cd C:\Temp

Invoke-WebRequest "https://github.com/rustdesk/rustdesk/releases/download/1.2.6/rustdesk-1.2.6-x86_64.exe" -Outfile "rustdesk.exe"
Start-Process .\rustdesk.exe --silent-install -wait

$ServiceName = 'Rustdesk'
$arrService = Get-Service -Name $ServiceName -ErrorAction SilentlyContinue

if ($arrService -eq $null)
{
    Start-Sleep -seconds 20
}

while ($arrService.Status -ne 'Running')
{
    Start-Service $ServiceName
    Start-Sleep -seconds 5
    $arrService.Refresh()
}
net stop rustdesk

$username = ((Get-WMIObject -ClassName Win32_ComputerSystem).Username).Split('\')[1]
Remove-Item C:\Users\$username\AppData\Roaming\RustDesk\config\RustDesk2.toml
New-Item C:\Users\$username\AppData\Roaming\RustDesk\config\RustDesk2.toml
Set-Content C:\Users\$username\AppData\Roaming\RustDesk\config\RustDesk2.toml "rendezvous_server = 'IPADDRESS' `nnat_type = 1`nserial = 0`n`n[options]`ncustom-rendezvous-server = 'IPADDRESS'`nkey = 'KEY='`nrelay-server = 'IPADDRESS'`napi-server = 'https://remote.corestream.ch'"
Remove-Item C:\Windows\ServiceProfiles\LocalService\AppData\Roaming\RustDesk\config\RustDesk2.toml
New-Item C:\Windows\ServiceProfiles\LocalService\AppData\Roaming\RustDesk\config\RustDesk2.toml
Set-Content C:\Windows\ServiceProfiles\LocalService\AppData\Roaming\RustDesk\config\RustDesk2.toml "rendezvous_server = 'IPADDRESS' `nnat_type = 1`nserial = 0`n`n[options]`ncustom-rendezvous-server = 'IPADDRESS'`nkey = 'KEY='`nrelay-server = 'IPADDRESS'`napi-server = 'https://remote.corestream.ch'"

net start rustdesk

Quelle: Obsidian Knowledge Base/TacticalRMM/RustDesk in Tactical RMM Integrieren.md · Stand: 2026-08-25 · Automatisiert publiziert durch Hermes.

Knowledge Base

TRMM-Linux-Agent-Konzept

abstract: Kurzfassung Linux-Hosts in TRMM laufen bei CORESTREAM inzwischen über einen eigenen Linux-Agent-Fork mit vorgebauten, SHA256-verifizierten Linux-Binaries und mobile-freundlichem curl | bash-Installer. Der frühere netvolt-/Live-Compile-Workaround entfällt. Der Pilot mit v2.11.0-cs4 wurde erfolgreich getestet; Mesh + tacticalagent.service funktionieren.


1. Problemstellung

warning: Show-Stopper im MSP-Alltag Linux-Hosts lassen sich in TRMM nur über einen umständlichen, nicht automatisierbaren Workaround aufnehmen. Pro Maschine von Hand — nicht skalierbar.

success: Lösung Eigenen Fork + Build-CI betreiben → vorgebaute, SHA256-verifizierte Linux-Binaries + sauberes curl | bash-Install-Script. Kein TRMM-Token, keine Paywall, kein manueller Umweg.


2. Ausgangslage (faktisch)

bug: Sicherheitsproblem des Umwegs Lädt Go vom Web, clont master (ungepinnt!) und kompiliert zur Laufzeit auf dem Kunden-Server. Exakt die „fremdes Binary/Source vertrauen"-Falle aus dem 2021/22 Miner-Vorfall — nur als Live-Source statt als Binary.


3. Zielbild

Eigener Fork mit vorgebauten, verifizierten Linux-Binaries + sauberem Installer.


4. Komponenten

4.1 Fork-Strategie

4.2 Build-CI (erzeugt die Binaries)

4.3 Install-Script (Ersatz für netvolt)

4.4 Update-Pfad

4.5 Security (aus Miner-Review)


5. Linux-Code Gaps

Funktionen in agent_unix.go sind oft Stub/nil — Linux kann weniger als Windows:

Funktion Linux-Status Bedeutung
GetDisks / checkin / RunScript / Terminal / Mesh ✅ implementiert Kern-RMM funktioniert
GetInstalledSoftware {} (leer) Keine Software-Inventur
SendSoftware {} kein Reporting
GetServiceDetail / ControlService / EditService Windows-only Service-Steuerung nur via Script
PatchMgmnt nil kein Patch-Management
CreateSchedTask / ListSchedTasks nil kein GUI-Task-Scheduling
GetWinUpdates / InstallUpdates Windows kein OS-Update-Mgmt
GetEventLog Windows kein Eventlog
InstallChoco Windows kein Chocolatey

note: Fazit Linux-Agent taugt für Monitoring, Scripts, Terminal, Mesh — aber keine Software-Inventur, kein Patch-Mgmt, keine Service-UI. Feature-Gap, kein Bug. Entscheidung: Gaps füllen oder „Monitoring-only" akzeptieren?


6. Code-Signing-Strategie (Linux-fokussiert)

Plattform Signing nötig? Maßnahme
Linux ❌ nein SHA256-Verifikation statt Signatur (reicht, da wir Build kontrollieren)
macOS 🚫 vorerst NEIN (2026-07-28) kein Apple-Dev-Account; bei Bedarf später nachrüsten
Windows ❌ vorerst raus läuft weiter via TRMM-Sponsor / unsigniert + AV-Exclusion

info: Kernpunkt Der 400-Fehler verschwindet komplett, sobald wir die Build-CI selbst betreiben — kein TRMM-Token, keine Paywall, kein manueller netvolt-Umweg mehr.


7. Risiken

caution: Wichtig


8. Rollout (Phasen)

  1. Dev-VM: Fork + CI + Install-Script testen (Linux-VM bei euch)
  2. Pilot: 1–2 eigene CORESTREAM-Hosts
  3. Prod: ausgewählte Kunden-Linux-Server

8b. Scaffold-Stand 2026-08-17

success: Erster interner Scaffold gebaut Upstream amidaware/rmmagent wurde auf Tag v2.11.0 / Commit e6b61ba540af2df9d13247f96538397daa3c4f1f gepinnt, statisch geprüft und lokal als CORESTREAM-Scaffold vorbereitet.

Lokaler Arbeitsstand auf Hermes:

Gebaut/verifiziert:

Artefakte lokal:

Checksums der Linux-Binaries:

Package-Checksums:

success: Self-Update-Härtung erledigt Der Installer und der Linux-Self-Update-Pfad verifizieren jetzt SHA256. Voraussetzung: Update-URLs zeigen auf internes Artefaktlayout <BASE_URL>/<VERSION>/rmmagent-linux-<arch> und daneben liegt SHA256SUMS.


8c. Produktiver Installer-Stand 2026-09-09

success: Pilot bestätigt Der kurze Linux-Installer wurde mit v2.11.0-cs4 auf einer Testmaschine erfolgreich ausgeführt. Agent registriert sich im RMM, Mesh wird installiert und tacticalagent.service läuft.

Aktueller Prozess für Techniker:

  1. In Tactical RMM Client/Site und Enrollment-/Deployment-Token bestimmen.

  2. Auf Linux-Zielhost folgenden Befehl ausführen:

    curl -fsSL https://git.corestream.ch/corestream/rmmagent/~raw/main/install-linux.sh | sudo bash -s -- -c CLIENT -s SITE -t TOKEN

  3. Wenn Werte nicht direkt im Befehl stehen, fragt der Installer interaktiv nach:

    • Client-ID
    • Site-ID
    • Enrollment-Token/Auth verdeckt
  4. Nach Installation prüfen:

    • RMM: Host erscheint unter der gewählten Client/Site.
    • Systemd: tacticalagent.service läuft.
    • Mesh: Remote-Control-Verknüpfung ist vorhanden.

Aktueller Artefaktstand v2.11.0-cs4 im OneDev-Raw-Pfad:

Relevante Commits:

Offen für nächsten Ausbau:


9. Offene Entscheidungen


Verwandt


Quelle: Obsidian Knowledge Base/TacticalRMM/TRMM-Linux-Agent-Konzept.md · Stand: 2026-09-20 · Automatisiert publiziert durch Hermes.