Parola sormadan, ortak anahtar kimlik doğrulaması kullanmadan nasıl rsync yapabilirim?


44

rsyncBeni şifre sormadan çalıştırmam gerekiyor .

rsyncManpage’de, şifrenin komut satırı argümanı olarak belirtilmesine izin vermediğini gördüm .
Ancak değişken aracılığıyla şifreyi belirlemeye izin verdiğini fark ettim RSYNC_PASSWORD.

Bu yüzden değişkeni dışa aktarmayı denedim, ancak rsyncbenden şifre istiyor.

export RSYNC_PASSWORD="abcdef"
rsync root@1.2.3.4:/abc /def

Neyi yanlış yapıyorum?

Düşünün lütfen:

Başka bir deyişle, RSYNC_PASSWORDyaklaşımı çalışmam gerekiyor! :-)


Uzak sunucuda rsync daemon'u etkinleştirdiniz mi?
Rahul Patil

Yanıtlar:


13

Bu parola ortam değişkeni yalnızca rsync protokolünü kullanırken kullanılmak üzere görünür:

rsync rsync://username@1.2.3.4:/abc /def

Bunun çalışması için, rsync'i bir daemon (ayrıca --daemon) kullanarak çalıştırmanız gerekir inetd.conf.

Bu protokolü kullanırken, abciçinde tanımlanan bir hedefe karşılık gelmelidir /etc/rsyncd.conf. Kullanıcı adı auth usersbu hedef için bir satırda bulunmalı ve secrets fileseçenekle birlikte bir şifre dosyası belirtilmelidir .

Aşağıdaki isimdeki kullanıcı adları ve şifreler arasındaki eşleşmeleri içeren bu gizli dosyadır:

username:password

RSYNC_PASSWORD ortam değişkenini kullanarak belirtebileceğiniz bu paroladır.


Bir rsync sunucusunu çalıştırmanın hızlı bir yolu https://s3.amazonaws.com/skaperen/rsend
Skaperen 22:15

65

Eğer rsynccin hedef makinede çalışmıyor ve siz (yerel makinede herkese şifreleri gösterme konusuna umurumda değil neden komut satırında birisi kullanım şifreleri gerekmez mi? ) Kullanabilirsiniz sshpass:

 sshpass -p "password" rsync root@1.2.3.4:/abc /def

Komutun başlangıcındaki boşluğa dikkat edin, bashkabukta bu komutun (ve parolanın) geçmişe kaydedilmesini durduracaktır. RSYNC_PASSWORDKesinlikle gerekli olmadıkça değişkeni kullanmanızı tavsiye etmiyorum (bu cevabın önceki bir düzenlemesine göre), geçmiş depolamayı bastırmayı ya da en azından ardındaki tarihi temizlemeyi öneririm. Ek olarak, tput resetterminal geçmişinizi temizlemek için kullanabilirsiniz .


2
Neden bir komuta şifre temizle metin eklemeyi önerdin, bu kötü bir linux admin 101.
Eddie

Süper kullanışlı .. bir süredir buna bir yaklaşım arıyordum. Teşekkür ederim.
Isaac Gregson,

6
Şifreyi açık metin olarak eklemek kötü olsa da, şu anda bunun için oldukça basit olan tek yol bu.
Weston Ganger

15
her zaman böyle bir şey yapabilirsiniz: sshpass -p $(cat passFile) ..bash tarihinde açık bir geçişi gizlemek için ,, ve güvenliğini sağlamak için passmile üzerinde chmod 400
Kresimir Pendic

3
Bunun eski olduğunu biliyorum, ancak daha yeni okuyucular adına, lütfen şifreyi belirtin - şifreler özel karakterler ve boşluklar içerebilir. -p "$RSYNC_PASSWORD"
Paddy Landau

16

Parolasız giriş yapmak için standart ssh kimliklerini kullanabilirsiniz. Bu, varsayılan ~/.ssh/id_rsaayar olarak işlenir veya benzeriniz varsa, ancak kendi yolunuzu yetkili bir keypair'in özel anahtarına da kodlayabilirsiniz.

Bu, şifreleri açığa çıkarmadan gruplama / komut dosyası oluşturmaya izin verir ve özel anahtarın tehlikeye atılması durumunda genel anahtar hedef sunucudan kaldırılabilir.

rsync -e"ssh -i /path/to/privateKey" -avR $sourcedir ${ruser}@${rhost}:~/${rdir}/

-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/nullUzak ana bilgisayar anahtar doğrulamasını zorlamamak gibi argümanlar da ekleyebilirsiniz . ! Dikkat - Orta saldırıda adamı açar ve genel olarak kötü bir uygulamadır!


1
Bu, özellikle Windows 10 için yeni Bash kabuğu kullanıyorsanız kullanışlıdır. Neden rsync'in şifresiz çalışmadığını merak ediyordum. ~/.sshKabuğun içindeki klasörü (rsync'in yaşadığı yerde) kullandığını fark ettim . Bir kez -e içindeki anahtarı işaret etmek için kullandım /mnt/c/Users/MyUsername/.ssh, beklendiği gibi çalıştı. (Teşekkürler: D)
Toby Deshane

12

Komut dosyası oluşturma için çok yararlı --password-filekomut satırı seçeneğini kullanmaktır .

  • Rsync_pass adlı boş bir dosya oluşturun
  • bu dosyaya şifre yaz (başka bir şey değil)
  • chmod 600 rsync_pass
  • rsync $args --password-file=rsync_pass user@rsynchost::/share localdirectory

Bu komut dosyası için kullanılabilir ve yalnızca şifreyi sistem değişkenine vermekten daha güvenli olmasını sağlar.


4
Okuyucuya not: bu ayrıca sunucuda çalışan bir rsync arka plan programı gerektirir. Gerçekten, ssh anahtarlarının şifresiz rsync için yeterli olacağını umuyordum.
Sridhar Sarnobat

IMHO, ssh kullanmak istemiyorsa, bunu yapmanın tek doğru yoludur.
maxf130

Bu cevap en mantıklı
AJ Meyghani
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.