Files
msp/docs/tactical-rmm-api.md

4.5 KiB

TacticalRMM API Zugriff

RMM Instanz

Name: RMMINST-Default (Migrated from MSP Settings) API URL: https://api.itsdave.de API Key: VXHWE1ZNNWVYRRU3SYCAJ80CZM9NRFP5

Credentials aus Frappe abrufen

import frappe

rmm = frappe.get_doc("RMM Instance", "RMMINST-Default (Migrated from MSP Settings)")
api_url, headers, verify = rmm.get_api_credentials()
# api_url = "https://api.itsdave.de"
# headers = {"X-API-KEY": "..."}

API Endpoints

Agents

# Alle Agents abrufen
curl -s "https://api.itsdave.de/agents/" \
  -H "X-API-KEY: VXHWE1ZNNWVYRRU3SYCAJ80CZM9NRFP5"

# Agent Details
curl -s "https://api.itsdave.de/agents/{agent_id}/" \
  -H "X-API-KEY: VXHWE1ZNNWVYRRU3SYCAJ80CZM9NRFP5"

Scripts

# Alle Scripts auflisten
curl -s "https://api.itsdave.de/scripts/" \
  -H "X-API-KEY: VXHWE1ZNNWVYRRU3SYCAJ80CZM9NRFP5"

# Script Details
curl -s "https://api.itsdave.de/scripts/{script_id}/" \
  -H "X-API-KEY: VXHWE1ZNNWVYRRU3SYCAJ80CZM9NRFP5"

Script erstellen

# Script Content escapen
SCRIPT_CONTENT=$(cat mein_script.ps1 | python3 -c "import sys, json; print(json.dumps(sys.stdin.read()))")

# Script hochladen
curl -s -X POST "https://api.itsdave.de/scripts/" \
  -H "X-API-KEY: VXHWE1ZNNWVYRRU3SYCAJ80CZM9NRFP5" \
  -H "Content-Type: application/json" \
  -d "{
    \"name\": \"MSP - Mein Script\",
    \"description\": \"Beschreibung des Scripts\",
    \"shell\": \"powershell\",
    \"category\": \"MSP\",
    \"supported_platforms\": [\"windows\"],
    \"script_body\": ${SCRIPT_CONTENT},
    \"default_timeout\": 120
  }"

Script auf Agent ausführen

WICHTIG: Das Feld run_on_server muss explizit auf false gesetzt werden!

curl -s -X POST "https://api.itsdave.de/agents/{agent_id}/runscript/" \
  -H "X-API-KEY: VXHWE1ZNNWVYRRU3SYCAJ80CZM9NRFP5" \
  -H "Content-Type: application/json" \
  -d '{
    "output": "wait",
    "emails": [],
    "emailMode": "default",
    "custom_field": null,
    "save_all_output": false,
    "script": 154,
    "args": [],
    "env_vars": [],
    "timeout": 120,
    "run_as_user": false,
    "run_on_server": false
  }'

Output-Modi:

  • "wait" - Wartet auf Ergebnis und gibt es zurück
  • "forget" - Führt aus ohne auf Ergebnis zu warten
  • "email" - Sendet Ergebnis per E-Mail

Windows Updates

# Patches für Agent abrufen
curl -s "https://api.itsdave.de/winupdate/{agent_id}/" \
  -H "X-API-KEY: VXHWE1ZNNWVYRRU3SYCAJ80CZM9NRFP5"

# Update-Scan starten
curl -s -X POST "https://api.itsdave.de/winupdate/{agent_id}/scan/" \
  -H "X-API-KEY: VXHWE1ZNNWVYRRU3SYCAJ80CZM9NRFP5"

# Approved Updates installieren
curl -s -X POST "https://api.itsdave.de/winupdate/{agent_id}/install/" \
  -H "X-API-KEY: VXHWE1ZNNWVYRRU3SYCAJ80CZM9NRFP5"

Python Beispiel

import requests
import json

API_URL = "https://api.itsdave.de"
API_KEY = "VXHWE1ZNNWVYRRU3SYCAJ80CZM9NRFP5"

headers = {"X-API-KEY": API_KEY, "Content-Type": "application/json"}

def run_script(agent_id, script_id, timeout=120):
    """Führt ein Script auf einem Agent aus und gibt das Ergebnis zurück."""
    payload = {
        "output": "wait",
        "emails": [],
        "emailMode": "default",
        "custom_field": None,
        "save_all_output": False,
        "script": script_id,
        "args": [],
        "env_vars": [],
        "timeout": timeout,
        "run_as_user": False,
        "run_on_server": False  # WICHTIG!
    }

    r = requests.post(
        f"{API_URL}/agents/{agent_id}/runscript/",
        headers=headers,
        json=payload,
        timeout=timeout + 30
    )

    if r.status_code == 200:
        return json.loads(r.json())  # Doppeltes JSON-Parsing nötig
    else:
        raise Exception(f"API Error {r.status_code}: {r.text}")

# Beispiel: Windows Update Diagnostics auf CWWS12
result = run_script(
    agent_id="HTTlEmzqhqGyRNISuTeOMcKWcPEaATdZiSdWcwTR",
    script_id=154
)
print(f"Status: {result['status']}")
print(f"Issues: {result['issues']}")

MSP Scripts in TacticalRMM

ID Name Beschreibung
153 MSP - Windows Update Diagnostics Text-Ausgabe für manuelle Analyse
154 MSP - Windows Update Diagnostics JSON JSON-Ausgabe für programmatische Verarbeitung

Bekannte Probleme

  1. 500 Fehler bei Script-Ausführung: Prüfen ob run_on_server: false gesetzt ist
  2. Leere Antwort: Agent ist möglicherweise offline
  3. Timeout: Script-Timeout + 30 Sekunden für Request-Timeout verwenden

Swagger UI

API-Dokumentation verfügbar unter: https://api.itsdave.de/api/schema/swagger-ui/