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

176 lines
4.5 KiB
Markdown

# 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
```python
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
```bash
# 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
```bash
# 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
```bash
# 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!
```bash
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
```bash
# 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
```python
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/`