connect fix 2
This commit is contained in:
@ -132,6 +132,26 @@ async def ssh_terminal(websocket: WebSocket, host_id: int):
|
||||
# (POST /admin/sessions/{id}/terminate, siehe app/security/active_sessions.py).
|
||||
end_reason = "terminated_by_admin"
|
||||
raise
|
||||
except Exception as exc:
|
||||
# Auffangnetz fuer alles, was NICHT asyncssh.Error ist (z.B.
|
||||
# asyncssh.KeyImportError bei einem defekten/nicht mehr passenden
|
||||
# Schluessel, oder cryptography.exceptions.InvalidTag bei
|
||||
# decrypt_secret() falls der KEK nicht mehr zum verschluesselten
|
||||
# Schluessel passt) -- diese Typen sind KEINE asyncssh.Error-
|
||||
# Unterklassen und liefen bisher unbehandelt durch, wodurch die
|
||||
# Sitzung ohne jede Fehlermeldung abrupt getrennt wurde und im Log
|
||||
# irrefuehrend als reason=logout erschien (Default-Wert, der nie
|
||||
# aktualisiert wurde). Mit logger.exception landet der volle
|
||||
# Traceback jetzt im Verbindungslog.
|
||||
logger.exception("Unerwarteter Fehler in SSH-Sitzung %s: %s", session_id, exc)
|
||||
end_reason = "error"
|
||||
try:
|
||||
await websocket.send_json({
|
||||
"type": "error",
|
||||
"message": f"Verbindung zum Zielsystem fehlgeschlagen (interner Fehler: {exc.__class__.__name__})",
|
||||
})
|
||||
except Exception:
|
||||
logger.debug("Fehlermeldung konnte nicht mehr an Client gesendet werden", exc_info=True)
|
||||
finally:
|
||||
active_sessions.unregister(session_id)
|
||||
if pump_task:
|
||||
|
||||
Reference in New Issue
Block a user