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:
parent
5fc0c41df5
commit
92528043d0
@ -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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user