Rsync için iki uzaktan kumanda kullanmak neden mümkün değil? [kapalı]


33

Hem kaynak hem de hedef uzaktayken, rsync şikayet eder:

The source and destination cannot both be remote. rsync error: syntax or usage error (code 1) at main.c(1156) [Receiver=3.0.7]

Bunu yapması için aşılmaz bir teknik engel var mı? Yoksa bu sadece henüz uygulanmayan bir durum mu? Hem karmaları hem de verileri tutan iki uzaktan kumanda arasındaki aktarıma aracılık eden bellekte yerel bir tampon oluşturmak nispeten kolay görünüyor.

DÜZENLE

İnsanlar somut önerilerde bulundukları için, özel kullanım durumumu ayrıntılarıyla gösteren ayrı bir soru yayınladım. Bunlar iki ayrı, gerçekten ve rsync için bu özel detayları bilmenin faydası olacağını düşünüyorum.


1
Bir uzak src rsyncd'ye uzak bir dest rsyncd'ye veri göndermeyi içerir. Bunun üzerine src sistemine geçerek ve rsync'i çağırarak çalışabilirsiniz.
Alex Holst,

@AlexHolst Özel durumumda bunun işe yarayacağını sanmıyorum. düzenlemeyi gör
goncalopp

Üzgünüz, Sunucu Hatası teorik sorularla ilgilenmiyor; Sadece gerçekten karşılaştığınız sorunlar hakkındaki cevaplanabilir sorular. Daha fazla bilgi için SSS bölümüne bakın .
Chris S

2
Üzgünüz (moderatörler), bu cevaplanabilir ilginç bir sorudur: Bunun nedeni, rdiff algoritmasının simetrik olmamasıdır. Daha büyük bir CPU ve bellek yükü "aktif" tarafta. "Pasif" tarafın yalnızca tüm değiştirilmiş dosyaların tüm bloklarını (bkz. --Block-size parametresi) sağlama hesaplamaları ve yeniden göndermeleri gerekir. Bu, çok küçük bellek gereksinimleri ile yapılır ve işlemlerin çoğu, birinci seviye CPU önbelleğinde yapılabilir. "Etkin" tarafın aynı veri bloğunun bulunduğu bir sağlama toplamı tarafından aranması gerekiyor ...
hynekcer 13:16

1
Bence bu harika bir soru (tam olarak bu sorum vardı, bu yüzden buradayım) ve kapanış nedeni sahte. Hala cevabı bilmek istiyorum!
reinierpost

Yanıtlar:


8

neden uzaktaki makineye bağlanmayı denemiyor ve oradan aktarımı başlatmıyorsunuz. Eğer ssh anahtarlarını kullanıyorsanız, sizin için kimlik doğrulamasını yönetmek için olsa aracı geçişini kullanabilirsiniz.

ssh -A remotehostA rsync /remote/file/on/host/a remoteHostB:/destination/

Bu komut size remoteHostA'da oturum açar ve oradan rsync'i çalıştırır.


3
Bazı güvenlik hususları var. Düzenlemeyi bakın
goncalopp

3
Ayrıca, iki sistem arasında doğrudan erişiminiz yoksa bu işe yaramaz ... Ve doğrudan erişim elde etmek için güvenlik bölümünün güvenlik duvarı kurallarını doğru şekilde uygulayabilmesi için iki hafta beklemeniz gerekir ...
Gert van den Berg

1
Senaryo: Sunucu A, sunucu B ve C'ye anahtar tabanlı kök erişimine sahiptir. Her ikisinde de kök erişimini kullanarak B'den C'ye eşitleme yapmak istiyorsunuz. Ancak B veya C'nin birbirine kök erişimi olmasını istemezsiniz.
thomasrutter

5
scp -3r <remote src> <remote dest>

Bunu yapmakta zorlanmıyor.


4
scp delta yapmaz, AFAIK ve bu durumda çok gerekli. Düzenlememe ilişkin daha fazla bilgi
goncalopp

4
BT, scp, sunucular arasında bir proxy gibi olmak istiyorsanız -3 seçenekleriyle birlikte olmalı
alterpub

Ne yazık ki scp, örneğin rsync'in önemli özelliklerinden yoksundur; örneğin: dosya sistemlerini (örn. Kullanıcı klasörüne takılı ağ sürücüsü), arşiv modunu (içinde "sembolik bağların, aygıtların, özniteliklerin, izinlerin, mülkiyetlerin, vb. Korundukları") geçmemesi seçeneği ...
Bastion

1

Uzak dosya sistemlerinden birini (veya her ikisini) birlikte takarak bunun üzerinde çalışabilirsiniz sshfs. Ardından, rsync yerelmiş gibi davranacaktır.

Ne yazık ki bu, dosya sistemi takılı olan makinede çok fazla bant genişliği kullanımına neden olacaktır, bu sshfsyüzden bunu yalnızca siz ve üçüncü makine arasında çok fazla bant genişliğine sahip olan makinede yapmanızı öneririm.

Elbette, ideal çözüm, makinelerin doğrudan birbirleriyle konuşmasıdır. Yapmamaları için iyi bir sebep düşünemiyorum .


düzenlemeye bakın. Bahsettiğiniz sebep güvenlik. Bir (kök) tehlike, iki makineden herhangi birinin diğerine dosya sistemine erişmesine yol açmamalıdır. Ama belki de buna yanlış açıdan saldırıyorum ve üçüncü bir makineyi içermeyen bir çözüm var ...
goncalopp

Hmm. Bence bu detaylar gerçekten bu soruya eklenmeli. Kök uzlaşmasına gelince, gerçekten SELinux kullanıyor olmalısınız.
Michael Hampton:

Bunu bıraktım, çünkü başka biri özellikle rsync'de bu davranışla ilgilenebilir. AFAIK, SELinux herhangi bir makinede, her iki durumda da yerel olarak yürüten rsync aynı davranışa sahipse (diğerinin belirli bir dizine dosya sistemi erişimi) diğerinin tehlikeye atılıp atılmadığını söyleyemez.
goncalopp

SELinux'un nasıl çalıştığını biliyor musunuz emin değilim. Bütün mesele, bir hizmetin (hatta hizmet verilen bir servisin), hizmet kök olarak çalışıyor olsa bile, açıkça erişilmesine izin verilmeyen şeylere erişmesini engellemesidir.
Michael Hampton

Ben SELinux'un politikalarının sadece temel bir anlayışa sahip, ancak rsync edilir , değil mi dosya sistemine erişim gerekiyor? Uzaktaki makine tehlikeye girerse, aynı tür (yerel) erişim düzenleri istenmez .
goncalopp
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.