From c8bef6b41a7d7ce7a48592dcf9faa3cbb3d42faa Mon Sep 17 00:00:00 2001 From: Stitch505 <–Gleb@stitch505.su> Date: Sat, 23 May 2026 00:16:54 +0400 Subject: [PATCH] fix: target-mode now runs with capture=False (interactive), so user sees prompts and can respond --- transfer/transfer.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/transfer/transfer.py b/transfer/transfer.py index a1b8abe..fb415a4 100644 --- a/transfer/transfer.py +++ b/transfer/transfer.py @@ -57,7 +57,7 @@ def do_transfer(): scp_opts_common += " -o BatchMode=yes" info("Пробуем ключевую аутентификацию (BatchMode)") - # Вспомогательная функция: выполнить SSH-команду + # Вспомогательная функция: выполнить SSH-команду (capture=True, для скриптов) def ssh_cmd(remote_cmd, timeout=30): if password: full = f"sshpass -p '{password}' ssh {ssh_opts_common} {user}@{host} '{remote_cmd}'" @@ -65,6 +65,14 @@ def do_transfer(): full = f"ssh {ssh_opts_common} {user}@{host} '{remote_cmd}'" return run(full, check=False, timeout=timeout) + # Интерактивный SSH (capture=False, для target-mode и другого интерактивного ввода) + def ssh_cmd_interactive(remote_cmd, timeout=300): + if password: + full = f"sshpass -p '{password}' ssh {ssh_opts_common} {user}@{host} '{remote_cmd}'" + else: + full = f"ssh {ssh_opts_common} {user}@{host} '{remote_cmd}'" + return run(full, check=False, capture=False, timeout=timeout) + # Вспомогательная функция: выполнить scp def scp_cmd(src, dst, timeout=60): if password: @@ -152,9 +160,9 @@ def do_transfer(): warn("Не удалось передать скрипт на новый сервер.") success(f"Архив передан. Запустите на новом сервере: python3 core/main.py --mode=target --remote-dir={remote_dir}") else: - # 3. Распаковываем и запускаем - ssh_cmd(f"mkdir -p /opt/docker-migrate-tool && tar xzf {tool_remote} -C /opt/docker-migrate-tool") - ssh_cmd(f"cd /opt/docker-migrate-tool && python3 core/main.py --mode=target --remote-dir={remote_dir}", timeout=300) + # 3. Распаковываем и запускаем (интерактивно, т.к. target-mode спрашивает у пользователя) + ssh_cmd_interactive(f"mkdir -p /opt/docker-migrate-tool && tar xzf {tool_remote} -C /opt/docker-migrate-tool") + ssh_cmd_interactive(f"cd /opt/docker-migrate-tool && python3 core/main.py --mode=target --remote-dir={remote_dir}", timeout=600) else: success(f"Архив передан. Запустите на новом сервере: python3 core/main.py --mode=target --remote-dir={remote_dir}")