Acceso remoto mediante SSH

Utilice conexiones SSH para acceder de forma segura a recursos, redes y aplicaciones remotos.

Acceso remoto a redes y servicios mediante SSH

El reenvío de puerto SSH, también conocido como túnel SSH, transporta datos de forma segura a través de una conexión SSH cifrada entre un sistema local y un sistema remoto. Después de establecer un túnel SSH, el cliente SSH escucha en un puerto local especificado y reenvía cualquier tráfico que llegue a ese puerto mediante la conexión al puerto remoto correspondiente.

Al cifrar los datos en tránsito, el reenvío del puerto SSH garantiza que la información confidencial sea segura e inaccesible, permite el acceso seguro a servicios y redes remotas sin exposición directa a Internet, y evita los cortafuegos y las restricciones de red.

Los tres tipos principales de reenvío de puerto SSH son:

  • Local Port Forwarding reenvía un puerto del cliente al servidor SSH y, a continuación, al puerto de destino.
  • Dynamic Port Forwarding (Reenvío dinámico de puertos) crea un servidor proxy SOCKS para las comunicaciones en un rango de puertos.
  • Reverse Port Forwarding reenvía un puerto del servidor al cliente y, a continuación, al puerto de destino.

Puede utilizar el reenvío de puertos para acceder a un servicio que no está expuesto a la interfaz de red pública. Puede configurar un reenvío de puerto local para acceder a un servicio (como una base de datos) en un servidor remoto. La base de datos del servidor no está expuesta a la interfaz de red pública, pero puede crear un túnel desde una máquina local hasta el puerto del servidor de base de datos interno. A continuación, puede conectarse al host local y todo el tráfico se reenviaría a través del túnel SSH a la base de datos remota.

Puede utilizar el reenvío inverso de puertos para proporcionar a alguien fuera de la red local acceso a un servicio interno. Por ejemplo, puede que desee mostrar a un desarrollador externo una aplicación web que haya desarrollado en la máquina local. Debido a que la máquina no tiene una IP pública, el otro desarrollador no puede acceder a la aplicación a través de Internet. Sin embargo, si tiene acceso a un servidor SSH remoto, puede configurar el reenvío inverso del puerto para proporcionar acceso al desarrollador.

Configuración del reenvío de puertos en el servidor

Para configurar el reenvío del puerto SSH:

  1. Desde una línea de comandos, mediante privilegios administrativos, conéctese a la instancia mediante SSH.
  2. Edite el archivo /etc/ssh/sshd_config. Como mínimo, verifique los siguientes parámetros:
    • AllowTCPForwarding

      Permite el reenvío del puerto TCP. Cuando se omite, el valor por defecto es yes, que activa el reenvío de puerto TCP único y el proxy SOCKS.

    • AllowStreamLocalForwarding

      Permite el reenvío de sockets de dominio UNIX. Cuando se omite, el valor por defecto es yes.

Reenvío de puerto local

El reenvío de puertos locales mediante SSH asigna un puerto local en el sistema cliente a un puerto remoto en el sistema del servidor. Esta configuración permite acceder a servicios en el sistema remoto a los que, de lo contrario, no se puede acceder porque los servicios pueden estar ejecutándose detrás de un firewall o pueden no estar recibiendo en una interfaz de red pública.

Para crear un túnel de reenvío de TCP directo, utilice la opción ssh -L:

ssh -L <bind_address>:<port>:<destination>:<destination_port> <user>@<remote_ssh_server>
  • bind_address

    Opcional y asigna una interfaz local para recibir conexiones. Si se omite, ssh sólo se enlaza en las interfaces de bucle de retorno. Para enlazar en todas las interfaces, puede utilizar 0.0.0.0 o ::.

  • port

    El número de puerto local. Puede utilizar cualquier número de puerto mayor que 1024.

  • destination

    IP o nombre de host de la máquina de destino. Si el destino está en el propio servidor remoto, puede utilizar localhost.

  • destination_port

    Puerto en la máquina de destino.

  • user@remote_ssh_server

    El usuario SSH remoto y la dirección IP del servidor.

Por ejemplo:

ssh -L 8080:localhost:8888 user@192.168.1.20

Esto abriría una conexión SSH al servidor remoto en 192.168.1.20 y abriría un túnel al puerto de host local 8888.

Reenvío dinámico de puertos

Utilice el reenvío de puerto dinámico para que el cliente SSH reciba en un puerto de enlace especificado y actúe como servidor proxy SOCKS. No es necesario especificar un host de destino, ya que todas las conexiones entrantes en el puerto especificado se reenvían a través del túnel a un puerto dinámico en la máquina de destino.

Para crear un reenvío de puerto dinámico, utilice la opción ssh -D.

ssh -D <bind_address>:<port> <user>@<remote_ssh_server>

Reenvío inverso de puerto

Un túnel inverso reenvía cualquier conexión recibida en el servidor SSH remoto a la red de cliente local.

Para crear un reenvío de puerto inverso, utilice la opción ssh -R.

  • Para el reenvío inverso del puerto local:
    ssh -R <bind_address>:<port>:<destination>:<destination_port> <user>@<remote_ssh_server>
  • Para el reenvío inverso de puerto dinámico:
    ssh -R <bind_address>:<port> <user>@<remote_ssh_server>

Acceso remoto a aplicaciones basadas en X11 mediante SSH

El reenvío de X11 permite utilizar una conexión SSH para abrir una aplicación gráfica basada en X11 en un sistema Oracle Linux remoto y utilizarla desde un sistema local. El sistema remoto no necesita tener un servidor X11 o un entorno de escritorio gráfico en ejecución, pero el sistema local debe tener un servicio compatible con X11 en ejecución.

Activar el reenvío X11 en el servidor remoto

  1. Desde una línea de comandos, mediante privilegios administrativos, conéctese a la instancia mediante SSH.
  2. Active X11Forwarding en el archivo /etc/ssh/sshd_config.

    Si se omite X11Forwarding en /etc/ssh/sshd_config, el valor por defecto es no. Para activar el reenvío X11, agregue una entrada que defina el valor de este parámetro en yes.

    X11Forwarding yes
  3. Instale los paquetes X11:
    dnf install xorg-x11-xauth xorg-x11-fonts-\* xorg-x11-utils dbus-x11
    Si nunca ha ejecutado una aplicación gráfica en el servidor remoto, la primera vez que se conecta al servidor remoto mediante el reenvío X11, se muestra un mensaje de advertencia:
    /usr/bin/xauth: file /home/user/.Xauthority does not exist

    Puede ignorar esta advertencia, ya que el archivo .Xauthority se crea automáticamente.

  4. Reinicie el servicio sshd para que se aplique el cambio:
    sudo systemctl restart sshd.service

Abrir una aplicación de forma remota mediante el reenvío X11

  1. Inicie sesión en el servidor remoto mediante SSH:
    ssh -X <user>@<server1.example.com>
    
    The authenticity of host 'remote-server (192.168.122.120)' can't be established.
    ECDSA key fingerprint is SHA256:uYwFlgtP/2YABMHKv5BtN7nHK9SHRL4hdYxAPJVK/kY.
    Are you sure you want to continue connecting (yes/no/[fingerprint])?
  2. Introduzca yes.
    Warning: Permanently added 'remote-server' (ECDSA) to the list of known hosts.
  3. Abra una aplicación gráfica en el servidor remoto que se muestra en el sistema local. Por ejemplo, para ejecutar el editor de texto gráfico gedit, introduzca:
    gedit &
    Al agregar & (ampersand), se ejecuta la aplicación en segundo plano y se libera el terminal para otros comandos.