Как я могу rsync без запроса пароля, без использования аутентификации с открытым ключом?


45

Мне нужно выполнить rsyncбез запроса пароля.

Я видел на rsyncman-странице, что он не позволяет указывать пароль в качестве аргумента командной строки.
Но я заметил, что он позволяет указывать пароль через переменную 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
— Skaperen,

65

Если rsyncдемон не работает на целевом компьютере, и вам не нужно раскрывать пароли всем на локальном компьютере ( почему не следует использовать пароли в командной строке? ), Вы можете использовать sshpass:

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

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


2
Почему вы предлагаете добавить в команду открытый текст с паролем, это плохо для linux admin 101.
— Eddie

Супер удобно .. искал подход к этому некоторое время. Спасибо.
— Исаак Грегсон

6
Хотя добавлять пароль в виде обычного текста плохо, в настоящее время это единственный достаточно простой способ сделать это.
— Уэстон Гангер

15
вы всегда можете сделать что-то вроде этого: sshpass -p $(cat passFile) ..спрятать четкий проход в истории Bash, и chmod 400 на passFile, чтобы защитить его
— Kresimir Pendic

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 без пароля.
— Шридхар Сарнобат

ИМХО, это единственный правильный способ сделать это, если вы не хотите использовать ssh.
— maxf130

Этот ответ имеет смысл
— AJ Meyghani
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.