feat: Phase 7 — MeshCentral Remote Desktop Integration

Backend:
- MeshCentralOptions + MeshCentralService: Node-Lookup via Hostname, Remote-Desktop-URL-Generierung
- RemoteDesktopController: GET /api/v1/agents/{id}/remote-session mit 3 Status-Zuständen (nicht konfiguriert / Agent fehlt / bereit)
- Program.cs: HttpClient + MeshCentralService registriert, appsettings.json mit Konfigurationsblock

Go Agent:
- config.go: MeshCentralUrl + MeshEnabled Felder
- internal/meshagent/installer.go: MeshAgent Download + Installation (Windows Service / Linux systemd)
- main.go: Automatische MeshAgent-Installation nach Enrollment wenn aktiviert

Frontend:
- RemoteDesktopButton: Modales Dialog mit 3 Zustandsanzeigen (Setup nötig / Agent installieren / Remote Desktop öffnen)
- AgentDetailPage: RemoteDesktopButton im Header integriert
- api/types.ts + api/client.ts: RemoteSessionInfo Typ + remoteDesktopApi

docker-compose.yml: MeshCentral Service (ghcr.io/ylianst/meshcentral:latest, Ports 4430/4431)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Claude Agent
2026-03-19 14:39:49 +01:00
parent 84629dfbcf
commit 55e016c07d
14 changed files with 579 additions and 7 deletions

View File

@@ -15,6 +15,7 @@ import (
"nexusrmm.local/agent/internal/connection"
"nexusrmm.local/agent/internal/deployer"
"nexusrmm.local/agent/internal/executor"
"nexusrmm.local/agent/internal/meshagent"
pb "nexusrmm.local/agent/pkg/proto"
)
@@ -62,6 +63,14 @@ func main() {
log.Printf("Enrolled with ID: %s", cfg.AgentID)
}
// MeshAgent installieren falls konfiguriert
if cfg.MeshEnabled && cfg.MeshCentralUrl != "" {
log.Printf("Installiere MeshAgent von %s...", cfg.MeshCentralUrl)
if err := meshagent.Install(context.Background(), cfg.MeshCentralUrl); err != nil {
log.Printf("MeshAgent-Installation fehlgeschlagen (nicht kritisch): %v", err)
}
}
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
sigCh := make(chan os.Signal, 1)