Files
ARIA-AGENT/satellite/.env.example
T
duffyduckandClaude Opus 4.8 84f405d264 feat(satellite): ssh.exec — ARIA fuehrt Kommandos per SSH auf Geraeten aus
Neuer Credential-Typ 'ssh' (Benutzer + Passwort ODER privater Key, Port) und
Aktion ssh.exec (params: ip, cmd). paramiko-Client; grosse Ausgaben werden wie
bei http.get gefenstert (contains/offset/max_chars gemeinsam via _window_text),
Antwort mit exit_code + stdout + stderr. Auth kommt aus dem Credential-Store,
ARIA muss keine Passwoerter mitgeben.

- satellite: _do_ssh + _ssh_load_key (RSA/Ed25519/ECDSA/DSS aus String),
  ssh.exec in _control + Allowlist, 'ssh' in beide Cred-Typ-Listen; paramiko
  in requirements; .env.example ergaenzt.
- diagnostic: SSH-Sektion im Credentials-Modal (User/Port/Passwort/Key) +
  Save-Logik (User + Passwort|Key).
- brain: satellite_command-Tool um ssh.exec erweitert.

Laeuft ueber den bestehenden sat_command/sat_result-Pfad — keine RVS-Aenderung.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-24 16:00:54 +02:00

65 lines
4.0 KiB
Bash

# ─── ARIA Satellit — Konfiguration ──────────────────────────────────
# Kopiere diese Datei nach .env und passe sie an.
# RVS-Zugang (identisch zum Haupt-Stack — gleicher Raum/Token, damit ARIA
# diesen Satelliten erreicht). Werte aus der Haupt-.env / vom generate-token.sh.
RVS_HOST=rvs.example.de
RVS_PORT=443
RVS_TLS=true
RVS_TOKEN=
# ─── Identitaet / Adresse dieses Satelliten ────────────────────────
# SATELLITE_ID = technisch eindeutig (a-z0-9-_), Default = Hostname-Slug.
# SATELLITE_LOCATION = menschlicher Name, so spricht ARIA das Netz an ("Buero").
# Mehrere Satelliten koennen im selben RVS-Raum haengen — die Location
# unterscheidet sie ("Buero", "Zuhause", "Werkstatt").
SATELLITE_ID=buero
SATELLITE_LOCATION=Büro
# ─── Steuerung (Sicherheit!) ───────────────────────────────────────
# CONTROL_ENABLED=false → reiner Info-/Beobachtungs-Satellit (entdeckt & meldet
# nur, steuert nichts). Sicherste Basis.
# CONTROL_ENABLED=true → darf Geraete steuern (nur Aktionen aus der Allowlist).
CONTROL_ENABLED=true
# Erlaubte Steuer-Aktionen (kommagetrennt). Alles andere wird abgelehnt.
# dial.launch App-Launch via DIAL (z.B. YouTube-Video auf Fire TV / Smart-TV)
# wol Wake-on-LAN (Geraet per MAC aufwecken)
# http.get generischer HTTP-GET (z.B. lokale IoT-Webhooks, Statusseiten)
# http.post generischer HTTP-POST
# snmp.get einzelner SNMP-Wert (params: ip, oid)
# snmp.walk SNMP-Teilbaum (params: ip, oid)
# snmp.printer Drucker-Fuellstaende (Tinte/Toner) aus der Printer-MIB (params: ip)
# snmp.ports Switch/Router-Interfaces: aktive/freie Ports (params: ip)
# snmp.info Modell/Seriennummer/Firmware-Version (params: ip)
# fritzbox.info FritzBox: Verbindung/Datenrate/externe IP (TR-064, braucht Login)
# fritzbox.hosts FritzBox: verbundene Geraete (TR-064, braucht Login)
# ssh.exec Kommando per SSH ausfuehren (params: ip, cmd; Auth aus Creds 'ssh')
CONTROL_ALLOWLIST=dial.launch,wol,http.get,snmp.get,snmp.walk,snmp.printer,snmp.ports,snmp.info,fritzbox.info,fritzbox.hosts,ssh.exec
# ─── Credential-Store (optional) ───────────────────────────────────
# Pro Geraet koennen im Diagnostic Zugangsdaten hinterlegt werden (SNMP-Community/
# v3, HTTP-Basic, FritzBox-Login). Der Satellit speichert sie VERSCHLUESSELT im
# Bind-Volume ./data. Der Schluessel wird beim ersten Start automatisch erzeugt
# (./data/creds.key) — oder hier fest vorgeben (Fernet-Key, base64):
# CREDS_KEY=
# ─── SNMP (optional) ───────────────────────────────────────────────
# Defaults fuer die snmp.*-Aktionen; pro Request per params ueberschreibbar.
SNMP_COMMUNITY=public # Drucker/Switches antworten meist auf 'public'
SNMP_VERSION=2c # 1 | 2c
SNMP_TIMEOUT_SEC=5
# Discovery-Anreicherung: jedes entdeckte Geraet wird beim Scan kurz per SNMP
# nach Name/Beschreibung/Standort/Uptime gefragt (Switches, Router, APs, NAS ...).
SNMP_DISCOVERY=true
SNMP_DISCOVERY_CONCURRENCY=16 # parallele SNMP-Abfragen pro Scan
SNMP_DISCOVERY_TIMEOUT=2 # Timeout je Geraet (s) — Nicht-SNMP-Hosts fallen schnell raus
# ─── HTTP (optional) ───────────────────────────────────────────────
HTTP_TIMEOUT_SEC=10 # Timeout fuer http.get/http.post
HTTP_MAX_CHARS=20000 # Default-Body-Ausschnitt (offset/max_chars pro Request)
# ─── Discovery-Tuning (optional) ───────────────────────────────────
SCAN_INTERVAL_SEC=300 # Hintergrund-Rescan-Intervall
DISCOVER_TIMEOUT_SEC=6 # Dauer eines Sweeps (mDNS + SSDP)
DEVICE_CACHE_TTL_SEC=120 # wie lange ein Inventar als "frisch" gilt