Resumen
SSH (Secure Shell) es un protocolo de red estándar fundamental para la administración remota de servidores Linux. En este artículo, abordamos paso a paso desde la instalación y configuración del servidor OpenSSH en entornos Ubuntu hasta la autenticación mediante clave pública sin contraseña, el reenvío de puertos (port forwarding) para redes en entornos reales y consejos esenciales para fortalecer la seguridad.
1. Instalación de OpenSSH Server y activación del servicio
Para habilitar el servicio de acceso remoto en el sistema Ubuntu, actualizamos la lista de paquetes e instalamos el paquete openssh-server.

Ejecutamos el comando systemctl enable --now ssh para habilitar el inicio automático del servicio SSH al arrancar el sistema e iniciarlo de inmediato.

Verificamos que el demonio del servicio SSH (sshd) se encuentre actualmente en estado activo y en ejecución (active (running)).

Ejecutamos el comando ss -tulpn | grep :22 para comprobar que el servicio está a la escucha (LISTEN) de conexiones de red en el puerto 22, el puerto predeterminado de SSH.

2. Generación y registro del par de claves SSH para acceso sin contraseña
Creamos el directorio ~/.ssh para almacenar de forma segura los archivos de claves SSH y configuramos sus permisos a 700 para que solo el propietario tenga acceso.

Ejecutamos el comando test -f ~/.ssh/id_ed25519 || ssh-keygen -t ed25519 -N '' -f ~/.ssh/id_ed25519 para generar un nuevo par de claves basado en el algoritmo Ed25519, conocido por su alta seguridad y rendimiento, en caso de que aún no exista.
Al finalizar la ejecución del comando, podemos confirmar que la clave privada (id_ed25519) y la clave pública (id_ed25519.pub) se han generado correctamente.

Añadimos el contenido de la clave pública generada al archivo de autorización de accesos ~/.ssh/authorized_keys.

Restringimos los permisos del archivo authorized_keys a 600 para mantener la seguridad de las claves autorizadas y cumplir con las comprobaciones estrictas de permisos del demonio SSH.

Especificamos la clave privada Ed25519 creada para intentar una conexión a la dirección de loopback local (127.0.0.1) y validar que la autenticación basada en claves funcione correctamente.
Como resultado de la ejecución del comando, se muestra el mensaje de éxito indicando que la conexión local mediante autenticación por clave se realizó sin solicitar contraseña.

3. Tunelización práctica de red: prueba de reenvío de puertos (Port Forwarding) SSH
Actualizamos la lista de paquetes e instalamos los paquetes curl y python3 para ejecutar un servidor web de prueba y realizar solicitudes HTTP.

Ejecutamos el comando mkdir -p /tmp/webroot && echo '<h1>SSH Tunnel Test OK</h1>' > /tmp/webroot/index.html para crear el directorio raíz web y redactar un archivo HTML que servirá para probar el reenvío de puertos.

Ejecutamos en segundo plano un servidor web simple en el puerto 8080 para actuar como servicio interno mediante el comando python3 -m http.server 8080 --directory /tmp/webroot >/dev/null 2>&1 &.

Iniciamos en segundo plano el reenvío de puerto local para redirigir las peticiones que lleguen al puerto local 9090 hacia el puerto 8080 del servidor de destino a través del túnel seguro SSH.
Tras ejecutar el comando, el túnel de reenvío de puertos se crea de forma segura en segundo plano sin bloquear la sesión de la terminal.

Enviamos una solicitud HTTP al puerto local 9090, reenviado a través del túnel SSH, para verificar que la conexión se transmite correctamente hacia el servidor web interno.
Como resultado, se obtiene la respuesta del servidor web interno en el puerto 8080 (<h1>SSH Tunnel Test OK</h1>), confirmando que el reenvío de puertos funciona a la perfección.

Una vez finalizada la prueba de reenvío de puertos, ejecutamos el comando pkill -f 'http.server 8080' para terminar de forma segura el proceso del servidor web de prueba que se ejecutaba en segundo plano.

4. Configuración avanzada de seguridad para el servidor SSH (sshd_config)
Realizamos una copia de respaldo del archivo de configuración con el comando sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak para preservar la configuración original ante posibles eventualidades durante las modificaciones.

Con el fin de reforzar la seguridad, bloqueamos por completo el acceso remoto directo de la cuenta root ejecutando el comando sudo sed -i 's/^#*PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config para actualizar el parámetro correspondiente.

Ejecutamos el comando sudo sshd -t para verificar de forma segura y anticipada que no existan errores de sintaxis ni erratas en el archivo de configuración modificado del servidor SSH.
Al no mostrar ningún mensaje de error tras la ejecución del comando, confirmamos que la sintaxis de configuración es correcta.

Ejecutamos el comando grep -E '^(PermitRootLogin|PasswordAuthentication)' /etc/ssh/sshd_config || echo '설정 검증 완료' para comprobar que la opción que deshabilita el inicio de sesión como root (PermitRootLogin no) se ha reflejado debidamente en el archivo de configuración.
En el resultado del comando se visualiza correctamente PermitRootLogin no, verificando que la directiva de seguridad ha sido aplicada con éxito.

Hasta aquí hemos revisado los aspectos fundamentales necesarios para el trabajo diario en Ubuntu: desde la conexión básica por SSH hasta el reenvío de puertos y las configuraciones indispensables de seguridad.
Le recomendamos aplicar paso a paso estas prácticas de seguridad para construir un entorno de administración de servidores más seguro y eficiente.