Подтвердить что ты не робот

Как автоматически передать пароль для команды rsync SSH?

Мне нужно сделать rsync по ssh и я хочу сделать это автоматически, без необходимости передачи пароля для ssh вручную.

4b9b3361

Ответ 2

Используйте служебную программу провайдера паролей sshpass "sshpass"

В Ubuntu

 sudo apt-get install sshpass

Команда rsync

 /usr/bin/rsync -ratlz --rsh="/usr/bin/sshpass -p password ssh -o StrictHostKeyChecking=no -l username" src_path  dest_path

Ответ 3

Вы можете избежать запроса пароля в команде rsync, установив для переменной среды RSYNC_PASSWORD пароль, который вы хотите использовать, или используя параметр --password-file.

Ответ 4

Если вы не можете использовать общедоступные/закрытые ключи, вы можете использовать expect:

#!/usr/bin/expect
spawn rsync SRC DEST
expect "password:"
send "PASS\n"
expect eof
if [catch wait] {
    puts "rsync failed"
    exit 1
}
exit 0

Вам нужно будет заменить SRC и DEST нормальными параметрами источника и назначения rsync и заменить PASS на ваш пароль. Просто убедитесь, что этот файл надежно хранится!

Ответ 5

Используйте ключ ssh.

Посмотрите на ssh-keygen и ssh-copy-id.

После этого вы можете использовать rsync следующим образом:

rsync -a --stats --progress --delete /home/path server:path

Ответ 6

Еще одна интересная возможность:

  1. генерировать пару ключей RSA или DSA (как было описано)
  2. поставить открытый ключ к хосту (как это уже было описано)
  3. бежать:
rsync --partial --progress --rsh="ssh -i dsa_private_file" [email protected]:/home/me/d .

Примечание: -i dsa_private_file, который является вашим закрытым ключом RSA/DSA

По сути, этот подход очень похож на описанный @Mad Scientist, однако вам не нужно копировать свой закрытый ключ в ~/.ssh. Другими словами, это полезно для специальных задач (одноразовый доступ без пароля)

Ответ 7

Я работаю так:

sshpass -p "password" rsync -ae "ssh -p remote_port_ssh" /local_dir  [email protected]_host:/remote_dir

Ответ 8

Хотя вы уже реализовали его,

вы также можете использовать любую expect (вы найдете альтернативы в Perl, Python: pexpect, paramiko и т.д.)

Ответ 9

Автоматически вводить пароль для команды rsync сложно. Мое простое решение, чтобы избежать проблемы, - это установить резервную копию папки. Затем используйте локальную команду rsync для резервного копирования установленной папки.

mount -t cifs //server/source/ /mnt/source-tmp -o username=Username,password=password
rsync -a /mnt/source-tmp /media/destination/
umount /mnt/source-tmp

Ответ 10

Следующие работы для меня:

SSHPASS='myPassword'
/usr/bin/rsync -a -r -p -o -g --progress --modify-window=1 --exclude /folderOne -s -u --rsh="/usr/bin/sshpass -p $SSHPASS ssh -o StrictHostKeyChecking=no -l root"  source-path  myDomain:dest-path  >&2

Мне пришлось установить sshpass

Ответ 11

Я использую файл VBScript для этого на платформе Windows, он очень хорошо меня поддерживает.

set shell = CreateObject("WScript.Shell")
shell.run"rsync -a [email protected]:/Users/Name/Projects/test ."
WScript.Sleep 100
shell.SendKeys"Your_Password"
shell.SendKeys "{ENTER}"

Ответ 12

Официальное решение (и другие) были неполными, когда я впервые посетил, поэтому я разработал обходной или альтернативный подход, используя rsync с парой открытых/закрытых ключей. Несколько лет спустя я вернулся, чтобы опубликовать этот альтернативный подход на тот случай, если кто-нибудь из других окажется здесь и намеревается использовать пару открытых/закрытых ключей случайно:

Выполните это с целевой машины резервного копирования, которая извлекает данные из источника в целевую резервную копию.

rsync -av --delete -e 'ssh -p 59333 -i/home/user/.ssh/id_rsa' [email protected]: /home/user/Server//home/keith/Server/

Выполните это с исходного компьютера, который отправляет из исходного в целевое резервное копирование

rsync -av --delete -e 'ssh -p 59333 -i/home/user/.ssh/id_rsa'/home/user/Server/[email protected]: /home/user/Server/

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

И, если вы не используете альтернативный порт для ssh, рассмотрите более элегантные примеры ниже:

Выполните это с целевой машины резервного копирования, которая извлекает данные из источника в целевую резервную копию:

sudo rsync -avi --delete [email protected]: /var/www//media/sdb1/backups/www/

Выполните это с исходного компьютера, который отправляет из исходного в целевое резервное копирование:

sudo rsync -avi --delete/media/sdb1/backups/www/[email protected]: /var/www/

Если вы все еще получаете запрос на ввод пароля, то вам нужно проверить конфигурацию ssh в /etc/ssh/sshd_config и убедиться, что у пользователей в исходном и целевом экземплярах есть соответствующий открытый ключ ssh других.

(Опять же, это для использования ssh без пароля, в качестве альтернативного подхода, а не для передачи пароля через файл.)

Ответ 13

Следуя идее, написанной Эндрю Сифордом, это делается с помощью sshfs:

echo "SuperHardToGuessPass:P" | sshfs -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no [email protected]:/mypath/ /mnt/source-tmp/ -o workaround=rename -o password_stdin
rsync -a /mnt/source-tmp/ /media/destination/
umount /mnt/source-tmp