Übertragen Sie Dateien zwischen zwei Remote-SSH-Servern

21

Gibt es eine einfache Möglichkeit, Dateien zwischen zwei SSH / SFTP-Servern zu übertragen? Die perfekte Lösung wäre FileZilla, mit dem Sie jedoch nur eine Verbindung zwischen lokal und remote herstellen können, nicht jedoch zwischen remote und remote.

Theoretisch könnte ich zwei Nautilus-Fenster öffnen und eine Verbindung zu einigen herstellen ssh://server1/path/to/folderund ssh://server2/path/to/folderdann einfach die Dateien von einer zur anderen Seite ziehen. Ich habe die Erfahrung gemacht, dass dies sehr instabil ist. Das Übertragen von Dateien in einer Größe von zB 10 MB ist kein Problem, aber das Übertragen von zB 10 GB führte häufig dazu, dass Nautilus sich aufhängt und dort ps -e | grep nautilus-> benötigt kill -9 <pid>. Das Gleiche habe ich auch mit Nemo und Caja getestet. Obwohl Nemo stabiler ist als die beiden anderen, ist es immer noch nicht perfekt und bricht auch von Zeit zu Zeit. FileZilla ist extrem stabil, hat es nie wirklich kaputt gemacht, ist aber aufgrund der erwähnten Tatsache, dass es nur eine Verbindung zu einem einzelnen SSH-Server herstellen kann, nicht sehr flexibel.

Natürlich könnte ich auch einen Ordner mit mounten sshfs, aber das ist eine unpraktische Lösung. Es ist zu viel Vorarbeit erforderlich, um einen einfachen Transfer auszuführen.

Gibt es eine App, die Übertragungen zwischen zwei SSH-Servern ohne Unterbrechung verarbeiten kann? Perfekt wäre so etwas wie FileZilla, das den Job wieder aufnimmt, wenn die Verbindung unterbrochen wird.

Sokrates
quelle
Keine Antwort, da dies keine Website für Softwareempfehlungen ist. Ich verwende jedoch seit Jahren die (kommerzielle) Beyond Compare-Website ( scootersoftware.com ) und sie eignet sich hervorragend für diese Art von Aufgaben. Es bietet zwei Fenster, in denen beide einen lokalen Pfad oder eine sftp: // URL anzeigen können, und die Unterschiede zwischen Ordnern werden angezeigt. Die Möglichkeit, nur die Unterschiede zu kopieren, ist ein hervorragender Wiederaufnahmemechanismus, wenn er kaputt geht, was sehr selten vorkommt durch meine Erfahrung. (Nicht mit ihnen verbunden, außer ein zufriedener Kunde zu sein).
Guntram Blohm unterstützt Monica

Antworten:

36

Wenn Sie mit einer Ubuntu-Version arbeiten, die noch unterstützt wird, stellt Ihr scpBefehl den -3Schalter bereit , der das Kopieren von Dateien von remote1 nach remote2 über localhost ermöglicht :

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

Sie können den -3Schalter auch weglassen , benötigen dann aber den öffentlichen Schlüssel ( id_rsa.pub) von user1@remote1in der Datei authorized_keysvon user2@remote2:

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

scpdann ssh user1@remote1erstmal unter die haube und ab da scp /path/to/file1 user2@remote2:/path/to/file2. Aus diesem Grund muss der Berechtigungsnachweis anders als die -3Lösung verteilt werden.

Mit anderen Worten:

  • scp -3 remote1:file1 remote2:file2überträgt die Datei von remote1 zu localhost und dann zurück zu remote2 . Die Daten werden von remote1 → localhost → remote2 übertragen . Der localhost ist daher in diesem Szenario die dritte Partei -3. Damit dies funktioniert, benötigen Sie die Anmeldeinformationen von localhost auf remote1 und remote2, da localhost eine Verbindung zu beiden herstellt.

  • scp remote1:file1 remote2:file2kopiert die Datei direkt von remote1 nach remote2 mit der Geschwindigkeit, mit der sie miteinander verbunden sind. localhost ist hier nicht beteiligt (abgesehen von der Ausgabe des Befehls). Die Daten werden remote1 → remote2 übertragen . Damit dies funktioniert, müssen Sie die Anmeldeinformationen von localhost nur auf remote1 sondern zusätzlich müssen Sie die Anmeldeinformationen von remote1 auf remote2 weil localhost Connects remote1 nur dann remote1 Connects zu remote2 .

Wenn möglich, würde ich den zweiten Ansatz wählen. Wie einige Kommentare bereits sagen: In der Regel ist das Netzwerkkabel zwischen remote1 und remote2 viel dicker als das Kabel zwischen ihnen und localhost .

PerlDuck
quelle
2
Das ist einfach wunderschön. ssh ist das Schweizer Taschenmesser für Software. Danke, ich habe etwas gelernt.
Bio-Marmor
4
Beachten Sie, dass dieser Ansatz, wie der in der Frage beschriebene Nautilus-Ansatz, die Datei zuerst auf den lokalen Computer und dann auf den zweiten Server überträgt. Dies führt zu einer erheblichen Verlangsamung, wenn die beiden Remote-Server eine schnellere Verbindung als der lokale Computer haben. (Zum Beispiel, wenn sich die Remote-Server in Rechenzentren befinden und der lokale Computer über eine DSL-Verbindung verfügt.)
Stobor
1
@Stobor Guter Punkt, danke. Ich habe meine Antwort aktualisiert, um ein wenig zu verdeutlichen, wie die Daten mit und ohne das Symbol übertragen werden -3.
PerlDuck
1
Funktioniert die zweite Methode mit der Agentenweiterleitung, ohne dass auf remote1 ein Schlüssel oder ein Kennwort vorhanden ist?
Eric Duminil
1
@EricDuminil Ich fürchte, ich kann es nicht sagen. Ich habe keine wirkliche Erfahrung mit Agent Forwarding. Aber ich bezweifle es, weil remote1 den Zugriff verweigern soll, wenn weder Schlüssel noch Passwort angegeben werden, nicht wahr?
PerlDuck
10

In den meisten Fällen können sich zwei SSH-Server gegenseitig erreichen (oder mindestens einer kann den anderen erreichen), und in den meisten Fällen ist das Internet der Arbeitsstation weitaus schlechter als bei beiden Servern.

Wenn ja, ist es der richtige Weg, einen Server auf den anderen zu übertragen.

ssh server1 nohup scp somefile server2:somefile

Überprüfen Sie nohup.outauf Server1 auf Fehler.

Wenn die Erreichbarkeit des Servers umgekehrt ist, können Sie umkehren, welcher Computer der Master ist:

ssh server2 nohup scp server1:somefile somefile
Joshua
quelle
7

Vielleicht könnten Sie eines von mehreren GUI-Frontends für rsync verwenden:

Gibt es eine GUI-Anwendung für den Befehl rsync?

Oder Sie können rsync direkt von der Befehlszeile aus verwenden, um eine Verbindung zu beiden Remoteservern herzustellen:

"So synchronisieren Sie Dateien zwischen zwei Remotes"

Ich logge mich oft mit ssh auf einem Server ein und benutze dann rsync von der Kommandozeile dieses Servers , um Dateien auf den anderen Remote-Server zu pushen oder zu ziehen .

Der rsync ist intelligent genug, um einige Arbeiten auszuführen. Wenn dann etwas schief geht und den Prozess unterbricht, kann er später dort fortgesetzt werden, wo er aufgehört hat.

David Cary
quelle
0

Sie müssen das SCP-Protokoll verwenden. scp file you want to transfer login@address_of_second_server:/path_where_you_want_to_save

Gravemind
quelle
2
OP möchte Dateien zwischen zwei Remotecomputern kopieren, nicht von einem lokalen Computer auf einen Remotecomputer. Er scheint auch nach einer GUI-Lösung zu suchen.
user68186
@ user68186 meine antwort ist gültig.
Gravemind