Мне нужно сделать rsync
по ssh
и я хочу сделать это автоматически, без необходимости передачи пароля для ssh
вручную.
Как автоматически передать пароль для команды rsync SSH?
Ответ 1
Вы должны использовать ключевой файл без кодовой фразы для сценариев ssh-логинов. Это, очевидно, риск для безопасности, следите за тем, чтобы сам файл ключей был надежно защищен.
Ответ 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
Еще одна интересная возможность:
- генерировать пару ключей RSA или DSA (как было описано)
- поставить открытый ключ к хосту (как это уже было описано)
- бежать:
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