Trasferisci file tra due server SSH remoti


21

Esiste un modo semplice per trasferire file tra due server SSH / SFTP? La soluzione perfetta sarebbe FileZilla, ma ti consente solo di creare una connessione tra locale e remoto, ma non tra remoto e remoto.

Teoricamente ho potuto aprire due finestre di Nautilus e connettersi ad alcuni ssh://server1/path/to/foldere ssh://server2/path/to/folderpoi basta tirare i file da un verso l'altro lato. La mia esperienza è che questo è molto instabile. La trasmissione di file di dimensioni pari a 10 MB non è un problema, ma il trasferimento di 10 GB spesso ha comportato la sospensione di Nautilus e la necessità di ps -e | grep nautilus-> kill -9 <pid>. Ho anche provato la stessa cosa con Nemo e Caja. Mentre Nemo tende ad essere più stabile degli altri due, non è ancora perfetto e si rompe di volta in volta. FileZilla è estremamente stabile, non è mai riuscito a romperlo, ma non è molto flessibile a causa del fatto menzionato che può connettersi solo a un singolo server SSH.

Ovviamente potrei anche montare una cartella con sshfs, ma questa è una specie di soluzione scomoda. Troppe operazioni preliminari da eseguire per eseguire un semplice trasferimento.

Esiste un'app in grado di gestire i trasferimenti tra due server SSH senza interrompere? Perfetto sarebbe qualcosa come FileZilla, che riprende il lavoro se la connessione viene interrotta.


Non è una risposta perché questo non è un sito di raccomandazioni software, ma sto usando Beyond Compare (commerciale) ( scootersoftware.com ) per anni, ed è perfetto per questo tipo di attività. Offre due finestre, entrambe le quali possono mostrare un percorso locale o sftp: // URL, mostreranno le differenze tra le cartelle e la sua capacità di copiare solo le differenze rende un eccellente meccanismo di ripresa se si rompe, cosa che accade molto raramente nella mia esperienza. (Non associato con loro se non essere un cliente soddisfatto).
Guntram Blohm supporta Monica il

Risposte:


36

Se si utilizza una versione di Ubuntu ancora supportata, il scpcomando fornirà l' opzione-3 che consente di copiare i file da remote1 a remote2 tramite localhost :

me@local:~> scp -3 user1@remote1:/path/to/file1 user2@remote2:/path/to/file2

Puoi anche omettere l' -3opzione, ma allora avrai bisogno della chiave pubblica ( id_rsa.pub) di user1@remote1nel file authorized_keysdi user2@remote2:

me@local:~> scp user1@remote1:/path/to/file1 user2@remote2:/path/to/file2

scppoi sotto il cofano fa un ssh user1@remote1primo e da lì scp /path/to/file1 user2@remote2:/path/to/file2. Ecco perché le credenziali devono essere distribuite in modo diverso dalla -3soluzione.

In altre parole:

  • scp -3 remote1:file1 remote2:file2trasferisce il file da remote1 a localhost e quindi di nuovo a remote2 . I dati viaggiano remote1 → localhost → remote2 . Il localhost è la terza parte in questo scenario, quindi -3. Affinché ciò funzioni, sono necessarie le credenziali di localhost su remote1 e remote2 perché localhost si connette a entrambi.

  • scp remote1:file1 remote2:file2copia il file direttamente da remote1 a remote2 alla velocità con cui sono collegati tra loro. localhost non è coinvolto qui (oltre a immettere il comando). I dati viaggiano da remoto1 → remoto2 . Per far funzionare tutto questo, avrai bisogno delle credenziali di localhost solo su remote1 ma in più avrai bisogno delle credenziali di remote1 su remote2 perché localhost si connette solo a remote1 e quindi remote1 si connette a remote2 .

Se possibile, sceglierei il secondo approccio. Come alcuni commenti dicono già: di solito spesso il cavo di rete tra remote1 e REMOTE2 è di gran lunga più spesso del cavo tra loro e localhost .


2
È semplicemente bellissimo. ssh è il coltellino svizzero di software. Grazie, ho imparato qualcosa.
Marmo organico

4
Si noti che questo approccio, come l'approccio nautilus descritto nella domanda, trasferirà prima il file sul computer locale, quindi fino al secondo server. Ciò causerà un significativo rallentamento quando i due server remoti hanno un collegamento più veloce tra loro rispetto al computer locale. (Ad esempio, quando i server remoti si trovano nei datacenter e il computer locale ha una connessione DSL.)
Stobor

1
@Stobor Ottimo punto, grazie. Ho aggiornato la mia risposta per chiarire un po 'come viaggiano i dati con e senza -3.
PerlDuck,

1
Il secondo metodo funzionerebbe con l'inoltro dell'agente, senza chiave o password su remote1?
Eric Duminil,

1
@EricDuminil Temo di non poterlo dire. Non ho alcuna vera esperienza con l'inoltro dell'agente. Ma ne dubito perché remote1 dovrebbe negare l'accesso quando non viene fornita né la chiave né la password, non è vero?
PerlDuck,

10

Nella maggior parte dei casi, due server SSH possono raggiungersi (o almeno uno può raggiungere l'altro) e, nella maggior parte dei casi, Internet della workstation è molto peggio di uno dei server.

In tal caso, ordinare un server per il trasferimento all'altro è la strada da percorrere.

ssh server1 nohup scp somefile server2:somefile

Verificare la presenza nohup.outdi errori sul server1.

Se la raggiungibilità del server è il contrario, puoi invertire quale macchina è il master:

ssh server2 nohup scp server1:somefile somefile

7

Forse potresti usare uno dei numerosi front-end della GUI per rsync:

Esiste un'applicazione GUI per il comando rsync?

O forse potresti usare rsync direttamente dalla riga di comando per connetterti ad entrambi i server remoti:

"Come risincronizzare i file tra due telecomandi"

Accedo spesso a un server con ssh, quindi dalla riga di comando di quel server uso rsync per eseguire il push o il pull dei file sull'altro server remoto , che è generalmente molto più veloce rispetto al tentativo di trasferire i file attraverso un terzo computer.

Rsync è abbastanza intelligente da fare un po 'di lavoro, quindi se qualcosa va storto e interrompe il processo, può successivamente riprendere da dove era stato interrotto.


0

È necessario utilizzare il protocollo SCP. scp file you want to transfer login@address_of_second_server:/path_where_you_want_to_save


2
OP desidera copiare i file tra due computer remoti, non da computer locale a computer remoto. Sembra anche che stia cercando una soluzione GUI.
user68186

@ user68186 la mia risposta è valida.
Gravemind
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.