Yapmam gereken rsync
tarafından ssh
ve şifresini geçme ihtiyacı olmaksızın otomatik olarak yapmak istiyorum ssh
manuel.
Yapmam gereken rsync
tarafından ssh
ve şifresini geçme ihtiyacı olmaksızın otomatik olarak yapmak istiyorum ssh
manuel.
Yanıtlar:
Komut dosyası içeren ssh oturum açma işlemleri için parolası olmayan bir anahtar dosyası kullanmalısınız. Bu açıkça bir güvenlik riskidir, anahtar dosyanın kendisinin yeterince güvenli olmasına dikkat edin.
ssh -i
müşteri tarafında her zaman mümkün olmalıdır. Sunucunun tüm anahtar türlerini desteklemeyebileceğini mi söylüyorsunuz (örn. ECDSA)? Bu büyük bir sorun olmayacak, sadece bir kullanım durumu ssh-keygen -t
. Bir şey mi kaçırıyorum?
rsync -e
ssh -i
hakkında bilgi edinin ve .
"Sshpass" etkileşimli olmayan ssh şifre sağlayıcı yardımcı programını kullanın
Ubuntu'da
sudo apt-get install sshpass
Rsync komutu
/usr/bin/rsync -ratlz --rsh="/usr/bin/sshpass -p password ssh -o StrictHostKeyChecking=no -l username" src_path dest_path
sshpass -p`cat .password` ssh [...]
. Ardından .password
dosyanızı chmod 400 .password
yalnızca kullanıcınızın okuyabildiğinden emin olmak için koruyun .
src_path
sunucu: yol olmalıdır, şöyle:server01.mydomain.local:/path/to/folder
-a
rsync anahtarı içerir -rlptgoD
:, böyle komutu kısaltabilirrsync -az ...
rsync
Ortam değişkenini RSYNC_PASSWORD
kullanmak istediğiniz parolaya ayarlayarak veya --password-file
seçeneği kullanarak komutta parola istemini önleyebilirsiniz .
Genel / özel anahtar kullanamıyorsanız, şunları kullanabilirsiniz:
#!/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 ve DEST'i normal rsync kaynak ve hedef parametrelerinizle değiştirmeniz ve PASS'ı şifrenizle değiştirmeniz gerekecektir. Sadece bu dosyanın güvenli bir şekilde saklandığından emin olun!
Red Hat Enterprise Linux Server release 5.11 (Tikanga)
Bunun gibi çalışmasını sağladım:
sshpass -p "password" rsync -ae "ssh -p remote_port_ssh" /local_dir remote_user@remote_host:/remote_dir
remote_port_ssh
? Gerçek bir değer için yer tutucu gibi görünür.
Bir ssh anahtarı kullanın.
Bak ssh-keygen
ve ssh-copy-id
.
Bundan sonra şu şekilde kullanabilirsiniz rsync
:
rsync -a --stats --progress --delete /home/path server:path
Bir başka ilginç olasılık:
rsync --partial --progress --rsh = "ssh -i dsa_private_file" host_name @ host: / home / me / d.
Not: RSA / DSA özel anahtarınız olan -i dsa_private_file
Temel olarak, bu yaklaşım @Mad Scientist tarafından tarif edilene çok benzer, ancak özel anahtarınızı ~ / .ssh dosyasına kopyalamanız gerekmez. Başka bir deyişle, anlık görevler için kullanışlıdır (bir seferlik şifresiz erişim)
Aşağıdakiler benim için çalışıyor:
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
Yüklemek zorunda kaldım sshpass
Rsync komutu için parolayı otomatik olarak girmek zordur. Sorundan kaçınmak için basit çözümüm, yedeklenecek klasörü bağlamak. Daha sonra bağlanan klasörü yedeklemek için yerel bir rsync komutu kullanın.
mount -t cifs //server/source/ /mnt/source-tmp -o username=Username,password=password
rsync -a /mnt/source-tmp /media/destination/
umount /mnt/source-tmp
Şimdiye kadar zaten uygulamış olsanız da,
herhangi bir beklenen uygulamayı da kullanabilirsiniz (Perl, Python'da alternatifler bulacaksınız: pexpect, paramiko, vb.)
Bunu Windows platformunda yapmak için bir VBScript dosyası kullanıyorum, bana çok iyi hizmet veriyor.
set shell = CreateObject("WScript.Shell")
shell.run"rsync -a Name@192.168.1.100:/Users/Name/Projects/test ."
WScript.Sleep 100
shell.SendKeys"Your_Password"
shell.SendKeys "{ENTER}"
Resmi çözüm (ve diğerleri) ilk ziyaret ettiğimde eksikti, bu yüzden yıllar sonra, herkese açık / özel bir anahtar çifti kullanmak niyetinde olan başkalarının buraya gelme ihtimaline karşı bu alternatif yaklaşımı göndermek için geri geldim:
Bunu, kaynaktan hedef yedeklemeye çeken hedef yedekleme makinesinden gerçekleştirin.
rsync -av --delete -e 'ssh -p 59333 -i /home/user/.ssh/id_rsa' user@10.9.9.3:/home/user/Server/ /home/keith/Server/
Bunu, kaynaktan hedef yedeklemeye gönderen kaynak makineden yürütün.
rsync -av --delete -e 'ssh -p 59333 -i /home/user/.ssh/id_rsa' /home/user/Server/ user@10.9.9.3:/home/user/Server/
Ve ssh için alternatif bir bağlantı noktası kullanmıyorsanız, aşağıdaki daha zarif örnekleri düşünün:
Bunu, kaynaktan hedef yedeklemeye çeken hedef yedekleme makinesinden yürütün:
sudo rsync -avi --delete user@10.9.9.3:/var/www/ /media/sdb1/backups/www/
Bunu, kaynaktan hedef yedeklemeye gönderen kaynak makineden yürütün:
sudo rsync -avi --delete /media/sdb1/backups/www/ user@10.9.9.3:/var/www/
Hala bir parola isteniyorsa, ssh yapılandırmanızı kontrol etmeniz /etc/ssh/sshd_config
ve kaynak ve hedefteki kullanıcıların her birinin diğerlerinin ilgili genel ssh anahtarına sahip olduğunu doğrulamanız gerekir ssh-copy-id user@10.9.9.3
.
(Yine bu, ssh anahtar çiftlerini şifresiz, alternatif bir yaklaşım olarak kullanmak içindir ve şifreyi bir dosya aracılığıyla geçirmek için değildir .)
Andrew Seaford tarafından yayınlanan fikrin ardından, bu sshfs kullanılarak yapılır:
echo "SuperHardToGuessPass:P" | sshfs -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@example.com:/mypath/ /mnt/source-tmp/ -o workaround=rename -o password_stdin
rsync -a /mnt/source-tmp/ /media/destination/
umount /mnt/source-tmp