refactor: clear SSH auth flow — passphrase is local only, target password is separate; interactive ssh-copy-id with visible prompt; 90 lines removed, logic simplified

This commit is contained in:
2026-05-22 23:53:15 +04:00
parent bd16e339c0
commit 3ee5104302
2 changed files with 98 additions and 179 deletions
+6 -7
View File
@@ -379,16 +379,15 @@ def do_transfer_offer():
if key_path:
state.set_stage("TRANSFER", target_host=host, target_user=user, target_port=port_int, ssh_key=key_path)
else:
# Нет SSH-ключа — спрашиваем пароль и пробуем sshpass
password = prompt_password(f"Пароль для {user}@{host} (Enter для отмены)")
# Нет SSH-ключа — запрашиваем пароль от TARGET сервера
password = prompt_password(f"Пароль от target-сервера {user}@{host} (Enter для отмены)")
if not password:
state.set_error("ssh_key_setup", "", "Пароль не введён", suggestion="Запустите docker-migrate --resume или настройте SSH-ключ")
raise RuntimeError("Пароль не введён. Установите SSH-ключ или введите пароль.")
# Проверяем/устанавливаем sshpass
state.set_error("ssh_key_setup", "", "Пароль не введён", suggestion="Запустите docker-migrate --resume или настройте SSH-ключ на target")
raise RuntimeError("Пароль от target не введён.")
from transfer.ssh import ensure_sshpass
if not ensure_sshpass():
state.set_error("ssh_key_setup", "", "sshpass не найден и не удалось установить", suggestion="Установите sshpass: apt-get install -y sshpass")
raise RuntimeError("sshpass не найден. Установите: apt-get install -y sshpass")
state.set_error("ssh_key_setup", "", "sshpass не найден", suggestion="apt-get install -y sshpass")
raise RuntimeError("sshpass не установлен.")
state.set_stage("TRANSFER", target_host=host, target_user=user, target_port=port_int, ssh_key=None, ssh_password=password)
from transfer.transfer import do_transfer