2010-07-21 5 views

ответ

34

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

Instructions for setting up passwordless ssh access

+5

Там нет никакой возможности для ввода пароля в тексте команды? – liysd

+1

Не легко, нет никаких параметров для него в ssh –

+0

Следует отметить, что это не всегда можно сделать (например, многие версии сервера sroid-сервера довольно ограничены). – Ponkadoodle

4

использовать ключ SSH:

взгляд на SSH-серийник и SSH-копии идентификатор.

После этого вы можете использовать Rsync таким образом:

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

Если я использую ключ с ssh, я пишу: ssh u @ serv -i ./rsa Но как это сделать в rsync? – liysd

+0

Если вы поместите ключ в свой .ssh-каталог и присвоите ему стандартное имя (обычно id_rsa/id_rsa.pub), он будет автоматически загружен rsync. –

2

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

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

17

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

+28

работает только в том случае, если на целевом сервере работает демон rsync –

+3

Несмотря на то, что этот ответ не помогает, если не используется демон rsync, Google приземлился на меня, и это было именно то, что мне было нужно. Для меня мне нужен прямой rsync для rsyncd, no ssh. Я просто использовал параметр password-file и отлично работал для скрипта. – gregthegeek

61

Использование "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 
+1

Я знаю, что это не самая лучшая практика, но у меня есть NAS с искалеченным SSHD, который не будет работать с ключом. Этот ответ был недостающим моментом для моей головоломки с автоматическим резервным копированием. Итак, +1 для ответа на последний ответ –

+0

Не знал про sshpass, оказался в сложной ситуации. – haridsv

+5

Если вы не можете использовать ключевой файл, но не хотите включать в него пароль, вы можете записать его во временный файл и включить его так: 'sshpass -p \' cat .password \ 'ssh [.. .] '. Затем защитите свой файл '.password'' chmod 400.password', чтобы убедиться, что только его пользователь может его прочитать. – lutuh

4

еще одна интересная возможность: 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. Другими словами, это полезно для задач узкоспециализированных (один раз доступа без пароля)

9

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

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

+2

эти команды arent доступны на моей версии Red Hat Enterprise Linux Server версии 5.11 (Tikanga) ' –

0

Автоматически вводить пароль для команды 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 
-1

Следуя идее, публикуемую Эндрю Сифорд, это делается с помощью 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 
2

Я использую файл 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}" 
1

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

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

+0

-a уже подразумевает -rlptgoD, и в целом было бы гораздо более полезно иметь приведенную командную строку здесь. – Christian

Смежные вопросы