Як я можу rsync без запрошення пароля, не використовуючи аутентифікацію відкритого ключа?


44

Мені потрібно виконати rsync, не вказуючи мене на пароль.

На rsyncmanpage я бачив, що він не дозволяє вказати пароль як аргумент командного рядка.
Але я помітив, що це дозволяє вказувати пароль через змінну RSYNC_PASSWORD.

Тому я спробував експортувати змінну, але rsyncпродовжує просити мене пароля.

export RSYNC_PASSWORD="abcdef"
rsync root@1.2.3.4:/abc /def

Що я роблю неправильно?

Зверніть увагу:

Іншими словами, мені потрібно, щоб RSYNC_PASSWORDпідхід працював! :-)


Ви ввімкнули демон rsync на віддаленому сервері?
Рахул Патіль

Відповіді:


13

Ця змінна середовище паролів, як видається, використовується лише під час використання протоколу rsync:

rsync rsync://username@1.2.3.4:/abc /def

Щоб це працювало, потрібно також запустити rsync як демон ( --daemonваріант), що часто робиться за допомогою inetd.conf.

При використанні цього протоколу abcповинен відповідати цілі, визначеній в /etc/rsyncd.conf. Ім'я користувача повинно бути в auth usersрядку для цієї цілі, а файл пароля повинен бути вказаний з secrets fileопцією.

Саме цей файл секретів містить відображення між іменами користувачів та паролями у такому форматі:

username:password

І саме цей пароль можна вказати, використовуючи змінну середовища RSYNC_PASSWORD.


швидкий спосіб запустити сервер rsync за допомогою https://s3.amazonaws.com/skaperen/rsend
Скаперен

65

Якщо rsyncдемон не працює на цільовій машині, і вам не байдуже відкривати паролі всім на локальній машині ( Чому хтось не повинен використовувати паролі в командному рядку? ), Ви можете використовувати sshpass:

 sshpass -p "password" rsync root@1.2.3.4:/abc /def

Зауважте пробіл на початку команди, в bashоболонці це зупинить збереження команди (та пароля) в історії. Я не рекомендую використовувати RSYNC_PASSWORDзмінну, якщо це абсолютно не потрібно (відповідно до попереднього редагування цієї відповіді), я рекомендую придушити зберігання історії або принаймні очистити історію після. Крім того, ви можете використовувати tput resetдля очищення історії свого терміналу.


2
Чому б ви запропонували додати в команду чіткий текст паролем, це поганий адміністратор Linux 101.
Едді

Супер зручно .. деякий час шукав підходу до цього. Дякую.
Ісаак Грегсон

6
Хоча це погано додавати пароль як чіткий текст, це наразі єдиний досить простий спосіб до цього.
Вестон Гангер

15
Ви завжди можете зробити щось подібне: sshpass -p $(cat passFile) ..сховати чіткий пропуск в історії башшнів, і chmod 400 на passFile, щоб захистити його
Кресімір Пендич

3
Я знаю, що це старе, але заради нових читачів, будь ласка, цитуйте пароль - паролі можуть містити спеціальні символи та пробіли. -p "$RSYNC_PASSWORD"
Падді Ландау

16

Ви можете використовувати стандартні посвідчення ssh для входу без пароля. Це обробляється за замовчуванням, якщо у вас є ~/.ssh/id_rsaподібне, але ви також можете жорстко кодувати власний шлях до приватного ключа авторизованого ключа.

Це дозволяє створювати пакетну / сценарійну версію без викриття паролів, а відкритий ключ можна видалити з цільового сервера, якщо приватний ключ коли-небудь буде порушений.

rsync -e"ssh -i /path/to/privateKey" -avR $sourcedir ${ruser}@${rhost}:~/${rdir}/

Ви також можете додати аргументи, як-от -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/nullне примушувати віддалену перевірку ключа хоста. ! Обережність - це відкриває людину в середніх атаках і є загальною поганою практикою!


1
Це особливо корисно, якщо ви використовуєте нову оболонку Bash для Windows 10. Мені було цікаво, чому rsync не працює без паролів. Я зрозумів, що він використовує ~/.sshпапку всередині оболонки (де живе rsync). Як тільки я використав -e, щоб вказати на ключ всередині /mnt/c/Users/MyUsername/.ssh, він працював як очікувалося. (Спасибі: D)
Тобі Дешане

12

Дуже корисним для сценаріїв є використання --password-fileпараметра командного рядка.

  • Створіть порожній файл під назвою rsync_pass
  • написати пароль до цього файлу (нічого більше)
  • chmod 600 rsync_pass
  • rsync $args --password-file=rsync_pass user@rsynchost::/share localdirectory

Це можна використовувати для сценаріїв і дозволяє бути більш безпечним, ніж просто експорт пароля до системної змінної.


4
Примітка читачеві: для цього також потрібен демон rsync, що працює на сервері. Я справді сподівався, що ключів ssh буде достатньо для безоплатної rsync.
Шрідхар Сарнобат

IMHO - це єдиний правильний спосіб зробити це, якщо хтось не хоче використовувати ssh.
maxf130

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