Wir haben zwei Hauptumgebungen in Frage:
Entwicklung und Qualitätssicherung
Jede Umgebung verfügt über zwei Server:
- Sprungbox
- Anwendungsserver
Um eine Verbindung zum Anwendungsserver herzustellen, müssen Sie zuerst eine Verbindung zur Jump-Box und dann eine SSH-Verbindung zum Anwendungsserver herstellen.
Es gibt ein paar Regeln, die von der Firewall unterstützt werden:
- Sie MÜSSEN über die Jump-Box eine Verbindung zum Anwendungsserver herstellen
- Der Anwendungsserver kann keine Verbindung zu einer der Jump-Boxen herstellen
- Die Jump-Boxen befinden sich im selben Subnetz und können miteinander kommunizieren.
Unser Problem
Wir haben eine Menge Inhalt (670 GB) auf der DEVELOPMENT APPLICATION SERVER
, und wir müssen dies auf die bekommen QA APPLICATION SERVER
.
Das Kopieren dieser Daten in die Jump-Boxen ist keine Option, da ihnen der erforderliche Speicherplatz fehlt.
Ich habe einige Nachforschungen angestellt und festgestellt, dass wir möglicherweise eine Reihe von Tunneln über diese Server durchführen können, damit wir die Daten über die Tunnel direkt von einem App-Server auf den anderen übertragen können. Das Problem ist jedoch, dass wir vom Anwendungsserver keine Verbindung zur Jump-Box herstellen können.
Haben wir irgendwelche Optionen? Dies wird eine verzweifelte Situation, und Zeit ist von entscheidender Bedeutung. Wir haben keine Zeit, die Daten herunterzuladen und erneut hochzuladen. Das Kopieren über das Netzwerk auf den Servern geht schnell, da es sich um eine Gigabit-Verbindung handelt.
quelle
Antworten:
Der einfachste Weg ist es, es einfach über scp zu kopieren. Außerdem funktioniert diese Syntax im Gegensatz zu einigen anderen Vorschlägen.
Sie können diese Syntax zur Vereinfachung nicht übertreffen. Sie können rekursiv kopieren, rsyncen oder was immer Sie möchten, ohne die Mühe zu haben, potenziell komplexe Pipes in Betracht zu ziehen. Diese Syntax ist intuitiv klar, wird von den Sys-Admins, die Ihnen folgen, leichter unterstützt und macht keinen nutzlosen Gebrauch von cat .
Von der scp-Manpage :
-3
Kopien zwischen zwei Remote-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 folgenden Beispiel
Hier ist eine ~ / .ssh / config-Datei, die den direkten Zugriff von Ihrer Workstation auf die Anwendungsserver über den entsprechenden Sprung (auch als Bastionserver bezeichnet) einrichtet.
Beim Testen auf das Vorhandensein einer Datei auf dem Zielserver wird diese nicht angezeigt.
Jetzt kopieren wir eine Datei vom Dev Application Server über Ihre Workstation in die QA Application.
Überprüfen wir nun, ob die kopierte Datei auf dem QA Application Server vorhanden ist. Diesmal wird es da sein.
Hinweis
Wenn Sie eine ProxyCommand-Verbindung beenden, wird die Warnmeldung "Abgebrochen durch Signal 1" angezeigt. Dies bedeutet, dass SSH die ProxyCommand-Verbindung abbricht und kein Grund zur Beunruhigung besteht. Sie können es entfernen, indem Sie es
LogLevel Quiet
zu Ihrer Zeilengruppe "bastion host config" hinzufügen .quelle
PIPES!
Wenn das Internet eine Reihe von Rohren ist , ist Unix eine Reihe von Rohren - so etwas wie:
sollte arbeiten.
Wenn Sie mehr Hosts überqueren müssen, fügen Sie nach Bedarf mehr Pipes (und mehr geschachtelte Ebenen mit
\
Anführungszeichen) hinzu. (Beachten Sie jedoch, dass es wahrscheinlich an der Zeit ist, eine Niederlage zuzugeben und ein richtiges VPN einzurichten , wenn die Pipeline / Flucht so komplex wird, dass Sie ein Diagramm zeichnen oder auf Ihre Finger zählen müssen , um zu bestimmen, wie oft Sie Fluchten verdoppeln müssen !)quelle
tar
around weiterleiten . (Auch in Sie nicht brauchen , diecat
in den Zwischenstufen der Pipeline -ssh
glücklich ist stdin zu essen und es Relais Das.cat
Macht mich besser zu fühlen und ist ein Platzhalter für andere nützliche Befehle , die Sie verwenden möchten , könnten, wietee
.)VPN! NOW!
...user@host1
) irgendwann über den vollencat ginormous-file
Speicherplatz verfügt? Oder werden die Daten einfach direkt an gesendetuser@host2
? Oder wird es irgendwie gestreamt? Wie ist dastar
relevant? Ich denke, es ist relevant für die vorletzte Frage, die ich gestellt habe. Keine dieser Fragen ist übrigens rhetorisch ...Wenn ich das richtig verstehe, haben Sie zwei Jump-Server (jump-qa und jump-dev), die zwei App-Server (app-qa und app-dev) schützen. Die Jump-Server können sich gegenseitig austauschen. Keine andere Box als der entsprechende Jump-Server kann zum entsprechenden App-Server sshen. Die App-Server können zu niemandem ssh. Eine Datei soll von app-dev nach app-qa übertragen werden. Auf beiden Jump-Servern fehlt der Platz für eine Zwischenkopie der Daten.
Sie können dies mit SSH-Tunneling lösen. Wir stellen eine Verbindung zu einem Remote-App-Server her und führen einen Remote-Tunnel, der eine Verbindung zu einem nicht verwendeten Port auf dem Jump-Server herstellt. Wir richten eine zweite Verbindung von einem Jump-Server zum anderen Jump-Server ein und führen einen Tunnel, der das baumelnde Ende des remote weitergeleiteten Ports von Tunnel eins aufnimmt und an den SSH-Port des anderen App-Servers weiterleitet.
Richten Sie die Tunnel ein (jeder dieser Befehle muss in einem separaten Fenster ausgeführt werden
jump-qa
):Sie sollten jetzt feststellen, dass Sie auf app-qa
telnet localhost 2345
das ssh-Banner von app-dev ausführen und abrufen können. Anschließend können Sie die Datendatei kopieren:quelle