SCP über Jump-Host/Bastionshost

Mit scp  Dateien von einem Server auf den anderen zu kopieren ist einfach. Dazu benötigt man je nach Serverkonfiguration z.B. ein private-public-keypair, über das die Authentifizierung am entfernten Server durchgeführt werden kann.

Wenn aber nun der entfernte Server nur über einen Bastionshost erreichbar ist, so muss über einen Tunnel kopiert werden. Dazu bedarf es einiger Vorbereitungen. Diese lohnen sich immer dann, wenn der Vorgang oft wiederholt werden muss und große Datenmengen anfallen. Eine Kopie über den eigenen Rechner bedeutet in dem Fall, dass die Daten zweimal über das Internet bewegt werden müssen, und das kostet je nach Verbindung sehr viel Zeit und blockiert die eigene Bandbreite. Außerdem sind Server untereinander häufig mit weitaus höherer Bandbreite verbunden, so dass man schon mal Geschwindigkeiten von 40-50 MB/s (!) erreichen kann.

Zunächst einmal die Begrifflichkeiten, damit es nicht zu Missverständnissen kommt:

  • Server_Lokal ist der Server von dem aus eine Datei kopiert werden soll
  • Server_Entfernt ist der Empfänger der Datei, nur erreichbar über einen Bastions-Server
  • Server_Bastion ist der Server von dem aus Server_Entfernt erreichbar ist

Nun zu den Vorbereitungen:

Auf Server_Lokal wird ein private-public-keypair erzeugt:

Achtung bei der Verwendung von -no-pass ; damit wird der private-key ohne Passwort erzeugt und ist somit nicht sicher! Dies verwende ich hier nur der Einfachheit halber. Schützt eure private-keys immer mit einem sicheren Passwort!

Der Befehl erzeugt in ~/.ssh/ zwei Dateien key_server_local (private key) und key_server_local.pub (public key).

Der Dateiinhalt von key_server_local.pub muss nun exakt kopiert werden, und zwar in die Datei ~/.ssh/authorized_keys auf den Servern Server_Bastion und Server_Entfernt. Sollte diese Datei dort noch nicht existieren, dann einfach anlegen per touch authorized_keys .

Als nächstes muss die private-key-Datei key_server_local in das Verzeichnis ~/.ssh auf Server_Bastion kopiert werden. Dies dient zum Aufbau des Tunnels.
Achtet darauf, dass diese Datei nur vom Besitzer geschrieben und gelesen werden kann, ansonsten steigt das Kopieren via Tunnel mit (access denied) ohne weitere Hinweise aus. Passt ggf. die Dateirechte an:

Nun sind wir fertig mit den Vorbereitungen und können kopieren.

Wir öffnen eine putty-Shell und verbinden uns mit Server_Lokal. Hier erzeugen wir nun den Tunnel über den Port 1234:

Der Befehl öffnet eine Verbindung zu Server_Entfernt über Server_Bastion und tunnelt diese über den Port 1234. Dieser wird nun in einer zweiten Shell verwendet, um die Datei zu kopieren. Bei Bedarf kann natürlich auch ein anderer Port genutzt werden. Der Befehl muss bis zum Ende des Kopiervorgangs ausgeführt werden, danach kann er mit <Ctrl + c> abgebrochen werden. Dadurch wird auch der Tunnel zerstört.

Nun wird eine zweite Shell zu Server_Lokal geöffnet. Jetzt erfolgt (endlich) der eigentliche Kopiervorgang:

Der Befehl kopiert die Datei testdatei.txt im aktuellen Verzeichnis über den Port 1234 zum Server_Entfernt (127.0.0.1, da der Tunnel auf localhost erzeugt wurde). Dazu muss die Datei testdatei.txt natürlich existieren.

Sollte alles korrekt konfiguriert sein, so sollte sich nach dem Ausführen des letzten Befehls eine Datei testdatei.txt auf Server_Entfernt in ~/ befinden.

 

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.