- 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.
42 lines
1.4 KiB
Python
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.")
|