# Guía paso a paso para realizar tunneling SSH utilizando un servidor bastión

- Link: https://binariocero.com/linux/guia-paso-a-paso-para-realizar-tunneling-ssh-utilizando-un-servidor-bastion
- Published: 2024-12-05T10:30:02+01:00
- Author: Juan José Fernández Durán

![Loading](https://binariocero.com/wp-content/plugins/page-views-count/ajax-loader-
2x.gif)

Un servidor bastión actúa como un intermediario para conectarse de forma segura 
a máquinas en redes internas. Usando SSH tunneling, puedes crear un canal seguro
para "saltar" de un servidor a otro. Aquí te mostramos cómo lograrlo.

### **Paso 1: Configuración inicial**

Antes de comenzar, asegúrate de tener lo siguiente:

 1. **Acceso SSH al servidor bastión.** Este servidor debe estar accesible desde tu
    máquina local.
 2. **Credenciales de la máquina de destino.** La máquina a la que quieres acceder 
    detrás del bastión.
 3. **SSH instalado.** Verifica que tienes `ssh` instalado en tu máquina local ejecutando`
    ssh -V`.

### **Paso 2: Acceso directo al servidor bastión**

Primero, verifica que puedes conectarte al servidor bastión:

    ```wp-block-preformatted
    ssh usuario_bastion@ip_bastion
    ```

Si puedes acceder, estás listo para continuar.

### **Paso 3: Configuración del archivo SSH (opcional pero recomendado)**

Editar el archivo de configuración SSH (`~/.ssh/config`) simplifica las conexiones.
Añade una entrada para el servidor bastión:

    ```wp-block-preformatted
    Host bastion    HostName ip_bastion    User usuario_bastion    IdentityFile ~/.ssh/id_rsa  # Ruta a tu clave privada, si aplica
    ```

Y otra entrada para la máquina destino detrás del bastión:

    ```wp-block-preformatted
    Host destino    HostName ip_destino    User usuario_destino    ProxyJump bastion
    ```

Esto permite conectarte a la máquina destino simplemente con:

    ```wp-block-preformatted
    ssh destino
    ```

### **Paso 4: Crear un túnel SSH manualmente**

Si prefieres no usar un archivo de configuración, puedes crear el túnel directamente.
Hay dos métodos principales:

#### **Método 1: Usando ProxyJump (recomendado para OpenSSH ≥7.3)**

    ```wp-block-preformatted
    ssh -J usuario_bastion@ip_bastion usuario_destino@ip_destino
    ```

#### **Método 2: Redirigiendo manualmente los puertos**

 1. **Primer paso: Establecer el túnel al bastión y redirigir un puerto local.** Ejecuta
    el siguiente comando en tu máquina local:
    `ssh -L 2222:ip_destino:22 usuario_bastion@
    ip_bastion `Esto redirige el puerto `2222` de tu máquina local al puerto `22` (
    SSH) de la máquina destino, pasando por el bastión.
 2. **Segundo paso: Conectarte a la máquina destino.** En una nueva terminal, conecta
    usando el puerto redirigido:
    `ssh -p 2222 usuario_destino@localhost`

### **Paso 5: Verificar la conexión**

 1. Una vez conectado, prueba comandos simples como `ls` o `whoami` en la máquina destino.
 2. Si encuentras problemas, revisa los siguientes aspectos:
 3.  * Configuración de las claves SSH.
     * Accesibilidad de los puertos entre bastión y destino.
     * Correcta redirección de puertos.

### **Paso 6: Automatización (opcional)**

Si necesitas realizar este proceso frecuentemente, considera usar un script para
automatizar la creación del túnel y la conexión:

    ```wp-block-preformatted
    #!/bin/bash# VariablesBASTION="usuario_bastion@ip_bastion"DESTINO="usuario_destino@ip_destino"LOCAL_PORT=2222# Crear túnel SSHssh -f -N -L $LOCAL_PORT:$DESTINO:22 $BASTION# Conectarse al destinossh -p $LOCAL_PORT usuario_destino@localhost
    ```

Guarda esto como `conectar.sh`, hazlo ejecutable (`chmod +x conectar.sh`) y úsalo
cuando lo necesites.

### **Consejos finales**

 * **Seguridad:** Usa claves SSH en lugar de contraseñas para mayor seguridad.
 * **Limpieza:** Cuando termines, asegúrate de cerrar los túneles SSH abiertos.
 * **Logs:** Habilita la opción `-v` en los comandos SSH para depurar en caso de
   problemas.

Siguiendo estos pasos, puedes implementar fácilmente un túnel SSH a través de un
servidor bastión para conectar máquinas de forma segura.
