From c23dda0a46d6c5b1fb0dff918e7305e61bf45840 Mon Sep 17 00:00:00 2001 From: Admin MPCZ Date: Wed, 29 Apr 2026 15:15:32 +0200 Subject: [PATCH] fix(ssh): build_fqdn elargi - Test/Dev/QA testent aussi .sanef-rec.fr (etait limite a 'recette') + log d'erreur ssh_connect detaille --- patch_manager_v2.py | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/patch_manager_v2.py b/patch_manager_v2.py index a60c9f6..70144cb 100644 --- a/patch_manager_v2.py +++ b/patch_manager_v2.py @@ -661,13 +661,19 @@ def read_excel_servers(filepath, sheet_name=None): # SSH HELPERS # ============================================================================== def build_fqdn(server, env): + """Genere les candidats FQDN a tester. Convention SANEF : + - .sanef-rec.fr pour env Recette/Test/Dev (les VMs non-prod sont en recette) + - .sanef.groupe pour env Prod / autres (AD interne) + Tente d'abord le hostname brut puis chaque suffixe.""" if "." in server: return [server] - env_low = env.lower() - if "recette" in env_low or "rec" in env_low: - return [server, f"{server}.sanef-rec.fr"] - else: - return [server, f"{server}.sanef.groupe"] + env_low = (env or "").lower() + is_nonprod = any(k in env_low for k in ("recette", "rec", "test", "tst", "dev", "qa")) + if is_nonprod: + # Non-prod : recette en priorite, fallback groupe au cas ou + return [server, f"{server}.sanef-rec.fr", f"{server}.sanef.groupe"] + # Prod : groupe en priorite, fallback recette au cas ou + return [server, f"{server}.sanef.groupe", f"{server}.sanef-rec.fr"] def load_key(keyfile): """Charge une clé SSH privée. Retourne l'objet PKey ou None. @@ -809,7 +815,10 @@ def ssh_connect(server, env, settings, pkey, pkey2, cyb_password=None): continue else: # SSH direct avec clé - for key in [k for k in [pkey, pkey2] if k]: + keys = [k for k in [pkey, pkey2] if k] + if not keys: + print(f"[ssh_connect] {hostname}: AUCUNE CLE chargee (pkey/pkey2 = None) → check load_key.last_error") + for idx, key in enumerate(keys, 1): try: client = paramiko.SSHClient() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) @@ -819,7 +828,9 @@ def ssh_connect(server, env, settings, pkey, pkey2, cyb_password=None): look_for_keys=False, allow_agent=False) client._eff_host = hostname return client, hostname - except Exception: + except Exception as ex_ssh: + print(f"[ssh_connect] {hostname} cle#{idx} ({type(key).__name__}) " + f"user={settings.get('target_user','?')} → {type(ex_ssh).__name__}: {ex_ssh}") continue return None, None