mirror of
https://github.com/itsdave-de/msp.git
synced 2026-08-14 07:30:05 -03:00
176 lines
4.5 KiB
Markdown
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/`
|