GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Kopieren Sie Daten über mehrere Hops durch den SSH-Tunnel

Lösung 1:

Der bei weitem einfachste Weg ist, es einfach über scp zu kopieren. Außerdem funktioniert diese Syntax tatsächlich anders als einige der anderen Vorschläge.

Sie können diese Syntax einfach nicht schlagen. Es ermöglicht Ihnen, rekursiv zu kopieren, zu synchronisieren oder was auch immer Sie möchten, ohne sich mit potenziell komplexen Pipes befassen zu müssen. Diese Syntax ist intuitiv klar, wird von Sys-Admins, die Ihnen folgen, leichter unterstützt und macht keinen nutzlosen Gebrauch von cat.

scp -3 devappserver:/path/to/copy/from qaappserver:/path/to/copy/to

Von der scp-Manpage:-3 Kopien zwischen zwei entfernten Hosts werden über den lokalen Host übertragen. Ohne diese Option werden die Daten direkt zwischen den beiden Remote-Hosts kopiert. Beachten Sie, dass diese Option die Fortschrittsanzeige deaktiviert.

Im Beispiel unten

  • Ihre Workstation heißt MacBook-Pro.
  • Dev Jump Box heißt devjumpserver
  • Dev Application Server heißt devapplicationserver
    • Ist in einer LAN-DNS-Zone mit dem Namen .local
  • QA Jump Box heißt qajumpserver
  • QA Application Server heißt qaapplicationserver
    • Ist in der LAN-DNZ-Zone mit dem Namen .local
  • Wir führen eine Testkopie einer 670 GB großen /etc/hosts-Datei durch;-)
  • Es wird davon ausgegangen, dass Sie die SSH-Public-Key-Authentifizierung konfiguriert haben.



Hier ist eine ~/.ssh/config-Datei, die den direkten Zugriff von Ihrer Workstation auf die Anwendungsserver über den entsprechenden Sprung (auch bekannt als Bastion-Server) einrichtet.

MacBook-Pro:~ barrychapman$ cat ~/.ssh/config
Host *
  ServerAliveInterval 60
Host devapplicationsever
  HostName devapplicationserver.local
  ProxyCommand ssh -i ~/.ssh/id_rsa [email protected] -W %h:%p
  User barrychapman
Host qaapplicationserver
  HostName qaapplicationserver.local
  ProxyCommand ssh -i ~/.ssh/id_rsa [email protected] -W %h:%p
  User barrychapman

MacBook-Pro:~ barrychapman$



Test auf Vorhandensein der Datei auf dem Zielserver, sie wird nicht dort sein.

MacBook-Pro:~ barrychapman$ ssh qaapplicationserver ls /tmp/hosts
ls: cannot access /tmp/hosts: No such file or directory
Killed by signal 1.
MacBook-Pro:~ barrychapman$



Kopieren wir nun eine Datei vom Dev-Anwendungsserver über Ihre Workstation in die QA-Anwendung.

MacBook-Pro:~ barrychapman$ scp -3 devapplicationserver:/etc/hosts qaapplicationserver:/tmp/
Killed by signal 1.
Killed by signal 1.
MacBook-Pro:~ barrychapman$



Überprüfen wir nun, ob die kopierte Datei auf dem QA Application Server vorhanden ist. Diesmal wird es dabei sein.

MacBook-Pro:~ barrychapman$ ssh qaapplicationserver ls /tmp/hosts
/tmp/hosts
Killed by signal 1.
MacBook-Pro:~ barrychapman$ 

Hinweis

Beim Schließen einer ProxyCommand-Verbindung sehen Sie die Warnmeldung „Killed by Signal 1“. Dies ist SSH, das die ProxyCommand-Verbindung abbaut, und ist nichts, worüber man sich Sorgen machen müsste. Sie können es loswerden, indem Sie LogLevel Quiet hinzufügen zu Ihrer Bastion-Host-Konfigurationszeile.

Lösung 2:

ROHRE!

Wenn das Internet eine Reihe von Röhren ist, dann ist Unix eine Reihe von Röhren – so etwas wie:

cat ginormous-file | ssh [email protected] "cat | ssh [email protected] \"cat >out\" "

sollte funktionieren.

Wenn Sie mehr Hosts durchlaufen müssen, fügen Sie weitere Pipes hinzu (und mehr verschachtelte Schichten von \ -escaped Zitat) nach Bedarf. (Beachten Sie jedoch, dass es wahrscheinlich an der Zeit ist, sich geschlagen zu geben und ein richtiges VPN einzurichten, wenn die Pipeline/das Entkommen so komplex wird, dass Sie ein Diagramm zeichnen oder an Ihren Fingern zählen müssen, um zu bestimmen, wie oft Sie die Escapes verdoppeln müssen !)


Linux
  1. Mehrere Befehle in Sshpass?

  2. Ausführen einer Skriptdatei über SSH durch Sudo?

  3. Ssh – SCP über mehrere Hosts?

  4. Wie kann ich meinen gesamten Netzwerkverkehr über SSH tunneln?

  5. Wie kann ich mehrere Dateien über scp in einem Befehl kopieren?

Setzen Sie teilweise übertragene Dateien über SSH mit Rsync fort

So verwenden Sie den Befehl rsync, um Daten lokal und über SSH zu kopieren

So kopieren Sie Dateien aus der Ferne über SSH, ohne ein Passwort einzugeben

Tail-Log-Datei auf mehreren Rechnern über ssh

Wie tunnelt man Windows Remote Desktop über ssh mit einer Linux-Box?

SSH durch SSH-Tunnel weiterleiten