fix: add timeout to ssh-copy-id and check_ssh_connectivity to prevent hangs

This commit is contained in:
2026-05-22 23:14:03 +04:00
parent b231892614
commit cdf283a598

View File

@@ -60,7 +60,7 @@ def check_ssh_connectivity(host, user, port, key_path=None, timeout=10):
identity = f"-i '{key_path}'" if key_path and os.path.isfile(key_path) else ""
cmd = f"ssh {identity} -p {port} -o ConnectTimeout={timeout} -o BatchMode=yes -o StrictHostKeyChecking=accept-new {user}@{host} 'echo migrate-ok'"
r = run(cmd, check=False, capture=True)
r = run(cmd, check=False, capture=True, timeout=30)
if r.returncode == 0 and "migrate-ok" in r.stdout:
return (True, r.stdout, r.stderr)
return (False, r.stdout, r.stderr)
@@ -108,7 +108,12 @@ def ssh_copy_id(host, user, port, pubkey_path):
"""Копирует публичный ключ на target через ssh-copy-id или вручную."""
if exists("ssh-copy-id"):
info("Копируем публичный ключ через ssh-copy-id ...")
r = run(f"ssh-copy-id -p {port} -i '{pubkey_path}' {user}@{host}", check=False)
# Добавляем SSH опции чтобы избежать зависания
r = run(
f"ssh-copy-id -p {port} -o ConnectTimeout=10 -o StrictHostKeyChecking=accept-new -i '{pubkey_path}' {user}@{host}",
check=False,
timeout=60
)
if r.returncode == 0:
success("Ключ добавлен на target через ssh-copy-id")
return True