Я хотел бы использовать rsync в скрипте Python. Я звоню с помощью subprocess
модуля и проверяю подлинность с помощью открытых ключей, хранящихся в authorized_key
файле на удаленном компьютере.
Единственная проблема заключается в том, что когда я использую rsync, используя неверное имя удаленного пользователя, у меня запрашивается пароль, который, очевидно, навсегда останавливает сценарий резервного копирования.
Могу ли я принудительно rsync
завершить работу с ошибкой, если она не может аутентифицироваться, вместо запроса пароля?
Уди
Re: предложение Джеймса (не указав tty), для подпроцесса, попробуйте ввести stdin = None в качестве параметра для Popen.
источник
Сначала заставьте rsync работать из оболочки, команда должна выглядеть следующим образом.
Если это не удалось, отладьте команду ssh самостоятельно. Когда все это работает, посмотрите, что происходит с сценарием Python.
Это не плохой учебник
источник
В зависимости от того, как вы запускаете rsync, отсутствие TTY или PTY может помочь.
Многие программы проверяют наличие контрольного TTY, прежде чем предлагать пользователю ввести данные. Поведение system () и аналогичных вызовов по умолчанию заключается в предоставлении tty подпрограммам, но вы можете отключить это.
Также возможно полностью отключить аутентификацию по паролю на удаленной стороне, если вы управляете обеими системами и хотите избежать аутентификации по паролю для обеспечения безопасности при решении этой проблемы.
Если вы выполняете rsync через SSH, вы можете добавить следующее в файл ssh_config для рассматриваемого хоста или через ключ командной строки -o:
На быстром тесте (просто ssh, а не rsync), который заставил SSH немедленно завершить работу, когда мой открытый ключ не был принят без запроса пароля.
источник