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],
|
["-O", "private-openssh-new", "-o", converted],
|
||||||
]
|
]
|
||||||
import subprocess
|
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
|
converted_ok = False
|
||||||
last_stderr = ""
|
last_stderr = ""
|
||||||
for pg in puttygen_paths:
|
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:
|
for syntax in export_syntaxes:
|
||||||
try:
|
try:
|
||||||
proc = subprocess.run(
|
proc = subprocess.run(
|
||||||
[pg, keyfile] + syntax,
|
[pg, keyfile] + syntax,
|
||||||
capture_output=True, timeout=10, text=True,
|
capture_output=True, timeout=10, text=True,
|
||||||
|
creationflags=creation_flags, startupinfo=startup_info,
|
||||||
)
|
)
|
||||||
if proc.returncode == 0 and os.path.exists(converted):
|
if proc.returncode == 0 and os.path.exists(converted):
|
||||||
converted_ok = True
|
converted_ok = True
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user