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"
|
scp_opts_common += " -o BatchMode=yes"
|
||||||
info("Пробуем ключевую аутентификацию (BatchMode)")
|
info("Пробуем ключевую аутентификацию (BatchMode)")
|
||||||
|
|
||||||
# Вспомогательная функция: выполнить SSH-команду
|
# Вспомогательная функция: выполнить SSH-команду (capture=True, для скриптов)
|
||||||
def ssh_cmd(remote_cmd, timeout=30):
|
def ssh_cmd(remote_cmd, timeout=30):
|
||||||
if password:
|
if password:
|
||||||
full = f"sshpass -p '{password}' ssh {ssh_opts_common} {user}@{host} '{remote_cmd}'"
|
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}'"
|
full = f"ssh {ssh_opts_common} {user}@{host} '{remote_cmd}'"
|
||||||
return run(full, check=False, timeout=timeout)
|
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
|
# Вспомогательная функция: выполнить scp
|
||||||
def scp_cmd(src, dst, timeout=60):
|
def scp_cmd(src, dst, timeout=60):
|
||||||
if password:
|
if password:
|
||||||
@@ -152,9 +160,9 @@ def do_transfer():
|
|||||||
warn("Не удалось передать скрипт на новый сервер.")
|
warn("Не удалось передать скрипт на новый сервер.")
|
||||||
success(f"Архив передан. Запустите на новом сервере: python3 core/main.py --mode=target --remote-dir={remote_dir}")
|
success(f"Архив передан. Запустите на новом сервере: python3 core/main.py --mode=target --remote-dir={remote_dir}")
|
||||||
else:
|
else:
|
||||||
# 3. Распаковываем и запускаем
|
# 3. Распаковываем и запускаем (интерактивно, т.к. target-mode спрашивает у пользователя)
|
||||||
ssh_cmd(f"mkdir -p /opt/docker-migrate-tool && tar xzf {tool_remote} -C /opt/docker-migrate-tool")
|
ssh_cmd_interactive(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)
|
ssh_cmd_interactive(f"cd /opt/docker-migrate-tool && python3 core/main.py --mode=target --remote-dir={remote_dir}", timeout=600)
|
||||||
else:
|
else:
|
||||||
success(f"Архив передан. Запустите на новом сервере: python3 core/main.py --mode=target --remote-dir={remote_dir}")
|
success(f"Архив передан. Запустите на новом сервере: python3 core/main.py --mode=target --remote-dir={remote_dir}")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user