>_ CentralHost

Conéctate por SSH y rsync a través del bastión

Una vez cerrado el puerto 22 al mundo, llega a tus servidores con SSH y rsync nativos a través del bastión — registra una clave y añade un solo flag de salto a los comandos que ya usas.

Después de cerrar el puerto SSH con un bastión, el puerto 22 deja de estar abierto a internet. Tu shell del día a día sigue funcionando — el Terminal del navegador viaja por la conexión saliente del agente y no necesita ningún puerto entrante. Pero las herramientas nativas de línea de comandos (ssh, rsync, scp, el Remote SSH de tu IDE) llegan al host por el puerto 22, que ahora está cerrado para todos menos el bastión.

El arreglo es pequeño: sigue usando los mismos comandos que ya conoces y enrútalos por el bastión con un flag extra. El bastión es un jump host solo-túnel — reenvía la conexión a tu servidor pero nunca ve la contraseña del host ni termina tu SSH. Entras al host con tu propia clave o contraseña, de extremo a extremo. Esta guía muestra el antes/después de ssh y rsync para que te conectes a tus propios servidores por tu cuenta.

Antes de empezar

  • Ya restringiste el SSH al bastión (o estás por hacerlo). Si el puerto 22 sigue abierto al mundo, todavía no necesitas el bastión — conéctate directo.
  • Tienes una terminal con el cliente OpenSSH (ssh, incluido en macOS, Linux y Windows 10+).
  • Tu despliegue opera un bastión. Si la página Claves del bastión no está en tu barra lateral, consulta con tu administrador.

La regla que a todos se les escapa

Cuando te conectas a través del bastión, el destino final debe ser la dirección IP de tu servidor — no su hostname ni su FQDN.

El bastión solo abre un túnel hacia los servidores de tu cuenta, y los identifica por IP. Si le pasas un hostname como servidor.ejemplo.com, no tiene contra qué compararlo y rechaza abrir el canal (administratively prohibited). Pásale la IP y el túnel abre.

Encuentras la IP de cada servidor en el panel, en la cabecera de su vista. Sigue usando el destino normal del puerto 22 (root@…, tu propio usuario, etc.) — lo único que cambia es la dirección, de un nombre a una IP.

El jump host sí sigue siendo un nombre — jump@b1.centralhost.sh. Es el servidor que está detrás el que se direcciona por IP.

Paso 1 — Registra una clave del bastión

El bastión es solo por clave — nunca acepta una contraseña para el salto en sí, aunque tu servidor use login por contraseña. Así que antes de nada, registra la mitad pública de una clave SSH. Esta es la clave que te lleva hasta el bastión; entrar al servidor que está detrás es aparte (tu propia clave o contraseña).

  1. Abre Claves del bastión desde la barra lateral.
  2. Dale una Etiqueta a la clave (p. ej. laptop, teléfono de guardia).
  3. Elige cómo añadirla:
    • Pegar clave — pega una clave pública ssh-ed25519 … existente.
    • Subir .pub — elige un archivo .pub.
    • Crear clave nueva — el navegador genera un par Ed25519 por ti.

La página de Claves del bastión con la pestaña "Crear clave nueva" activa: un campo Etiqueta con "laptop", el selector Pegar clave / Subir .pub / Crear clave nueva, la nota "Generamos el par de claves en tu navegador. La clave privada se ofrece como una descarga única y nunca llega a nuestros servidores." y un botón "Generar par de claves".

Si elegiste Crear clave nueva, pulsa Generar par de claves. El navegador crea el par localmente y muestra la clave privada una sola vez — descárgala y guárdala bien. Nunca recibimos ni conservamos una copia.

Un diálogo "Guarda tu clave privada" sobre la página de Claves del bastión: un bloque OPENSSH PRIVATE KEY que se muestra una única vez con el aviso "Esta es la única vez que podemos mostrarte esta clave privada. Descárgala ahora y guárdala en un lugar seguro — nunca conservamos una copia.", y botones Descargar / Copiar.

Guarda el archivo descargado en ~/.ssh/ (por ejemplo ~/.ssh/centralhost-bastion) y ajusta sus permisos:

mv ~/Downloads/laptop.pem ~/.ssh/centralhost-bastion
chmod 600 ~/.ssh/centralhost-bastion

La clave nueva aparece en la lista con un Último uso de Nunca. Es lo esperado — se vuelve una marca de tiempo la primera vez que te conectes por el bastión.

Paso 2 — Conéctate por SSH

Estos son los comandos que usas hoy, mientras el puerto 22 está abierto — y los mismos comandos enrutados a través del bastión. En todos los casos el cambio es el mismo: añade -J jump@b1.centralhost.sh y cambia el hostname por la IP del servidor.

Conectándote hoy (directo)

Con clave:

ssh -i ~/.ssh/id_ed25519 root@servidor.ejemplo.com

Con contraseña (te la pide tras pulsar Enter):

ssh root@servidor.ejemplo.com

Lo mismo, a través del bastión

Con clave — -i sigue apuntando a tu clave del host; el salto al bastión usa la clave del bastión del Paso 1:

ssh -J jump@b1.centralhost.sh -i ~/.ssh/id_ed25519 root@<ip-del-servidor>

Con contraseña — el salto al bastión igual se autentica con tu clave registrada, y luego el servidor te pide su contraseña:

ssh -J jump@b1.centralhost.sh root@<ip-del-servidor>

Reemplaza <ip-del-servidor> por la IP del servidor que aparece en el panel. Para que ssh presente tu clave del bastión en el salto, asegúrate de que esté cargada — añádela a tu agente (ssh-add ~/.ssh/centralhost-bastion) o fíjala por host en tu configuración SSH (siguiente paso).

Hazlo permanente con ~/.ssh/config

Teclear el flag de salto cada vez cansa, y un bloque de configuración SSH además te deja darle a cada salto su propia clave. Añade esto una vez a ~/.ssh/config:

Host centralhost-bastion
    HostName b1.centralhost.sh
    User jump
    IdentityFile ~/.ssh/centralhost-bastion
    IdentitiesOnly yes

Host mi-servidor
    HostName <ip-del-servidor>       # la IP del servidor, nunca su hostname
    User root
    ProxyJump centralhost-bastion
    IdentityFile ~/.ssh/id_ed25519   # tu clave del host; omite esta línea para login por contraseña

Ahora conectarte es solo:

ssh mi-servidor

Paso 3 — Transfiere archivos con rsync

rsync corre sobre el mismo transporte SSH, así que aplica la misma regla. Le pasas a rsync el comando SSH con -e, añades ahí el flag de salto y apuntas a la IP del servidor.

Sincronizando hoy (directo)

Con clave:

rsync -avz -e "ssh -i ~/.ssh/id_ed25519" ./public/ root@servidor.ejemplo.com:/var/www/site/

Con contraseña:

rsync -avz ./public/ root@servidor.ejemplo.com:/var/www/site/

Lo mismo, a través del bastión

Con clave:

rsync -avz -e "ssh -J jump@b1.centralhost.sh -i ~/.ssh/id_ed25519" ./public/ root@<ip-del-servidor>:/var/www/site/

Con contraseña:

rsync -avz -e "ssh -J jump@b1.centralhost.sh" ./public/ root@<ip-del-servidor>:/var/www/site/

Si añadiste el bloque de ~/.ssh/config del Paso 2, rsync lo hereda — sin -e, y reutilizas el mismo alias mi-servidor (que ya resuelve a la IP y al jump host correcto):

rsync -avz ./public/ mi-servidor:/var/www/site/

El mismo patrón cubre scp (scp -J jump@b1.centralhost.sh archivo root@<ip-del-servidor>:/ruta/) y los plugins Remote-SSH de los IDE — todos leen ~/.ssh/config, así que en cuanto funciona el alias, funcionan ellos.

Solución de problemas

  • administratively prohibited: open failed — apuntaste al servidor por hostname en vez de su IP, o el servidor no está en el alcance de tu cuenta. Usa la IP que muestra el panel.
  • Permission denied (publickey) en el salto — el bastión no recibió tu clave registrada. Confirma que esté cargada (ssh-add -l) o fijada con IdentityFile + IdentitiesOnly yes en la entrada Host …bastion, y que su huella coincida con la de la página Claves del bastión.
  • Te pide una contraseña inesperada — ese prompt es el del servidor (tu propia auth), no el del bastión. El bastión nunca pide contraseña; solo acepta tu clave.
  • Sigue agotándose el tiempo en el puerto 22 — confirma que el SSH esté de verdad restringido al bastión (Firewall · Modo bastión dice Solo bastión). Si todavía dice Abierto al mundo, conéctate directo — aún no necesitas el bastión.
  • Último uso sigue diciendo Nunca — tu conexión no llegó al bastión. Revisa de nuevo el flag de salto y la clave del bastión; un salto exitoso lo cambia a una marca de tiempo.