Files
tesm/skripts/assign_credential_to_all_devices.py
T
alientim d77327cee1 skripts/: Admin-Hilfsskripte für Bulk-Aktionen ins Repo aufgenommen
- assign_credential_to_all_devices.py: weist allen aktiven Geraeten auf
  einen Schlag dieselben Zugangsdaten zu (Name als optionales Argument,
  Standard 'HAPS'), inkl. Eintrag im Aenderungsverlauf.
- accept_all_hostkeys.py: akzeptiert die SSH-Host-Keys aller aktiven
  Geraete in einem Rutsch (paralleler Verbindungsaufbau + Schluesseltausch,
  kein Login) -- nutzt dieselbe known_hosts-Datei wie die App, ein
  geaenderter (statt unbekannter) Key wird bewusst NICHT automatisch
  uebernommen, sondern separat als Warnung ausgegeben.

Beide live gegen POETEST verifiziert.
2026-08-14 00:13:11 +02:00

42 lines
1.4 KiB
Python

#!/usr/bin/env python3
"""Weist allen aktiven Geraeten (Clients) auf einen Schlag dieselben
Zugangsdaten zu -- spart das manuelle Durchklicken jedes einzelnen
Geraets in der Weboberflaeche.
Aufruf auf dem Server:
sudo /srv/tesm/venv/bin/python3 assign_credential_to_all_devices.py [NAME]
NAME ist der Name des Zugangsdaten-Eintrags (Standard: "HAPS")."""
import sqlite3
import sys
from datetime import datetime
DB_PATH = "/srv/tesm/sqlite.db"
CRED_NAME = sys.argv[1] if len(sys.argv) > 1 else "HAPS"
conn = sqlite3.connect(DB_PATH)
cred = conn.execute(
"SELECT id FROM credentials WHERE name = ? AND deleted_at IS NULL", (CRED_NAME,)
).fetchone()
if not cred:
print(f"Fehler: Zugangsdaten '{CRED_NAME}' nicht gefunden (oder im Papierkorb).")
raise SystemExit(1)
credential_id = cred[0]
now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
cur = conn.execute(
"UPDATE devices SET credential_id=?, last_modified_by=?, last_modified_at=? WHERE deleted_at IS NULL",
(credential_id, "Admin (Bulk)", now),
)
count = cur.rowcount
conn.execute(
"INSERT INTO audit_log (ts, username, action, target, details) VALUES (?, ?, ?, ?, ?)",
(now, "system", "devices.bulk_credential", CRED_NAME, f"{count} Geräte auf Zugangsdaten '{CRED_NAME}' gesetzt"),
)
conn.commit()
conn.close()
print(f"{count} Geräte auf Zugangsdaten '{CRED_NAME}' (id={credential_id}) gesetzt.")