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

Я предполагаю, что самая простая опция состоит в том, чтобы установить Ваше задание крона в более раннее время, сказать 5 минут с этого времени и видеть, работало ли задание. Дополнительно это - хорошая форма, чтобы выполнить Ваш крон, входят в датированный файл. Тем путем Вы видите № 1, который это действительно выполняло, и № 2, который это выполнило правильно.

Удостоверьтесь, что Ваше системное время корректно также.

47
21.11.2018, 18:17
7 ответов

Эта переменная среды пароля, кажется, только используется при использовании rsync протокола:

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

Чтобы это работало, необходимо выполнить rsync как демон также (--daemon опция), который часто делается с помощью inetd.conf.

При использовании этого протокола, abc должен соответствовать цели, определенной в /etc/rsyncd.conf. Имя пользователя должно присутствовать в a auth users строка для этой цели и файл паролей должны быть указаны с secrets file опция.

Именно этот секретный файл содержит отображения между именами пользователя и паролями в следующем формате:

username:password

И именно этот пароль можно указать использование переменной среды RSYNC_PASSWORD.

13
27.01.2020, 19:34

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

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

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

67
27.01.2020, 19:34
  • 1
    Почему Вы предложили бы добавить открытый текст пароля на команде, это - плохой администратор Linux 101. –  Eddie 22.03.2015, 14:34
  • 2
    Супер удобный.. поиск подхода к этому некоторое время.Спасибо. –  Isaac Gregson 26.02.2016, 20:55
  • 3
    В то время как это плохо для добавления пароля как открытого текста, это в настоящее время - единственный довольно простой путь к этому. голосование –  Weston Ganger 24.06.2016, 19:34
  • 4
    можно всегда делать что-то вроде этого: sshpass -p $(cat passFile) .. скрыть ясную передачу в истории удара и chmod 400 на passFile для обеспечения его –  Kresimir Pendic 02.01.2017, 18:27

Вы можете использовать стандартные идентификаторы SSH для входа в PhancedBless. Это обрабатывается по умолчанию, если у вас ~ / .ssh / id_rsa или тому подобное, но вы также можете жестко определить свой собственный путь к закрытому ключу авторизованной Keypair.

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

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

Вы также можете добавить аргументы, такие как -O STRICHOSTKEYKECKING = NO -O UserknownHostsfile = / dev / null , чтобы не принудительно привести к проверке клавиши удаленного хоста. ! Осторожно - это открывает человека в средних атаках и является общей плохой практикой!

16
27.01.2020, 19:34

Очень полезно для сценариев - это использование - пароль- Файл Параметр командной строки.

  • Создайте пустой файл под названием RSYNC_PASS
  • Запись в пароле к этому файлу (ничего более)
  • CHMOD 600 rsync_pass
  • rsync $ args - password-file = rsync_pass user @ rsynchost :: / share localdirectory

Это может быть использовано для сценариев и позволяет быть более безопасным, что просто экспортировать пароль в системную переменную.

13
27.01.2020, 19:34

Я написал свой сценарий, вдохновленный комментариями в этом посте, поэтому я опубликую его здесь как еще один источник вдохновения. Моими требованиями были отсутствие rsyncd на удаленном компьютере, вход по паролю, отсутствие раскрытия пароля в истории или в командной строке. На самом деле это не очень сложно:

#!/bin/bash

HOST=mymachine.mydomain.com
USER=fms
LOCAL=/home/fms/Progetti/MyProject/src

read -s -p "Password for $USER@$HOST: " SSHPASS
echo

sshpass -e rsync -i -r --checksum --delete --chown=nginx:nginx -e "ssh -o PreferredAuthentications=password" $LOCAL/lavori_senato $USER@$HOST:/var/www/drupal/test/web/modules/custom

Мне нужно было изменить конфигурацию моего ssh по умолчанию, чтобы он не пытался сначала использовать открытый ключ -. echoпосле read— это всего лишь прикосновение к форматированию, поскольку при использовании -sдаже конец строки не печатается, а вывод rsync перекрывается с запросом пароля.

0
01.04.2020, 13:18

Для протокола rsyncd используйте замену процесса для параметра--password-file=FILE

rsync --password-file=<(echo "1233456") root@1.2.3.4::abc /def

1
30.12.2020, 06:32

Похоже, это вечная тема. Поэтому я хотел бы предложить решение, которое лучше всего сработало для меня на машине с Ubuntu 20.04.

Моя цель состояла в том, чтобы создать резервную копию на облачном диске 1blu, который не позволял использовать ключ SSH.

  1. Сначала я создал файл ~/.rsync_passи записал в него пароль пользователя SSH.

  2. Затем я использовал команду sshpassс параметром -f, чтобы прочитать пароль из этого файла и передать его rsync.

sshpass -f ~/.rsync_pass rsync -av /var/www/folder/ user@example.com:/backup
2
08.10.2021, 16:10

Теги

Похожие вопросы