Host salto: SSH multi-hop
Costruisci un lab da tre VM e connettiti a una destinazione tramite due host jump SSH dal tuo Mac.
Prima di eseguire
Utilizza un ambiente di test privato. Sostituisci gli indirizzi IP di esempio con gli indirizzi VM effettivi. Verifica ciascuna chiave host SSH tramite Multipass prima di considerarla attendibile. ProxyJump autentica ogni salto dal tuo Mac; non richiede una chiave privata su un host di salto. Gli host di salto devono consentire l'inoltro TCP e ogni hop deve essere in grado di raggiungere quello successivo. Mantenere disponibile una sessione di ripristino prima di modificare le regole del firewall.
Esempi
Installa Multipass, crea tre VM Ubuntu e registra i loro indirizzi IP effettivi.
brew install --cask multipass
multipass launch --name jump1
multipass launch --name jump2
multipass launch --name target
multipass listCrea una chiave dedicata sul Mac. Scegli una passphrase e non sovrascrivere una chiave esistente.
ssh-keygen -t ed25519 -f ~/.ssh/securepipes_lab_ed25519Copia solo la chiave pubblica su ciascuna VM. Questi comandi creano il file temporaneo securepipes-lab.pub in ciascuna directory home di Ubuntu; verificare che non esista già prima di eseguirli.
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
doneConfronta l'impronta digitale della tua chiave pubblica con le chiavi installate. Il file Authorized_keys può contenere anche altre chiavi.
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_keysOttieni l'impronta digitale della chiave host di ciascun server tramite Multipass. Confrontala con l'impronta digitale mostrata da SSH prima di accettare una nuova chiave host.
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.pubAggiungi queste voci a ~/.ssh/config sul tuo Mac utilizzando gli IP effettivi della VM. Conservare le voci esistenti; posizionali prima di qualsiasi valore predefinito Host * corrispondente. Modifica IdentityFile se hai scelto un altro percorso chiave.
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 yesTestare prima l'accesso diretto, quindi connettersi tramite entrambi gli host jump. Accettare una chiave host solo dopo aver verificato la sua impronta digitale. In Secure Pipes configurare gli stessi due host jump in ordine per la connessione di destinazione.
ssh jump1
ssh jump2
ssh target
ssh -J jump1,jump2 targetTest facoltativo di laboratorio controllato: solo se la destinazione è in grado di distinguere l'IP di origine del Mac da jump2 e una policy UFW esistente consente SSH, consentire jump2 prima di negare l'IP di origine del Mac effettivo. Sostituisci entrambi i segnaposto. Non abilitare o modificare un firewall di produzione in base a questo esempio; mantenere l'accesso alla console e rimuovere le regole dopo il test.
# 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 tcpDopo le regole firewall opzionali, SSH diretto dovrebbe fallire mentre ProxyJump ha esito positivo. Rimuovi le due regole utilizzando gli stessi indirizzi IP effettivi, quindi verifica nuovamente l'accesso.
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 tcpRiferimenti ufficiali
Verificato il 27 ottobre 2026