bir uzak sunucudan başka bir uzak sunucuya scp


15

Ben de bir tane büyük sunucuda dosya oneve sunucuya kopyalamak istediğiniz twokullanarak scp. Anahtarları düzgün ayarladım ve masaüstümden her iki sunucuya ssh / scp yapabilirim.

Kopyalamam gereken dosya benim iş istasyonunun hdd boş alan daha büyük, bu yüzden yapmak istedim:

scp one:/opt/bigfile.tar.gz two:/opt/bigfile.tar.gz

ama aldım:

ssh: Could not resolve hostname one: Name or service not known

Burada DNS'miz yok (nedenini sorma), bu yüzden ~ / .ssh / config dosyamda:

Host one
    Hostname        <IP address of server one>
    User            jspurny

Host two
    Hostname        <IP address of server two>
    User            jspurny

Daha küçük bir dosyayla denediğimde oneiş istasyonuma ve sonraya aktarırsam twoiyi çalışır:

scp one:/opt/smallerfile.tar.gz .
scp smallerfile.tar.gz two:/opt/

IP adreslerini doğrudan yorumda önerildiği gibi kullanırken, şunu aldım:

$ scp jspurny@<one's IP>:bigfile.tar.gz jspurny@<two's ip>:bigfile.tar.gz
Host key verification failed.
lost connection

Problem değil:

Boyut burada bir sorun değil - bigfile.tar.gziş istasyonumda saklamanın bir yolu olmadığı için bu sorun için sadece bir "tetikleyici" idi . Dosya boyutundan bağımsız olarak sorun oluşur.

Soru:

Komut neden:

scp oneremote:file secondremote:file

.ssh/configtakma ad kullanıyorsa veya doğrudan ip adresleri kullanıyorsa, hata verir mi?

Çözüldü - hala bir açıklama arıyor - bigfile'i daha küçük dosyalara böldüm ve iş istasyonum aracılığıyla tek tek aktardım. Hala neden işe yaramadığını merak ediyorum. Bu yüzden hala neyin yanlış olduğuna dair bazı açıklamaları takdir ediyorum.

Başarısız olmasının bir sebebini buldum : Görünüşe göre aptal oluyordum. Ben düşündüm komutu o

scp one:file two:file

Her bir sunucuya iki bağlantıları oluşturmak ve daha sonra, veri almak edilmiş bir hemen göndermek iki ve böylece bir röle gibi hareket.

Basit çünkü bu, açıkça böyle değil -vseçenek aslında sadece bağlanır ortaya birinden ve gelen biri onu bağlanmaya çalıştığında iki . Bu kesinlikle mümkün değil çünkü sunucu bir ikiye bağlanmak zorunda değil .


"Scp jspurny @ ip_address_server_one: /opt/bigfile.tar.gz jspurny @ ip_address_server_two: /opt/bigfile.tar.gz" gibi IP adreslerini kullanmak için scp komutunuzu değiştirmeyi denediniz mi?

@tchester: Şimdi yaptım, ama sadece farklı bir hata veriyor (düzenlenmiş soruya bakın)
Jan Spurny


@slm no, boyutla ilgili bir sorunum yok.
Jan Spurny

Hataların açıklamasını bulduğum için, kendi cevabım olarak eklemek / kabul etmek istedim, ancak aslında sorunu çözmediği için bana biraz haksızlık gibi geliyor. : Eğer ben içine soruyu başka bir şekilde ifade etmelidir sence sunucu dosyayı kopyalamak için nasıl biri sunucuya iki bir röle olarak benim iş istasyonu kullanılarak? ya da --verbose seçeneğini bir cevap olarak kullanamama ve kabul etmeme ilişkin açıklamamı eklemeli miyim ?
Jan Spurny

Yanıtlar:


6

Basit boru

Bunu dene:

ssh one 'cat file' | ssh two 'cat > file'

Birincisi dosya içeriğini makinenize, ikincisi bunu ikinci makineye göndermelidir. Hiçbir şeyin yol boyunca kaybolmamasını veya bozulmamasını sağlamak için, aktarımdan sonra her iki uçta bir sağlama toplamı hesaplayacağım.

Ayrıntılı tüneller

Daha ayrıntılı uygulamalar için ssh tünellerini kullanabilirsiniz. Örneğin, şöyle bir şey deneyebilirsiniz:

ssh -R 5001:127.0.0.1:5002 one
ssh -L 5002:127.0.0.1:22 two

Sonra üzerine bir bağlantı açabilirsiniz onemakine için localhostport 5001ve iki kez iletilir ve bir bağlantı olarak sona twoiçin localhostport 22. Bu ssh portudur, bu yüzden bunu başka bir scp için veya rsync için veya herhangi bir şey için kullanabilirsiniz. Ayrıca bir rsyncsunucuyu two22 yerine 873 numaralı bağlantı noktasında başlatabilir ve iletebilirsiniz. Veya ncrasgele bir bağlantı noktası numarası kullanarak ham verileri aktarmak için her iki tarafta da kullanabilirsiniz .

Yukarıdaki yaklaşım arasındaki temel fayda, iki makine arasında sadece tek yönlü bir boru yerine iki yönlü bir tcp bağlantınızın olmasıdır. Bu şekilde, iki taraf bu durumda özellikle önemli olan bilgi alışverişinde bulunabilir rsync.


1
Teşekkürler! Bu tam olarak istediğimi yapmıyor , ama gerçekten ihtiyacım olan şey, bu harika.
Jan Spurny

16

Bu cevap için tam kredi /superuser//a/602436/142948 adresine gider.

-3Scp seçeneğine ihtiyacınız var :

scp -3 one:/opt/bigfile.tar.gz two:/opt/bigfile.tar.gz

-3: İki uzak ana bilgisayar arasındaki kopyalar yerel ana bilgisayardan aktarılır. Bu seçenek olmadan veriler doğrudan iki uzak ana bilgisayar arasında kopyalanır.

http://www.openbsd.org/cgi-bin/man.cgi?query=scp&sektion=1

Aksi takdirde, "iki" ana adı "bir" ana bilgisayarında çözülüyor olabilir, ki bu olmayabilir.


Ne yazık ki, bu seçenek oldukça yeni ve henüz tüm dağıtımlara yayılmış gibi görünüyor.
whereswalden

2

Kaynak sunucuya (bir) kullanıcı erişiminiz olduğundan, neden giriş yapın ve scp komutunuzu doğrudan bu sunucuda çalıştırmayın ... Çok uzun süreceğinden endişe ediyorsanız, ardından içindeki komutu başlatın ve screenardından ekrandan ayırın Ctrl+a dve koşmasına izin ver.

Ancak, bunu iş istasyonunuzdan yapmanız gerekiyorsa ve kaynaktan hedef sunucuya SSH anahtarları düzgün çalışıyorsa, scpkomutu aşağıdaki gibi bir sshkomutun parametresi olarak gönderin :

ssh user@source 'scp /path/to/file user@destination:/path/to/file'

Teşekkürler, bu kesinlikle işe yarayacaktı, ancak bu sunucuların ikisi de PasswordAuthentication'ı devre dışı bıraktı ve birinden diğerine anahtar ekleyemiyorum - birbirlerine bağlanamazlar.
Jan Spurny

0

Hata mesajını arama: "Ana bilgisayar anahtarı doğrulaması başarısız oldu." burada yapılacak en basit şey gibi görünüyor. Bu soru-cevap sorununu askubuntu'da buldum: “Ana bilgisayar anahtarı doğrulaması başarısız oldu…” hatası SSH bağlantı sorunu .

Bu soru- cevap yanıtlarından biri , sorunun ~/.ssh/known_hostsdosyanızda çakışan bir girişten kaynaklandığını öne sürdü . Herhangi bir metin düzenleyicisi kullanarak bu dosyadaki zahmetli girdileri silebilir veya girişleri kaldırmak için bu komutu kullanabilirsiniz:

$ ssh-keygen -R hostname

hostnameBağlanmaya çalıştığınız sunucunun IP adresi veya adı nerede olabilir? Yukarıdakilerin hepsi bu arada ev sahibi iki olacaktı .


Anladığımdan emin değilim. Ben yapabilirsiniz ssh oneve twoherhangi bir sorun olmadan benim iş istasyonundan sunucularını .. sorun başlar ı çalıştırdığınızda scp one:file two:fileiş istasyonundan. Ve bir ya da ikiknown_hosts dosya yok . Ben sadece benim iş istasyonunda iki (hatta biri emin olmak için) tuşları kaldırmaya çalıştı ama hiçbir şey değişti (hariç emin y / n propt).
Jan Spurny

@JanSpurny - iş istasyonunuza atıfta bulunmanız bu Q'da en azından benim için biraz kafa karıştırıcı oldu. Dizüstü / masaüstü bilgisayarınızı kastettiğinizde. Yani "işe yaradığını" söylediğinizde böyle bir şey yapıyorsunuz: scp workstation:file one:fileve workstation:file two:file? Açıkçası "iş istasyonu: dosya" demek zorunda değilsiniz. Ben sadece konuşma adına bunu açıkça söylüyorum.
slm

Bahsettiğim şey, iş istasyonumdaki tüm komutları çalıştırdığım. Yani daha çok şuydu: workstation$ scp one:file fileve workstation$ scp file two:file. Her neyse, bence çözdüm. Kendi cevabım olarak ekleyeceğim.
Jan Spurny

@JanSpurny - Tamam, çözdüğüne sevindim. BTW sorusu için teşekkürler!
slm
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.