Jump-Hosts: Multi-Hop-SSH

Erstellen Sie ein Labor mit drei VMs und stellen Sie über zwei SSH-Jump-Hosts von Ihrem Mac aus eine Verbindung zu einem Ziel her.

Vor der Ausführung

Nutzen Sie eine private Testumgebung. Ersetzen Sie Beispiel-IP-Adressen durch die tatsächlichen VM-Adressen. Überprüfen Sie jeden SSH-Hostschlüssel über Multipass, bevor Sie ihm vertrauen. ProxyJump authentifiziert jeden Hop von Ihrem Mac; Es ist kein privater Schlüssel auf einem Jump-Host erforderlich. Die Jump-Hosts müssen TCP-Weiterleitung zulassen und jeder Hop muss den nächsten erreichen können. Halten Sie eine Wiederherstellungssitzung bereit, bevor Sie die Firewall-Regeln ändern.

Beispiele

Installieren Sie Multipass, erstellen Sie drei Ubuntu-VMs und notieren Sie deren tatsächliche IP-Adressen.

brew install --cask multipass
multipass launch --name jump1
multipass launch --name jump2
multipass launch --name target
multipass list

Erstellen Sie einen dedizierten Schlüssel auf dem Mac. Wählen Sie eine Passphrase und überschreiben Sie keinen vorhandenen Schlüssel.

ssh-keygen -t ed25519 -f ~/.ssh/securepipes_lab_ed25519

Kopieren Sie nur den öffentlichen Schlüssel auf jede VM. Diese Befehle erstellen die temporäre Datei securepipes-lab.pub in jedem Ubuntu-Home-Verzeichnis; Stellen Sie sicher, dass es noch nicht vorhanden ist, bevor Sie es ausführen.

for vm in jump1 jump2 target; do
  multipass exec "$vm" -- test ! -e /home/ubuntu/securepipes-lab.pub || break
  multipass transfer ~/.ssh/securepipes_lab_ed25519.pub "${vm}:/home/ubuntu/securepipes-lab.pub" || break
  multipass exec "$vm" -- sh -c 'umask 077; mkdir -p "$HOME/.ssh"; chmod 700 "$HOME/.ssh"; cat "$HOME/securepipes-lab.pub" >> "$HOME/.ssh/authorized_keys" && chmod 600 "$HOME/.ssh/authorized_keys" && rm "$HOME/securepipes-lab.pub"' || break
done

Vergleichen Sie den Fingerabdruck Ihres öffentlichen Schlüssels mit den installierten Schlüsseln. Die Datei „authorized_keys“ kann auch andere Schlüssel enthalten.

ssh-keygen -lf ~/.ssh/securepipes_lab_ed25519.pub
multipass exec jump1 -- ssh-keygen -lf /home/ubuntu/.ssh/authorized_keys
multipass exec jump2 -- ssh-keygen -lf /home/ubuntu/.ssh/authorized_keys
multipass exec target -- ssh-keygen -lf /home/ubuntu/.ssh/authorized_keys

Erhalten Sie den Fingerabdruck jedes Server-Hostschlüssels über Multipass. Vergleichen Sie ihn mit dem von SSH angezeigten Fingerabdruck, bevor Sie einen neuen Hostschlüssel akzeptieren.

multipass exec jump1 -- sudo ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
multipass exec jump2 -- sudo ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
multipass exec target -- sudo ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub

Fügen Sie diese Einträge zu ~/.ssh/config auf Ihrem Mac hinzu und verwenden Sie dabei Ihre tatsächlichen VM-IPs. Bestehende Einträge beibehalten; Platzieren Sie diese vor allen passenden Host *-Standardwerten. Passen Sie IdentityFile an, wenn Sie einen anderen Schlüsselpfad gewählt haben.

Host jump1
  HostName 192.168.252.2
  User ubuntu
  IdentityFile ~/.ssh/securepipes_lab_ed25519
  IdentitiesOnly yes

Host jump2
  HostName 192.168.252.3
  User ubuntu
  IdentityFile ~/.ssh/securepipes_lab_ed25519
  IdentitiesOnly yes

Host target
  HostName 192.168.252.4
  User ubuntu
  IdentityFile ~/.ssh/securepipes_lab_ed25519
  IdentitiesOnly yes

Testen Sie zunächst den direkten Zugriff und stellen Sie dann eine Verbindung über beide Jump-Hosts her. Akzeptieren Sie einen Hostschlüssel erst, nachdem sein Fingerabdruck überprüft wurde. Konfigurieren Sie in Secure Pipes dieselben zwei Jump-Hosts für die Zielverbindung.

ssh jump1
ssh jump2
ssh target
ssh -J jump1,jump2 target

Optionaler kontrollierter Labortest: Nur wenn das Ziel die Mac-Quell-IP von Jump2 unterscheiden kann und eine vorhandene UFW-Richtlinie SSH zulässt, lassen Sie Jump2 zu, bevor Sie die tatsächliche Mac-Quell-IP verweigern. Ersetzen Sie beide Platzhalter. Aktivieren oder ändern Sie keine Produktions-Firewall basierend auf diesem Beispiel. Behalten Sie den Konsolenzugriff bei und entfernen Sie die Regeln nach dem Testen.

# On the target VM, replace the placeholders first:
sudo ufw status numbered
sudo ufw insert 1 allow from <JUMP2_IP> to any port 22 proto tcp
sudo ufw insert 2 deny from <MAC_SOURCE_IP> to any port 22 proto tcp

Nach den optionalen Firewallregeln sollte direktes SSH fehlschlagen, während ProxyJump erfolgreich ist. Entfernen Sie die beiden Regeln, die dieselben tatsächlichen IP-Adressen verwenden, und überprüfen Sie dann den Zugriff erneut.

ssh target
ssh -J jump1,jump2 target
# On target, remove the lab rules:
sudo ufw delete deny from <MAC_SOURCE_IP> to any port 22 proto tcp
sudo ufw delete allow from <JUMP2_IP> to any port 22 proto tcp

Maßgebliche Quellen

Geprüft am 27. Oktober 2026