Я хочу синхронизировать папку со своей машины с папкой на удаленной машине. Удаленной папкой можно управлять только root
. У меня есть учетная запись на удаленной машине, которую можно использовать sudo
. Как я могу запустить rsync так, чтобы он имел права root на удаленной машине?
Я пробовал следующее:
rsync -avz -e ssh /home/ubuntu/my/lovely/folder ubuntu@x.x.x.x:/remote/lovely/folder --delete --rsync-path="sudo rsync"
Но (после ввода моего пароля) я получаю следующую ошибку:
sudo: no tty present and no askpass program specified
Ответы:
Попробуйте это решение. В вашем файле sudoers (
/etc/sudoers
) настройте своего пользователя следующим образом:Это
NOPASSWD:/usr/bin/rsync
говорит,sudo
что когда ваш пользователь запускается/usr/bin/rsync
или простоrsync
пароль не нужен.Тогда ваш оригинал
--rsync-path="sudo rsync"
должен работать.источник
Вот решение, которое я придумал:
Немного миссии!
источник
ps aux
). Test:,rsync -R -avz -e ssh --rsync-path="find / > /dev/null && rsync" server.example.com:/ /tmp/example
затем откройте терминал на удаленной машине иps aux | grep find
.find /
используется только потому, что это первое, что пришло мне в голову с большой продолжительностью исполнения.Решение в этом блоге сработало очень хорошо для меня: http://www.pplux.com/2009/02/07/rsync-root-and-sudo/ .
В основном:
Первая строка позволяет вводить пароль в интерактивном режиме, не показывая пароль на экране. Отлично работает для меня на Ubuntu 9.04.
источник
!tty_tickets
.ssh -t [other options]
чтобы вместо того, чтобы играть сstty -echo
?tty_tickets
во всяком случае ... так что я могу попробовать этот подход.sudo: no tty present and no askpass program specified
Вам нужен метод для предоставления пароля
sudo
.askpass
Программа предназначена , чтобы попросить пароли , когда обычные механизмы не доступны. Настройка,sudo
чтобы не требовать пароль для запуска вrsync
качестве вашего идентификатора пользователя, является одним из вариантов.Я обычно настраиваю основанный на ключе вход в систему с соответствующими ограничениями для случаев как это. Если вы сконфигурируете ограниченный ключ, который запускается только
rsync
от имени пользователя root, то подобные вещи станут проще. Другой альтернативой является использованиеrsycnd
процесса для обработки удаленных запросов. Конфигурация предоставляет множество ограничений, которые могут быть применены.РЕДАКТИРОВАТЬ: я включил сценарий для настройки ключей для привязок на основе ключей в разделе «Создание идентификаторов пользователей на клиентах» моего поста « Настройка BackupPC в Linux» . Смотрите также документацию по ssh_config, в которой подробно описаны некоторые вещи, которые вы можете сделать с ограничением использования ключа, как показано в сценарии.
источник
на удаленной машине
потом на локальной машине
заменить путь к ssh-askpass реальным путем на удаленной машине
источник: http://unix.bris.ac.uk/2015/08/04/rsync-between-two-hosts-using-sudo-and-a-password-prompt/
источник
Я поражен сложностью существующих ответов. Это намного проще и удобнее настроить системы (ваш компьютер и удаленный хост) , так что вы можете подключить в качестве корня к удаленному компьютеру без использования пароля. И в отличие от его внешнего вида, он тоже безопасен .
Только не забывайте, что до тех пор, пока есть строка в /root/.ssh/authorized_keys удаленного хоста, машина принимает команды root от вашего ПК.
источник
Вот что сработало для меня, учитывая, что я хочу сохранить аутентификацию по паролю (поэтому я не хочу использовать
NOPASSWD
или ключи) - в Ubuntu 14.04:sudo
на удаленном компьютере, отключивtty_tickets
через временный файл в/etc/sudoers.d/
(который должен быть поддержан в Debian, см./etc/sudoers.d/README
), И «Обновить кэшированные учетные данные пользователя», что «увеличивает время ожидания sudo еще на 15 минут»rsync
с,sudo
как показано в других ответахsudo
на удаленном компьютере, удалив временный файл в/etc/sudoers.d/
, который повторно включаетtty_tickets
... или с помощью командной строки:
Вот ответы, которые я получаю при выполнении этих команд на локальном компьютере:
Обратите внимание, что
sudo -v
запускать файлы нужно каждый раз/etc/sudoers.d/
, чтобы изменения в них были приняты.источник
Другой способ - обойти ограничения разрешений, запустив rsync на удаленной машине. Вместо того:
Ты можешь сделать:
Где
y.y.y.y
находится IP-адрес вашей локальной машины? Это работает, только если ваша локальная машина может выступать в качестве сервера SSH.источник
Мой обходной путь должен добавить
--rsync-path="echo PASSWORD | sudo -Sv && sudo rsync"
пример:
rsync -avz -e ssh /home/ubuntu/my/lovely/folder ubuntu@x.x.x.x:/remote/lovely/folder --delete --rsync-path="echo <PASSWORD> | sudo -Sv && sudo rsync"
Обычно не рекомендуется помещать пароли в одну строку в командной строке; например, они становятся видимыми в дереве процессов. Иногда я заменяю действительный пароль в выражении этого типа на $ (cat my_password.txt), что немного лучше
rsync -avz -e ssh /home/ubuntu/my/lovely/folder ubuntu@x.x.x.x:/remote/lovely/folder --delete --rsync-path="cat my_password.txt | sudo -Sv && sudo rsync"
источник