Hosts de salto: SSH multi-hop
Crie um laboratório de três VMs e conecte-se a um destino por meio de dois hosts de salto SSH no seu Mac.
Antes de executar
Use um ambiente de teste privado. Substitua os endereços IP de exemplo pelos endereços reais da VM. Verifique cada chave de host SSH por meio do Multipass antes de confiar nela. O ProxyJump autentica cada salto do seu Mac; não requer uma chave privada em um host de salto. Os hosts de salto devem permitir o encaminhamento de TCP e cada salto deve ser capaz de alcançar o próximo. Mantenha uma sessão de recuperação disponível antes de alterar as regras do firewall.
Exemplos
Instale o Multipass, crie três VMs Ubuntu e registre seus endereços IP reais.
brew install --cask multipass
multipass launch --name jump1
multipass launch --name jump2
multipass launch --name target
multipass listCrie uma chave dedicada no Mac. Escolha uma senha e não substitua uma chave existente.
ssh-keygen -t ed25519 -f ~/.ssh/securepipes_lab_ed25519Copie apenas a chave pública para cada VM. Esses comandos criam o arquivo temporário securepipes-lab.pub em cada diretório inicial do Ubuntu; verifique se ele ainda não existe antes de executá-los.
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
doneCompare a impressão digital da sua chave pública com as chaves instaladas. O arquivoauthorized_keys também pode conter outras chaves.
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_keysObtenha a impressão digital da chave de cada host do servidor por meio do Multipass. Compare-a com a impressão digital mostrada pelo SSH antes de aceitar uma nova chave de 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.pubAdicione essas entradas a ~/.ssh/config no seu Mac usando seus IPs de VM reais. Preservar entradas existentes; coloque-os antes de qualquer padrão Host * correspondente. Ajuste IdentityFile se você escolheu outro caminho de chave.
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 yesTeste primeiro o acesso direto e depois conecte-se por meio de ambos os hosts de salto. Aceite uma chave de host somente após verificar sua impressão digital. Em Secure Pipes, configure os mesmos dois hosts de salto na ordem para a conexão de destino.
ssh jump1
ssh jump2
ssh target
ssh -J jump1,jump2 targetTeste de laboratório controlado opcional: somente se o destino puder distinguir o IP de origem do Mac do jump2 e uma política UFW existente permitir SSH, permita o jump2 antes de negar o IP de origem real do Mac. Substitua os dois espaços reservados. Não habilite ou altere um firewall de produção com base neste exemplo; mantenha o acesso ao console e remova as regras após o teste.
# 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 tcpApós as regras de firewall opcionais, o SSH direto deverá falhar enquanto o ProxyJump for bem-sucedido. Remova as duas regras usando os mesmos endereços IP reais e verifique o acesso novamente.
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 tcpReferências oficiais
Revisado em 27 de outubro de 2026