Guía · SSH
ProxyJump: conectar por SSH a través de un bastión
Actualizado el · 5 min de lectura
ProxyJump hace que SSH entre primero en un servidor intermedio (el bastión o jump host) y desde ahí abra la conexión al servidor privado, todo en un solo comando: ssh -J usuario@bastion usuario@10.0.1.20. En ~/.ssh/config se escribe ProxyJump bastion en el host privado. La autenticación con el servidor final se hace desde tu Mac, así que tu clave privada nunca se copia al bastión.
En esta página
Cómo funciona
Tu Mac ──SSH──▶ bastion.ejemplo.com ──TCP──▶ 10.0.1.20 (red privada)
└──────────── SSH cifrado de extremo a extremo ────────────┘El bastión solo reenvía el tráfico. La sesión con el servidor final está cifrada de extremo a extremo entre tu Mac y ese servidor. Necesitas OpenSSH 7.3 o posterior; el de macOS lo cumple desde hace años.
1. Desde la línea de comandos
ssh -J ubuntu@bastion.ejemplo.com deploy@10.0.1.20Si el bastión usa otro puerto:
ssh -J ubuntu@bastion.ejemplo.com:2222 deploy@10.0.1.20Varios saltos, separados por comas y en orden:
ssh -J ubuntu@bastion-1.ejemplo.com,ubuntu@bastion-2.interno deploy@10.0.2.152. En ~/.ssh/config
Host bastion
HostName bastion.ejemplo.com
User ubuntu
IdentityFile ~/.ssh/id_ed25519
Host app-1
HostName 10.0.1.20
User deploy
ProxyJump bastionAhora basta con:
ssh app-1ProxyJump bastion usa el bloque Host bastion (usuario, puerto y clave del bastión), así que no repites nada.
Toda una subred detrás del mismo bastión
Host 10.0.1.*
User deploy
ProxyJump bastionOpenSSH antiguo en tu lado (anterior a 7.3)
Host app-1
HostName 10.0.1.20
ProxyCommand ssh -W %h:%p bastion3. Ficheros y túneles a través del bastión
Todo lo que usa SSH respeta el ProxyJump del alias:
scp backup.sql app-1:/tmp/
rsync -av ./dist/ app-1:/srv/app/
sftp app-1Túnel a una base de datos de la red privada:
ssh -N -L 5433:localhost:5432 app-1Si la base de datos está en otra máquina que el bastión ve directamente, ni siquiera necesitas pasar por app-1:
ssh -N -L 5433:db.interno:5432 bastion4. Por qué no usar ForwardAgent
Antes de ProxyJump era habitual entrar en el bastión con ForwardAgent yes y desde allí hacer ssh al servidor privado. Con eso, cualquiera con root en el bastión puede usar tu agente mientras estás conectado. Con ProxyJump no hace falta: tu clave y tu agente se quedan en tu Mac.
Errores comunes
channel 0: open failed: administratively prohibited: open failed. El bastión tieneAllowTcpForwarding noensshd_config. ProxyJump necesita que el bastión permita reenvíos; lo cambia quien lo administra.Permission denied (publickey)al llegar al servidor final. Tu clave pública no está en el~/.ssh/authorized_keysde ese servidor, o el usuario es otro. Entra al bastión sin problema pero el segundo salto es otra autenticación.- Conecta al bastión con tu usuario del Mac. En
-J bastion.ejemplo.comsinusuario@, SSH usa tu usuario local. Pon el usuario en el-Jo en el bloqueHost bastion. Could not resolve hostname app-1.interno. El nombre lo resuelve el bastión, no tu Mac. Usa un nombre que el bastión conozca o la IP privada.- Bucle de conexión o cuelgue. Un
Host *conProxyJump bastiontambién se aplica al propio bastión. Excluye el bastión:Host * !bastion, o ponProxyJump noneenHost bastion(antes delHost *). Host key verification failed. Es la primera vez que conectas a ese servidor privado o su clave de host ha cambiado. Comprueba la huella antes de aceptarla; para una clave cambiada legítimamente,ssh-keygen -R 10.0.1.20.
Para ver en qué salto falla: ssh -v app-1.
Con Terminalia
Hacerlo con Terminalia
Terminalia importa el ProxyJump de tu ~/.ssh/config y lo conserva en el perfil, así que no tienes que volver a escribirlo. Como conecta con el OpenSSH de tu Mac, los saltos, los agentes y known_hosts funcionan igual que en Terminal: si ssh app-1 funciona, el perfil también. Una vez dentro, el explorador SFTP, los túneles, los logs y la terminal van sobre esa misma conexión, sin repetir los dos saltos para cada cosa.
Gratis · sin registro · macOS 14+ · Apple Silicon e Intel
Preguntas frecuentes
¿Qué diferencia hay entre ProxyJump y ProxyCommand?
ProxyJump (-J) es la forma corta y moderna de saltar por un bastión, disponible desde OpenSSH 7.3. ProxyCommand ejecuta el comando que le digas para abrir la conexión, normalmente ssh -W %h:%p bastion. Hacen lo mismo en el caso habitual; usa ProxyJump salvo que necesites un comando especial.
¿Tengo que copiar mi clave privada al bastión?
No, y no deberías. Con ProxyJump te autenticas en el bastión y en el servidor final desde tu Mac; el bastión solo reenvía tráfico cifrado. Lo que sí necesitas es tu clave pública en el authorized_keys del bastión y en el del servidor final.
¿Puedo usar una clave distinta para el bastión y para el servidor?
Sí. Pon un IdentityFile en el bloque Host bastion y otro en el del servidor privado. SSH usa cada clave en su salto. Añade IdentitiesOnly yes para que no ofrezca el resto de claves del agente y evitar el error de demasiados intentos de autenticación.
Guías relacionadas
~/.ssh/config con ejemplos
· 5 min
Túnel SSH en Mac: -L, -R y -D
· 6 min