benim (üçüncü) bilgisayardan iki uzak ana bilgisayar arasında scp


136

İki uzak ana bilgisayarım var.
host1-> 10.3.0.1
host2-> 10.3.0.2
Her ikisi de bir ssh sunucusu çalıştırır.

Ssh sunucusu, host1'deki 22 numaralı portu ve host2'deki 6969 numaralı portu dinler. Şimdi, yerel makinemi kullanarak ssh aracılığıyla host1 veya host2'ye giriş yapmadan host1'den host2'ye bir şey kopyalamam gerekiyor. Gibi bir şey,

scp user@10.3.0.1:/path/to/file user@10.3.0.2/path/to/file

Bunu nasıl yapabilirim, lütfen iki ana bilgisayarın ssh için farklı bağlantı noktaları kullandığını unutmayın.


Uzaktaki bir ana bilgisayardan uzaktaki bir ana bilgisayara aktarma yapıp yapamayacağınızı mı yoksa parola girmeden mi yapmayı mı soruyorsunuz?
glenn jackman,

-PBayrak kullanılacak bağlantı noktasını belirtmek için var olsa da , uzaktan uzaktan aktarma durumunda, ssh, ana bilgisayar bağlantı noktasını belirleme konusunda tanımlanmış bir davranış olarak tanımlanmamıştır ...
mveroone

Yanıtlar:


216

Geçmişte, uzak sistemler arasında dosyaları kopyalamak için scp( naif ) çağrıldığında işe yaraması çok elverişsizdi: örneğin, yazdıysanız

    scp user1@remote1:/home/user1/file1.txt user2@remote2:/home/user2/file1.txt

scpilk önce sshremote1'de bir oturum açar ve ardından scporadan remote2'ye koşardı. Bunun çalışması için remote1'deki remote2 için yetkilendirme bilgilerini ayarlamanız gerekir.

Bunu yerine getirmenin modern yolu, ("modern" çünkü sadece birkaç yıl önce uygulandı ve belki herkesin -3erişemeyeceği bir şey yoktu scp) iki adım gerektiriyor. Gerekli ilk adım, ~/.ssh/confighem remote1 hem de remote2'ye bağlantı için tüm seçenekleri aşağıdaki gibi ayarlamaktır:

    Host remote1.example.org
    Port 2222
    IdentityFile /path/to/host1-id_rsa

    Host remote2.example.org
    Port 6969
    IdentityFile /path/to/host2-id_rsa

Bu şekilde o komuta etmek için gerekli tüm seçenekleri geçmek mümkün hale belirsizlik içermeyen : Biz CLI üzerinde deseydim mesela, kullanım port 2222 Yukarıdaki yapılandırma olmadan, biz atıfta olup olmadığını belirsiz olurdu REMOTE1 veya REMOTE2 ve aynı şekilde şifreleme anahtarlarını içeren dosya için. Bu şekilde CLI düzenli ve basit kalır.

İkincisi, -3aşağıdaki gibi seçeneği kullanın :

    scp -3 user1@remote1:/home/user1/file1.txt user2@remote2:/home/user2/file1.txt

Bu -3seçenek scp, trafiğin üçüncü taraf olmasına rağmen, komutun verildiği PC üzerinden trafiği yönlendirmeyi talimat verir. Bu şekilde, yetkilendirme kimlik bilgileri yalnızca veren PC'de üçüncü tarafa ait olmalıdır.


6
Gelecekte başvurmak için: Bir dosyayı, bir kimlik dosyasını paylaşan iki ana bilgisayar arasında (EC2 örneği gibi) kopyalarsanız, yapılandırma dosyasına ihtiyacınız yoktur. Her iki ana bilgisayara bağlanmak için bir -i argümanı yeterlidir.
Artur Czajka

1
Ayrıca, Google Compute Engine için, ~/.ssh/configdosyanıza ekleme desteği de var : cloud.google.com/compute/docs/gcloud-compute, ancak AWS'nin aynı desteği olduğunu sanmıyorum
modulitos

1
Çıktıyı normalde yaptığınız gibi görmeyeceğiniz için, ayrıntılı modla birlikte etkinleştirmek için bir ipucu -v.
yarın

6

Bunu son denediğimde, scp bunu yapamadı. Komut satırınız iyi görünüyor. Bu geçici çözüm işe yarayacak:

ssh -p port_on_machine1 user@machine1 "cat /path/to/file/one"|ssh -p port_on_machine2 user@machine2 "cat >/path/to/file/two"

scp man sayfamda "İki uzak ana bilgisayar arasındaki kopyalara da izin veriliyor" yazıyor.
Glenn jackman,

1
Teşekkürler, duymak güzel. Scp'ye -P bayrağı verebilirsiniz (bazı BSD kullanıcıları tarafından yazılmıştır, çünkü bunun argüman yönetimi çok trajiktir :-(), ama uzaktaki sunucularda farklı portlar belirleyemediğiniz anlaşılıyor. ama sadece bu geçici çözüm iz bırakmaz, düşünmek (veya yanıltıcıdır çözümlerin bir yeri vardır, ssh kullanarak ancak scp kaçınarak - örneğin, sftpfs için, ancak en basit değildir). iskele ayarlarla benim geçici çözümü uzattı.
user259412

4

Benim durumumda, -3tartışmasız uzak bir uzak kopyaya uzaktan yapıyordum . '-P' parametresiyle verilen bağlantı noktası, 1. sunucu ile çalışır, ancak bağlantı noktası 22, ikincisi ile kullanılır.

ssh -P 1234 user@server1.mydomain.com user@server2.otherdomain.com

Çözüm, /etc/ssh/ssh_configdosyayı düzenlemek server1ve şu satırları eklemektir:

Host *.otherdomain.com
   Port  1234

Bu şekilde, 1234 numaralı liman her ikisi için de kullanılır. Bu da farklı olabilir.

Bu çözüm, önceki çözümlerden daha iyi bir verime sahiptir çünkü topluluk doğrudandır.


perez, komut satırından iki farklı uzak makine için iki farklı port üzerinden scp elde etmenin bir yolu var mı?
Kırmızı Şişe

4

Kaynak ve hedef scp: // [user @] host [: port] [/ path] biçiminde URI olarak belirtilebilir.

Böylece koşabilirsiniz:

scp -3 scp://user@10.3.0.1:22/path/to/file scp://user@10.3.0.2:6969/path/to/file
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.