Використання rsync з судо на машині призначення


39

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

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

Чи можна використовувати rsyncз sudo?

Відповіді:


68

На машині призначення

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

Потім на джерельній машині вкажіть, що sudo rsyncпотрібно використовувати:

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

Використання його без NOPASSWDнаціленої машини призведе до повідомлення

sudo: немає Tty присутнього та не вказано жодної програми пропуску


Яка модифікація цього дозволить будь-якому користувачеві певної групи зробити це? Замість <ім'я користувача> існує версія <ім'я групи>?
Брайан

3
Спасибі, тільки я використовую ІПК так що я використовував-e="ssh -i $PRIVATE_KEY_PATH" --rsync-path="sudo rsync"
AT

1
Звичайно <username> тепер може читати / записувати все як root за допомогою rsync, локально та віддалено, тому частина про неможливість увійти як root через проблеми безпеки - це свого роду спори ... тому що, по суті, ви робите це зараз .
хмн

1
Ви все ще отримуєте помилку "not tty present ..." після виконання цих інструкцій? Я був. Переконайтесь, що рядок, який я додав, /etc/sudoersв кінці файлу (або після будь-яких групових правил, які можуть впливати на того самого користувача) вирішив проблему для мене.
CPBL

1
Я використовую це рішення, але хотів би покращити безпеку, обмеживши аргументи, які користувач може передавати до rsync на сервері призначення. Як правило, я обмежував би аргументи, якими можна користуватися, <username> ALL=NOPASSWD:<path to rsync> <args>але я не знаю, якими вони будуть, якщо викликати віддалено, як це. Якісь ідеї?
Піт Корнелл

3

Ви можете змусити віддалене судо запитати пароль через 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 (якщо його ще не існує) у пункті призначення m / c
Снідхі Софпро

0

Моє рішення полягає у використанні --rsync-path="sudo rsync", якщо він запитує пароль, ви можете використовувати вирішення, як це:

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

Але це не безпечно, щоб ввести пароль у командному рядку.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.