Holen Sie sich Dateien vom Server zwei Schritte entfernt [geschlossen]

14

Wir haben folgende Situation:

  1. Meine Maschine
  2. Eine Gateway-Maschine
  3. Die Zielmaschine

Ich habe keine Root-Rechte auf # 2 und # 3. Ich kann auch nicht wirklich Informationen (nicht mehr als 200 MiB) auf Maschine 2 speichern (da es sich um ein Gateway in den Rest des Netzwerks handeln soll, nicht mehr als das). Auf Computer Nr. 3 befindet sich ein Ordner mit einer Größe von ca. 3 GB, den ich auf local kopieren möchte. Ich kann nicht von 1 bis 3 SSH, aber ich kann zu 2 und dann zu 3 SSH. Es ist auch nicht möglich, ein öffentlich-privates Schlüsselpaar zwischen Nr. 2 und Nr. 3 einzurichten, es ist jedoch ein Schlüsselpaar zwischen Nr. 1 und Nr. 2 installiert.

Normalerweise verwende ich die Kombination aus SSH und Teer, um dies zu erreichen:

ssh name@host "tar cf - folder" > folder.tar

Aber in diesem Fall würde das eine Art Verschachtelung erfordern, und ich kann das scheinbar nicht hinbekommen.

Was wäre also ein guter Weg, um die Daten von # 3 auf # 1 zu bringen?

Cheiron
quelle

Antworten:

27

Sie können einen SSH-Tunnel über machine2 erstellen und dann in einer anderen Sitzung eine Verbindung zum Tunnel herstellen.

Öffnen Sie beispielsweise zwei CLI-Sitzungen auf Computer1. Führen Sie in der ersten Sitzung Folgendes aus:

MACHINE1$ ssh -L 2022:MACHINE3:22 <user>@MACHINE2

In der zweiten Sitzung führen Sie Folgendes aus:

MACHINE1 $ ssh -p 2022 <user>@localhost

Was mit dem ersten Befehl passiert, ist, dass ein lokaler Port (2022 auf Maschine1) über Ihre SSH-Verbindung zu Maschine2 zu Port 22 auf Maschine3 getunnelt wird.

Mit dem zweiten Befehl verbinden Sie sich mit dem neu geöffneten lokalen Port (2022) und es ist, als würden Sie sich direkt mit machine3 verbinden.

Wenn Sie jetzt Ihren typischen Dateiübertragungsprozess verwenden möchten, können Sie Folgendes tun:

ssh -p 2022 <user>@localhost "tar cf - /path/to/remote/directory/" > filename.tar

Alternativ können Sie sich mit rsync vertraut machen und stattdessen Folgendes tun:

rsync -aHSv --progress -e 'ssh -p 2022' <user>@localhost:/path/to/remote/directory/ /path/to/local/directory/

Vorausgesetzt, das Endziel ist nicht, einen Tarball zu bekommen.

Gen
quelle
2
Mit ProxyCommandund können ssh -Wdie beiden sshBefehle in einer einzigen Befehlszeile zusammengefasst werden. Wenn Sie eine neuere Version des OpenSSH-Clients haben, gibt es ein Argument, mit dem Sie alles mit einem einzigen sshBefehl ausführen können.
Kasperd
+1 für rsync;)
NieDzejkob
Ich verwende tar, weil das Übertragen vieler Dateien mehr Zeit in Anspruch nimmt als das Übertragen einer großen Datei. Löst rsync das?
Cheiron
Bei Remote-Übertragungen summiert rsync die übertragenen Daten (auf der empfangenden Seite, bevor sie auf die Festplatte geschrieben werden), sodass die Übertragung einer Datei länger dauert. Das ist jedoch gut investierte Zeit.
Gene
5

Sie können die Master-Sitzungsfunktion auch für neuere Versionen von SSH verwenden. Es ist hier beschrieben:

https://en.wikibooks.org/wiki/OpenSSH/Cookbook/Multiplexing

Wahrscheinlich müssen Sie nur Ihre .ssh / config bearbeiten / erstellen. Fügen Sie dort Definitionen hinzu, die die Master-Sitzungen steuern:

ControlMaster auto
ControlPath ~/.ssh/cm_socket/%r@%h:%p
ControlPersist 4h
ServerAliveInterval 30

Dann können Sie Ihre erste Hop-Server-Definition wie folgt festlegen:

Host first_hop
Hostname <your first host FQDN or IP>
User <your user>

Und der zweite Hop verwendet Ihren ersten Hop-Server als Proxy:

Host second_hop
Hostname <your second host FQDN or IP>
User <your user>
ProxyCommand ssh -W %h:%p first_hop

Vergessen Sie nicht, das Verzeichnis ~ / .ssh / cm_socket zu erstellen, und die Konfigurationsberechtigungen sollten 644 sein.

Dann sollten Sie in der Lage sein, SSH oder SCP direkt von / zu Ihrem zweiten Server zu senden. Es können mehr Server wie folgt verkettet sein.

Jaroslav Kucera
quelle
3
ControlMasterNach dem Lesen Ihres Links glaube ich nicht, dass Multiplexing / für das Proxying erforderlich ist. Die relevantere Seite in diesem Wikibook ist diese: de.wikibooks.org/wiki/OpenSSH/Cookbook/Proxies_and_Jump_Hosts
IMSoP
Ja, ich stimme zu. Es gibt mehrere Möglichkeiten. Ich halte die Master-Sitzung jedoch für die eleganteste. Es geht nur um persönliche Vorlieben ;-)
Jaroslav Kucera
Der eine oder andere von uns hatte etwas falsch verstanden. Soweit ich sehen kann, geht es bei der "Master-Verbindung" darum, Netzwerkressourcen effizient zu nutzen, und sie hat nichts mit der Frage zu tun. Es ist keine andere Art, es ist nur irrelevant für die anstehende Aufgabe.
IMSoP