fix: target-mode now runs with capture=False (interactive), so user sees prompts and can respond
This commit is contained in:
@@ -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}")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user