Как я могу 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.