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

BRM
источник
быстрый способ запустить сервер 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для очистки истории вашего терминала.

Graeme
источник
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