Использование rsync с sudo на целевом компьютере

39

У меня проблема с тем, что rsync не устанавливает UID и GID, как ожидалось , я чувствую, что rsyncдолжен быть запущен как rootна целевом компьютере.

Я не могу войти как rootчерез SSH, так как это отключено в целях безопасности. Пользователь на целевой машине может использовать sudo.

Можно ли использовать rsyncс sudo?

Томас Веллер
источник

Ответы:

68

На машине назначения

  1. Узнайте путь к rsync:which rsync
  2. Отредактируйте /etc/sudoersфайл: sudo visudo(см. Также: я должен использовать visudo? )
  3. Добавьте строку <username> ALL=NOPASSWD:<path to rsync>, где username - это имя пользователя, которое rsync будет использовать для входа в систему. Этот пользователь должен иметь возможность использоватьsudo

Затем на исходном компьютере укажите, что sudo rsyncдолжно использоваться:

rsync ... --rsync-path="sudo rsync" ...

Использование его без NOPASSWDна целевом компьютере приведет к сообщению

sudo: tty отсутствует и не задана программа askpass

Томас Веллер
источник
Что это за модификация, которая позволит любому пользователю в определенной группе сделать это? Вместо <username> есть версия <groupname>?
Брайан
3
Спасибо, только я использую ИПК так что я использовал-e="ssh -i $PRIVATE_KEY_PATH" --rsync-path="sudo rsync"
AT
1
Конечно, <username> теперь может читать / записывать все как root, используя rsync, локально и удаленно, так что часть о невозможности войти в систему как root из-за проблем с безопасностью - своего рода спор ... потому что, по сути, вы делаете это сейчас ,
HMN
1
Вы все еще получаете сообщение об ошибке «не tty present ...» после выполнения этих инструкций? Я был. Следить за тем, чтобы строка, к которой я добавлял, /etc/sudoersшла в конце файла (или после любых групповых правил, которые могут повлиять на одного и того же пользователя), и решила проблему для меня.
CPBL
1
Я использую это решение, но хотел бы улучшить безопасность, ограничивая аргументы, которые пользователь может передать rsync на конечном сервере. Обычно я бы ограничил количество аргументов, которые можно использовать, <username> ALL=NOPASSWD:<path to rsync> <args>но я не знаю, что это за аргументы при удаленном вызове. Любые идеи?
Пит Корнелл
3

Вы можете попросить удаленный sudo попросить вас ввести пароль через X-windows. Вот способ сделать это:

  1. Убедитесь, что ssh-askpassустановлен на удаленном хосте (и, конечно, вы используете X-windows)
  2. Убедитесь, что это в /etc/sudo.conf:
# Path to askpass helper program
Path askpass /usr/bin/ssh-askpass
  1. Добавьте эти параметры в rsync: -e "ssh -X" --rsync-path="sudo -A rsync"

    • ssh -X перенаправит вашу информацию X-windows и порт на ваш удаленный сеанс
    • sudo -A заставит sudo использовать ssh-askpass, чтобы спросить ваш пароль
Билл Бурдик
источник
Работает на Ubuntu 18; создать /etc/sudo.conf (если он еще не существует) в месте назначения м / с
Снидхи Софпро
0

Мое решение состоит в том, чтобы использовать --rsync-path="sudo rsync", если он запрашивает пароль, вы можете использовать обходной путь, как это:

rsync -avz --stats --rsync-path="echo <SUDOPASS> | sudo -Sv && sudo rsync"  user@192.168.1.2:/ .

Но это не безопасно, чтобы ввести пароль в командной строке.

Булат
источник