Bağlantı noktası yönlendirme kullanılırken büyük bir scp dosya aktarımına nasıl devam edebilirim?


10

Birkaç durak uzakta bir makinem var ve dosyaları aktarmak için port yönlendirme ayarlamam gerekiyor.

Düzenleme: Açık olmak gerekirse, uzak makineye erişmek için birden fazla atlama gerekir. Makinemden, 10.255.xx'e erişebileceğim bir VPN kurdum - bu, VPN üzerinden bağlanabildiğim tek makine. .Xx'e giriş yaptıktan sonra, diğer makinelere bağlanabilirim - .yy bunlardan biri.

Makinemden:

ssh -L 4567:localhost:4567 me@10.255.x.x

Sonra o makineden:

ssh -L 4567:localhost:22 me@10.255.y.y

Sonra yapabilirim

scp -P 4567 me@localhost:/path/to/large/file.gz .

Sadece transfer bir noktada öldü bulmak için bu overnite çalışan bıraktı.

Aktarımı sürdürmek için rsync'i ssh üzerinden kullanmak için birkaç öneri gördüm, ancak bunu nasıl ayarlayacağım belli değil. Mümkün mü?


Tüm bu şerbetçiotu ne için? Olmaz scp me@10.255.x.x:/path/to/large/file.gz .aynen başarmak? İstemci ve sunucuda hangi scp (ssh) sürümü yüklü?
Dennis

@Dennis: scp aktarımın sürdürülmesini desteklemez - önerdiğiniz şey indirmeyi yeniden başlatacaktır.
chris

Bazı sürümler yapar (dizüstü bilgisayarımın scp'si var, VPS'lerim yok). Sormamın nedeni, şerbetçiotu benim için gereksiz görünüyor ve şerbetçisiz yeniden senkronize etmenin çok daha kolay olması.
Dennis

Bu yanıt size de yardımcı olabilir: unix.stackexchange.com/a/43097/14084
Bernhard

Yanıtlar:


9

Scp'nin bazı sürümlerinde (kaynak bilgisayardaki sürüm anahtar gibi görünüyor), scp komutunun yeniden yürütülmesi aktarımı sürdürmek için yeterli olacaktır. Ama dikkat et! Sürümünüz kısmi aktarımları desteklemiyorsa, kısmi dosyanın üzerine yazılır.

Aşağıdaki rsync anahtarları, scp desteklemiyorsa bozuk aktarımı sürdürmek için kullanışlıdır:

     --append                append data onto shorter files
     --append-verify         like --append, but with old data in file checksum
 -e, --rsh=COMMAND           specify the remote shell to use
     --progress              show progress during transfer

Komuta

rsync --append-verify --progress --rsh="ssh -p 4567" me@localhost:/path/to/large/file.gz .

istenen etkiye sahip olmalıdır. -pAnahtarın ssh için küçük harf olması gerektiğini unutmayın .


Hedef sunucudaki ağın yapılandırılma biçimi nedeniyle şerbetçiotu gereklidir. Ssh üzerinde rsync kullanarak sorun yerel bağlantı noktası 4567 kullanmanız gerektiğidir, dosya 10.255.xx sunucusunda yok.
chris

Benim hatam. 10.255.y.yİstemci bilgisayar olduğunu varsayıyordum .
Dennis

Cevabımı güncelledim.
Dennis

ve rsync kullanmanın bir yolu yoksa ne yapmalı? Benim durumumda uzak ana bilgisayarda sadece ftp var.
dr.dimitru

1
@Enzo Soru SCP ile ilgili, cevabın scp ile ilgili olması gerekiyor. Soru, scp aracıyla değil, eksik bir scp aktarımı ile ilgilidir. Kelimenin tam anlamıyla , aktarımı sürdürmek için ss üzerinde rsync'i kullanmak için birkaç öneri gördüğümü söylüyor , ancak bunu nasıl ayarlayacağım belli değil. Mümkün mü? altta.
Dennis

3

Scp yerine sftp kullanın

Senin durumunda:

sftp -a -P 4567 me@localhost:/path/to/large/file.gz .

Sftp man sayfasından:

-a      Attempt to continue interrupted downloads rather than overwriting existing partial or complete copies of files.  If the remote file contents differ from the partial local copy then the resultant file is likely to be corrupt.

1

rsync varsayılan olarak ssh kullanır, rsync'in -e anahtarını kullanarak tam ssh komutunu belirtmeniz gerekebilir. Ayrıca, aktarımı devam ettirmek için eksik dosyayı etrafında tutması gereken bir --partial vardır.


-1

Tünellerinizin amacının ne olduğunu gerçekten göremiyorum, bu yüzden sorununuzu nasıl çözeceğim:

ssh -R $tunnelPort:localhost:$localSSHPort $remoteUser@$remoteHost -p $remoteSSHPort

bu, yerel makineden (localhost) uzak makineye (remotehost) bir ters tünel açar. $ tunnelPort, tünelin uzak ana bilgisayarda bulunacağı bağlantı noktasıdır. $ localSSHPort, yerel sshd'nin çalıştığı bağlantı noktası ve $ remoteSSHPort, uzak ana bilgisayarın sshd'sının dinlediği yerdir.

Artık (ters!) Tünelin içindeyseniz, Dennis'in önerdiğini az çok yapabilirsiniz:

rsync --apend-verify -az -e 'ssh -p $tunnelPort' /path/to/large/file $user@localhost:/destination

-a ve -z bayrakları rsync'in man sayfasında açıklanır, bu yüzden onlara ayrıntılı bir şekilde bakmayacağım. Şimdi olan şey, yukarıdaki gibi uzak ana bilgisayar üzerinde rsync'i çalıştırdığınızda, tüm verileri $ tunnelPort portuna iter;

Umut etmek bu yardım etmek.


@ingenous: Tünellere bir açıklama ekledim.
chris
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.