Webseite überarbeitet und Telegram Bot funktion hinzugefügt #1
32
main.py
32
main.py
@@ -218,16 +218,36 @@ async def get_remote_info(ip, user):
|
|||||||
|
|
||||||
# --- ERWEITERTES NODE BOOTSTRAPPING (Inventur) ---
|
# --- ERWEITERTES NODE BOOTSTRAPPING (Inventur) ---
|
||||||
async def bootstrap_node(ip, user, password):
|
async def bootstrap_node(ip, user, password):
|
||||||
await manager.broadcast(f"🔑 SSH-Handshake für {ip}...")
|
await manager.broadcast(f"🔑 Starte Kopplung für {ip}...")
|
||||||
# 1. Key kopieren
|
|
||||||
ssh_copy_cmd = f"sshpass -p '{password}' ssh-copy-id -o StrictHostKeyChecking=no -i {SSH_KEY}.pub {user}@{ip}"
|
# Pfad zum lokalen Public Key
|
||||||
proc = subprocess.run(ssh_copy_cmd, shell=True, capture_output=True, text=True)
|
with open(f"{SSH_KEY}.pub", "r") as f:
|
||||||
|
pub_key = f.read().strip()
|
||||||
|
|
||||||
|
# Strategie: Wir versuchen den Key per PowerShell zu setzen (funktioniert bei Win & Linux/Mac oft universeller)
|
||||||
|
# Dieser Befehl erstellt das Verzeichnis, die Datei und setzt den Key – alles in einer Zeile.
|
||||||
|
powershell_fix = (
|
||||||
|
f'if (!(Test-Path ~\\.ssh)) {{ New-Item -ItemType Directory -Path ~\\.ssh }}; '
|
||||||
|
f'Add-Content -Path ~\\.ssh\\authorized_keys -Value "{pub_key}"'
|
||||||
|
)
|
||||||
|
|
||||||
|
# Wir nutzen sshpass, um den Befehl einmalig mit Passwort abzuschicken
|
||||||
|
setup_cmd = f"sshpass -p '{password}' ssh -o StrictHostKeyChecking=no {user}@{ip} 'powershell -Command \"{powershell_fix}\" || (mkdir -p ~/.ssh && echo {pub_key} >> ~/.ssh/authorized_keys)'"
|
||||||
|
|
||||||
|
try:
|
||||||
|
# Wir führen das Setup aus
|
||||||
|
proc = subprocess.run(setup_cmd, shell=True, capture_output=True, text=True, timeout=15)
|
||||||
|
|
||||||
if proc.returncode != 0:
|
if proc.returncode != 0:
|
||||||
await manager.broadcast(f"❌ Fehler beim Key-Copy für {ip}: {proc.stderr}")
|
await manager.broadcast(f"⚠️ Erster Kopplungsversuch für {ip} mit Warnung: {proc.stderr[:50]}...")
|
||||||
|
else:
|
||||||
|
await manager.broadcast(f"✅ Key-Transfer zu {ip} abgeschlossen.")
|
||||||
|
|
||||||
|
except subprocess.TimeoutExpired:
|
||||||
|
await manager.broadcast(f"❌ Timeout bei Kopplung mit {ip}. Rechner erreichbar?")
|
||||||
return
|
return
|
||||||
|
|
||||||
# 2. System-Infos abrufen (Inventur)
|
# Danach folgt deine Inventur (OS/Arch Check)...
|
||||||
await manager.broadcast(f"🔍 Inventur auf {ip} wird durchgeführt...")
|
await manager.broadcast(f"🔍 Inventur auf {ip} wird durchgeführt...")
|
||||||
info = await get_remote_info(ip, user)
|
info = await get_remote_info(ip, user)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user