Hôtes de saut : SSH multi-sauts

Créez un laboratoire de trois VM et connectez-vous à une cible via deux hôtes de saut SSH depuis votre Mac.

Avant de commencer

Utilisez un environnement de test privé. Remplacez les exemples d'adresses IP par les adresses réelles des machines virtuelles. Vérifiez chaque clé d'hôte SSH via Multipass avant de lui faire confiance. ProxyJump authentifie chaque saut depuis votre Mac ; il ne nécessite pas de clé privée sur un hôte de saut. Les hôtes de saut doivent autoriser le transfert TCP et chaque saut doit pouvoir atteindre le suivant. Gardez une session de récupération disponible avant de modifier les règles de pare-feu.

Exemples

Installez Multipass, créez trois machines virtuelles Ubuntu et enregistrez leurs adresses IP réelles.

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

Créez une clé dédiée sur Mac. Choisissez une phrase secrète et n’écrasez pas une clé existante.

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

Copiez uniquement la clé publique sur chaque VM. Ces commandes créent le fichier temporaire securepipes-lab.pub dans chaque répertoire personnel Ubuntu ; vérifiez qu'il n'existe pas déjà avant de les exécuter.

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

Comparez l'empreinte digitale de votre clé publique avec les clés installées. Le fichier authorised_keys peut également contenir d'autres clés.

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

Obtenez l'empreinte digitale de chaque clé hôte du serveur via Multipass. Comparez-le avec l'empreinte digitale affichée par SSH avant d'accepter une nouvelle clé d'hôte.

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

Ajoutez ces entrées à ~/.ssh/config sur votre Mac en utilisant les adresses IP réelles de votre VM. Conserver les entrées existantes ; placez-les avant toutes les valeurs par défaut de l'hôte * correspondantes. Ajustez IdentityFile si vous avez choisi un autre chemin de clé.

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

Testez d’abord l’accès direct, puis connectez-vous via les deux hôtes de saut. Acceptez une clé d'hôte uniquement après avoir vérifié son empreinte digitale. Dans Secure Pipes, configurez les deux mêmes hôtes de saut pour la connexion cible.

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

Test de laboratoire contrôlé facultatif : uniquement si la cible peut distinguer l'adresse IP source Mac de jump2 et qu'une politique UFW existante autorise SSH, autorisez jump2 avant de refuser l'adresse IP source Mac réelle. Remplacez les deux espaces réservés. N'activez pas et ne modifiez pas un pare-feu de production basé sur cet exemple ; conserver l'accès à la console et supprimer les règles après les tests.

# 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

Après les règles de pare-feu facultatives, SSH direct devrait échouer tandis que ProxyJump réussit. Supprimez les deux règles en utilisant les mêmes adresses IP réelles, puis vérifiez à nouveau l'accès.

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

Références officielles

Vérifié le 27 octobre 2026