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 !)