Как автоматически передать пароль для команды rsync SSH? - PullRequest
94 голосов
/ 21 июля 2010

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

Ответы [ 13 ]

84 голосов
/ 24 октября 2013

Используйте неинтерактивную утилиту 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
41 голосов
/ 21 июля 2010

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

Инструкция по настройке безпарольного доступа по ssh

24 голосов
/ 12 января 2013

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

12 голосов
/ 31 января 2015

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

#!/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 своим паролем. Просто убедитесь, что этот файл надежно хранится!

7 голосов
/ 21 июля 2010

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

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

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

rsync -a --stats --progress --delete /home/path server:path
6 голосов
/ 25 июня 2014

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

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

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

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

4 голосов
/ 19 октября 2018

у меня получается так:

sshpass -p "password" rsync -ae "ssh -p remote_port_ssh" /local_dir  remote_user@remote_host:/remote_dir
3 голосов
/ 08 сентября 2017

У меня работает следующее:

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

3 голосов
/ 29 марта 2016

Автоматический ввод пароля для команды 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
3 голосов
/ 12 января 2011

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

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

...