-- Zwei Ursachen fuer nicht zustande kommende Sitzungen, siehe -- app/ssh_proxy/proxy.py bzw. app/rdp_proxy/guacd_client.py. -- -- 1) ssh_keys.passphrase_enc -- asyncssh.import_private_key() wurde bisher IMMER ohne Passphrase -- aufgerufen. Ein passphrasegeschuetzter Private Key (der Normalfall, wenn -- ein Admin einen bestehenden Schluessel aus ~/.ssh einfuegt) laesst sich so -- prinzipiell nicht laden -- jeder Verbindungsversuch endete in -- asyncssh.public_key.KeyImportError: -- "Passphrase must be specified to import encrypted private keys" -- und damit in einer sofort wieder beendeten Sitzung. Die Passphrase wird -- deshalb ab jetzt beim Anlegen/Rotieren des Schluessels mit erfasst und -- -- exakt wie das Schluesselmaterial selbst und die RDP-Passwoerter -- mit dem -- KEK (AES-256-GCM, app/security/crypto.py, associated_data=b"ssh_key_passphrase") -- verschluesselt abgelegt. NULL = Schluessel ist unverschluesselt (bisheriges -- Verhalten, bleibt unveraendert gueltig). ALTER TABLE ssh_keys ADD COLUMN passphrase_enc BLOB; -- 2) hosts.rdp_ignore_cert -- build_rdp_params() setzte "ignore-cert" hart auf "false". Windows-Ziele -- praesentieren im Regelfall ein selbstsigniertes RDP-Zertifikat; guacd/ -- FreeRDP bricht den Verbindungsaufbau dann ab, bevor ueberhaupt ein Bild -- entsteht. Die Entscheidung gehoert pro Host getroffen und nicht ins -- Codeliteral: Default 1 (ignorieren, entspricht dem Verhalten jedes -- gaengigen RDP-Clients); wer eine interne PKI betreibt, setzt den Wert pro -- Host auf 0 und erzwingt damit die Zertifikatspruefung. ALTER TABLE hosts ADD COLUMN rdp_ignore_cert INTEGER NOT NULL DEFAULT 1;