rsync mit jumphost nutzen
Was ist das und wozu benötigt man dies?
Ein Jumphost, oder auch ProxyJump genannt, bedeutet das man sich zuerst zu Server A Verbindet und von Server A erst zu Server B. Man kann sich dies auch als Kette vorstellen. Hier einmal eine schlechte Visualisierung dazu:
[Unser Rechner]---(ssh verbindung)----[Server A ( JumpHost) ]----(ssh verbindung)----[Sever B / Zielserver der Verbindung]
Man kann so eine Kette nutzen um zum Beispiel seine Verbindung besser zu sichern oder seine Herkunft zu verschleiern ( dies ist in diesem Aufbau jedoch nicht sicher ^^ und nicht anonym ) Hauptsächlich kann man dieses Konstrukt nutzen um sich mit einem Privaten Netzwerk zu Verbinden welches nur vom JumpHost aus zu erreichen ist.
Beispiel, man hat ein Firmennetzwerk und möchte sich auf Server B im Firmennetzwerk Verbinden dieser ist jedoch nicht über das Internet erreichbar. Server A ist jedoch über das Internet zu erreichen.
So wirds gemacht
Dazu können wir einfach die Options -e nutzen um die standard remote shell zu spezfizieren und dabei können wir auch weitere Optionen für die, in diesem Fall ssh Verbindung mitteilen.
-e, --rsh=COMMAND specify the remote shell to use
Nun kann man in der ssh Verbindung welche rsync nutzen soll einfach die -J Option Nutzen ( JumpHost/ ProxyJump ) um zuerst sich zum Ziel direkt nach -J angegeben zu verbinden und erst von dort aus zum endgültigen Ziel. Mehrere JumpHosts können Kommagetrennt angegeben werden. Im Beispiel nutzen wir einen JumpHost um uns von dort aus zum Ziel in einem Privaten Netzwerk zu verbinden.
Unser Aufbau des rsync Befehls mit -e und ssh mit -J
rsync -[rsyncOptions] -e "ssh -J [email protected]" thingToCopy [email protected]:/my/destination/path
Das ganze könnte man noch abändern indem man in der ssh Verbindung zur Option -J noch -A hinzufügt. Damit würde man sich es sparen unsere pub keys auf allen destination hosts zu verteilen. Alternativ dazu kann man sich auch per PW authentifizieren.
Alternativer aufruf
rsync -[rsyncOptions] -e "ssh -A -J [email protected]" thingToCopy [email protected]:/my/destination/path
Kopieren der lokalen ssh-id auf allen Destinations:
Auch dazu können wir einen ProxyJump nutzen.
ssh-copy-id -o [email protected] [email protected]