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}")