Используя rsync с sudo на целевой машине

Имея проблему, что rsync не устанавливает UID и GID как ожидалось, мое инстинктивное чувство - это rsync должен быть выполнен как root на целевой машине.

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

Действительно ли возможно использовать rsync с sudo?

39
задан 13 April 2017 в 05:23

4 ответа

На целевой машине

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

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

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

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

sudo: никакой подарок tty и никакая askpass программа не указали

68
ответ дан 23 November 2019 в 00:12

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

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

Но это не безопасно для ввода пароля в командной строке.

0
ответ дан 23 November 2019 в 00:12

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

  1. Удостоверяются ssh-askpass, установлен на удаленном хосте (и что Вы используете X-окна, конечно)
  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-окон, и порт к Вашему удаленному сеансу
    • sudo -A заставит sudo использовать ssh-askpass для просьбы Вас Ваш пароль
3
ответ дан 23 November 2019 в 00:12

Если нет доступа к файлу sudoers, просто создайте скрипт-оболочку для команды ssh.

ssh_sudo:

{ 
  echo $PASSWORD;
  cat - ;
} | ssh $* &

Сначала это передает пароль процессу sudo клиента ssh, чтобы запустить rsync на удаленной стороне. Затем все входные данные, поступающие от локального rsync, передаются в ssh.

Наконец, вызовите rsync, например. with:

PASSWORD=<SUDOPASS> rsync -avzue ssh_sudo --rsync-path "sudo -S rsync" SRC DST

Я думаю, что аспект безопасности здесь не так уж и плох, вам нужно будет только сохранить пароль локально как env var. Чтение из файла тоже должно работать...

0
ответ дан 31 July 2020 в 22:06

Другие вопросы по тегам:

Похожие вопросы: