Мне нужно выполнить rsync
без запроса пароля.
Я видел на rsync
man-странице, что он не позволяет указывать пароль в качестве аргумента командной строки.
Но я заметил, что он позволяет указывать пароль через переменную RSYNC_PASSWORD
.
Я попытался экспортировать переменную, но rsync
постоянно спрашивает у меня пароль.
export RSYNC_PASSWORD="abcdef"
rsync root@1.2.3.4:/abc /def
Что я делаю не так?
Пожалуйста примите к сведению:
- Я понимаю, что это плохая идея с точки зрения безопасности
- Я должен использовать только
rsync
, не могу использовать другое программное обеспечение - Я не могу использовать аутентификацию на основе ключей
- Я уже прочитал много вопросов по SE, например:
how-to-pass-password-for-rsync-ssh-command @ stackoverflow.com
rsync-cron-job-with-a-password @ superuser.com
как настроить -rsync-без пароля-с-ssh-on-unix-linux @ superuser.com
Другими словами, мне нужно, чтобы RSYNC_PASSWORD
подход работал! :-)
Ответы:
Эта переменная окружения пароля, по-видимому, используется только при использовании протокола rsync:
Чтобы это работало, вам также нужно запустить rsync как демон (
--daemon
опция), что часто делается с помощьюinetd.conf
.При использовании этого протокола,
abc
должно соответствовать цели, определенной в/etc/rsyncd.conf
. Имя пользователя должно присутствовать вauth users
строке для этой цели, и файл пароля должен быть указан сsecrets file
опцией.Именно этот файл секретов содержит сопоставления между именами пользователей и паролями в следующем формате:
И этот пароль вы можете указать, используя переменную среды RSYNC_PASSWORD.
источник
Если
rsync
демон не работает на целевом компьютере, и вам не нужно раскрывать пароли всем на локальном компьютере ( почему не следует использовать пароли в командной строке? ), Вы можете использоватьsshpass
:Обратите внимание на пробел в начале команды, в
bash
оболочке это предотвратит сохранение команды (и пароля) в истории. Я не рекомендую использоватьRSYNC_PASSWORD
переменную без крайней необходимости (согласно предыдущему редактированию этого ответа), я рекомендую отключить хранение истории или хотя бы очистить историю после. Кроме того, вы можете использоватьtput reset
для очистки истории вашего терминала.источник
sshpass -p $(cat passFile) ..
спрятать четкий проход в истории Bash, и chmod 400 на passFile, чтобы защитить его-p "$RSYNC_PASSWORD"
Вы можете использовать стандартные идентификаторы ssh для входа без пароля. Это обрабатывается по умолчанию, если у вас есть
~/.ssh/id_rsa
или что-то подобное, но вы также можете жестко указать свой собственный путь к закрытому ключу авторизованной пары ключей.Это позволяет выполнять пакетирование / создание сценариев без раскрытия паролей, и открытый ключ можно удалить с целевого сервера, если закрытый ключ когда-либо будет взломан.
Вы также можете добавить такие аргументы, как
-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null
запрет принудительной проверки ключа удаленного хоста. Осторожно - это раскрывает человека в середине атаки и является общей плохой практикой!источник
~/.ssh
папку внутри оболочки (где живет rsync). Как только я использовал -e, чтобы указать на ключ внутри/mnt/c/Users/MyUsername/.ssh
, он работал как ожидалось. (Спасибо.: D)Очень полезно для сценариев использовать параметр
--password-file
командной строки.chmod 600 rsync_pass
rsync $args --password-file=rsync_pass user@rsynchost::/share localdirectory
Это может быть использовано для создания сценариев и позволяет быть более безопасным, чем просто экспорт пароля в системную переменную.
источник