fix(ssh): puttygen sans popup GUI (CREATE_NO_WINDOW + check --help avant tentative) - evite popup unrecognised -O sur vieille version

This commit is contained in:
Pierre & Lumière 2026-04-29 15:02:17 +02:00
parent 5fc0c41df5
commit 92528043d0

View File

@ -708,14 +708,41 @@ def load_key(keyfile):
["-O", "private-openssh-new", "-o", converted],
]
import subprocess
# Sur Windows, empêcher puttygen.exe d'ouvrir une fenêtre GUI / popup d'erreur
creation_flags = 0
startup_info = None
if os.name == "nt":
creation_flags = getattr(subprocess, "CREATE_NO_WINDOW", 0x08000000)
startup_info = subprocess.STARTUPINFO()
startup_info.dwFlags |= subprocess.STARTF_USESHOWWINDOW
startup_info.wShowWindow = 0 # SW_HIDE
# Vérif rapide : tester si puttygen supporte le mode CLI (-?)
# avant de tenter la conversion → évite les popups intrusifs sur vieille version.
def _puttygen_supports_cli(pg_path):
try:
proc = subprocess.run(
[pg_path, "--help"],
capture_output=True, timeout=5, text=True,
creationflags=creation_flags, startupinfo=startup_info,
)
out = (proc.stdout or "") + (proc.stderr or "")
return "private-openssh" in out.lower() or "-o " in out.lower()
except Exception:
return False
converted_ok = False
last_stderr = ""
for pg in puttygen_paths:
if not _puttygen_supports_cli(pg):
last_stderr = f"{pg} : version ancienne sans CLI export (ne supporte pas -O)"
continue
for syntax in export_syntaxes:
try:
proc = subprocess.run(
[pg, keyfile] + syntax,
capture_output=True, timeout=10, text=True,
creationflags=creation_flags, startupinfo=startup_info,
)
if proc.returncode == 0 and os.path.exists(converted):
converted_ok = True