Cómo configurar y asegurar SSH en Ubuntu: Guía completa para administradores

目次

1. Introducción

Configurar SSH en Ubuntu es fundamental para la administración de servidores remotos. SSH (Secure Shell) es un protocolo que proporciona comunicación cifrada y segura, ampliamente utilizado para acceder a servidores a distancia, ejecutar comandos y transferir archivos. En este artículo, explicaremos en detalle cómo configurar SSH en Ubuntu, desde los pasos básicos de instalación hasta medidas avanzadas de seguridad.

1.1 Razones para configurar SSH en Ubuntu

1.1.1 ¿Qué es SSH?

SSH (Secure Shell) es un protocolo diseñado para garantizar comunicaciones seguras a través de la red. Generalmente se utiliza para iniciar sesión en servidores remotos, transferir archivos y realizar túneles (port forwarding). A diferencia de Telnet o FTP, SSH cifra el contenido de la comunicación, lo que lo convierte en una opción mucho más segura.

1.1.2 Casos en los que se necesita SSH en Ubuntu

Los escenarios en los que se requiere gestionar Ubuntu de forma remota incluyen los siguientes:
  • Administración de servidores en la nube: En servicios como AWS, GCP o Vultr, se utiliza SSH para conectarse remotamente al servidor.
  • Operaciones remotas en entornos LAN: Acceder mediante SSH a servidores internos o máquinas de desarrollo para trabajar de manera remota.
  • Gestión de dispositivos IoT: Controlar de forma remota dispositivos embebidos como Raspberry Pi.
Por defecto, Ubuntu no habilita el servidor SSH. Por ello, es necesario instalarlo manualmente y configurarlo de manera adecuada.
侍エンジニア塾

2. Configuración básica de SSH

Para utilizar SSH en Ubuntu, es necesario instalar el servidor SSH (OpenSSH) y realizar los ajustes correspondientes. En esta sección explicaremos cómo instalar SSH, configurarlo de forma básica, ajustar el firewall y conectarse al servidor.

2.1 Instalación y activación de OpenSSH

2.1.1 ¿Qué es OpenSSH?

OpenSSH (Open Secure Shell) es un software de código abierto que implementa el protocolo SSH. Además de la conexión remota, ofrece funciones como transferencia segura de archivos (SCP o SFTP) y reenvío de puertos.

2.1.2 Instalación de OpenSSH

En Ubuntu, el servidor SSH no viene instalado por defecto. Para instalarlo, ejecute el siguiente comando:
sudo apt update && sudo apt install -y openssh-server
Este comando actualiza la lista de paquetes e instala el servidor OpenSSH.

2.1.3 Inicio del servidor SSH y configuración de inicio automático

Una vez completada la instalación, inicie el servidor SSH y habilite su arranque automático.
sudo systemctl enable --now ssh
La opción enable permite que el servicio SSH se inicie automáticamente al arrancar el sistema operativo.

2.1.4 Verificación del funcionamiento de SSH

Para comprobar si el servidor SSH funciona correctamente, ejecute:
systemctl status ssh
Si aparece una salida similar a la siguiente, significa que el servidor SSH está en ejecución:
● ssh.service - OpenBSD Secure Shell server
   Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2025-02-28 12:00:00 UTC; 5min ago
Si aparece inactive (dead) o failed, puede iniciarlo manualmente con:
sudo systemctl start ssh

2.2 Configuración del firewall (UFW)

En Ubuntu, se incluye un firewall sencillo llamado ufw (Uncomplicated Firewall). Para permitir conexiones SSH, es necesario configurarlo adecuadamente.

2.2.1 Verificar el estado de UFW

Primero, verifique el estado actual del firewall:
sudo ufw status
Ejemplo de salida (UFW deshabilitado)
Status: inactive
Ejemplo de salida (UFW habilitado)
Status: active
To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere

2.2.2 Permitir el tráfico SSH

Para permitir el puerto predeterminado de SSH 22, ejecute:
sudo ufw allow ssh
O bien, especifique el número de puerto explícitamente:
sudo ufw allow 22/tcp

2.2.3 Activar UFW

Si UFW está deshabilitado, actívelo con:
sudo ufw enable
Al habilitar UFW, todo el tráfico entrante será bloqueado por defecto, por lo que debe asegurarse de haber permitido previamente SSH.

2.2.4 Confirmar la configuración

Verifique nuevamente que la configuración del firewall esté aplicada:
sudo ufw status verbose
Ejemplo de salida
Status: active
To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
22/tcp (v6)                ALLOW       Anywhere (v6)
Si aparece esta salida, significa que las conexiones SSH están permitidas.

2.3 Métodos básicos de conexión a SSH

Una vez confirmado que el servidor SSH está en ejecución, probaremos la conexión desde un PC cliente.

2.3.1 Conexión desde Linux/macOS

En Linux o macOS, abra la terminal y ejecute:
ssh usuario@IP_del_servidor
Ejemplo:
ssh user@192.168.1.100
En la primera conexión, puede aparecer un mensaje de advertencia como el siguiente:
The authenticity of host '192.168.1.100 (192.168.1.100)' can't be established.
ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no)?
Escriba yes y presione Enter para establecer la conexión.

2.3.2 Conexión desde Windows

En Windows se puede utilizar PowerShell o PuTTY para conectarse mediante SSH. Usando PowerShell Desde Windows 10 en adelante, PowerShell incluye un cliente SSH integrado. Ejecute:
ssh usuario@IP_del_servidor
Usando PuTTY
  1. Descargue e instale PuTTY desde el sitio oficial.
  2. Abra PuTTY y escriba la dirección IP del servidor en Host Name (or IP address).
  3. En Connection type, seleccione SSH y haga clic en Open.
  4. Introduzca el nombre de usuario y la contraseña.

Resumen

En esta sección hemos explicado los pasos básicos para configurar SSH en Ubuntu:
  • Instalar y activar OpenSSH
  • Configurar UFW para permitir SSH
  • Conectarse desde Linux/macOS y Windows

3. Reforzar la seguridad de SSH

SSH es una herramienta muy útil para conexiones remotas, pero usarla sin ajustes adicionales puede aumentar los riesgos de seguridad. Los atacantes suelen emplear ataques de fuerza bruta o escaneo de puertos para dirigirse a servidores SSH. Por ello, es fundamental aplicar configuraciones de seguridad adecuadas para construir un entorno más seguro.

3.1 Deshabilitar el inicio de sesión como root

De forma predeterminada, en algunos casos la configuración de SSH en Ubuntu permite el acceso como usuario root. Como la cuenta root tiene privilegios totales sobre el sistema, suele ser un objetivo de los atacantes. Prohibir el inicio de sesión directo con root y usar cuentas de usuario normales mejora la seguridad.

3.1.1 Pasos de configuración

  1. Edite el archivo de configuración de SSH /etc/ssh/sshd_config.
sudo nano /etc/ssh/sshd_config
  1. Busque la siguiente línea y cámbiela a PermitRootLogin no.
PermitRootLogin no
  1. Guarde el archivo y reinicie el servicio SSH.
sudo systemctl restart ssh
  1. Verifique que el cambio esté aplicado:
sudo grep PermitRootLogin /etc/ssh/sshd_config
Si el resultado es PermitRootLogin no, el ajuste se aplicó correctamente.

3.2 Deshabilitar autenticación por contraseña e implementar autenticación por clave pública

En SSH, la autenticación con claves públicas es más segura que la autenticación por contraseña. Con este método, no se introduce una contraseña; en su lugar, se utilizan pares de claves (pública y privada). Esto reduce el riesgo de ataques de fuerza bruta.

3.2.1 Generar un par de claves SSH

En el PC local, genere las claves SSH con:
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa
Al finalizar, se habrán creado dos archivos:
  • Clave privada (id_rsa)Se guarda en el PC local (no compartir nunca)
  • Clave pública (id_rsa.pub)Se copia al servidor

3.2.2 Transferir la clave pública al servidor

Use el siguiente comando para copiar la clave pública al servidor:
ssh-copy-id usuario@IP_del_servidor

3.2.3 Deshabilitar la autenticación por contraseña

Abra el archivo de configuración de SSH:
sudo nano /etc/ssh/sshd_config
Busque la línea correspondiente y cámbiela a:
PasswordAuthentication no
Reinicie SSH para aplicar los cambios:
sudo systemctl restart ssh

3.3 Restringir el acceso SSH a usuarios específicos

Para reforzar la seguridad, se puede limitar qué usuarios están autorizados a conectarse vía SSH.

3.3.1 Pasos de configuración

  1. Abra el archivo de configuración /etc/ssh/sshd_config.
sudo nano /etc/ssh/sshd_config
  1. Añada la siguiente línea indicando los usuarios permitidos:
AllowUsers usuario1 usuario2
  1. Reinicie SSH para aplicar los cambios.
sudo systemctl restart ssh

3.4 Cambiar el puerto de SSH

El puerto predeterminado de SSH (22) es un objetivo frecuente de ataques. Cambiarlo reduce el riesgo.

3.4.1 Pasos de configuración

  1. Abra el archivo de configuración de SSH.
sudo nano /etc/ssh/sshd_config
  1. Busque la línea Port 22 y cámbiela, por ejemplo:
Port 2200
  1. Guarde los cambios y reinicie SSH.
sudo systemctl restart ssh

3.4.2 Actualizar la configuración del firewall

Después de cambiar el puerto, permita el nuevo en UFW:
sudo ufw allow 2200/tcp
Verifique:
sudo ufw status

3.5 Proteger contra ataques de fuerza bruta con Fail2Ban

Fail2Ban detecta intentos fallidos de inicio de sesión y bloquea temporalmente las IP ofensivas.

3.5.1 Instalar Fail2Ban

sudo apt install fail2ban -y

3.5.2 Crear archivo de configuración

Copie el archivo predeterminado:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Abra el archivo:
sudo nano /etc/fail2ban/jail.local
Aplique los siguientes ajustes:
[sshd]
enabled = true
port = 2200
maxretry = 3
findtime = 600
bantime = 3600

3.5.3 Reiniciar Fail2Ban

sudo systemctl restart fail2ban

3.5.4 Verificar la lista de bloqueos

sudo fail2ban-client status sshd

Resumen

En esta sección hemos visto cómo reforzar la seguridad de SSH:
  • Deshabilitar el inicio de sesión como root
  • Desactivar contraseñas y usar autenticación con claves públicas
  • Restringir el acceso a usuarios específicos
  • Cambiar el puerto de SSH
  • Usar Fail2Ban para bloquear accesos no autorizados
Con estas medidas se puede construir un entorno SSH más seguro.

4. Configuración avanzada de SSH

Una vez completada la configuración básica y reforzada la seguridad, el siguiente paso es aplicar ajustes avanzados para aprovechar SSH de manera más práctica y segura. En esta sección explicamos cómo gestionar ssh.socket en Ubuntu 22.10 y versiones posteriores, crear túneles SSH (port forwarding), configurar múltiples puertos de escucha y permitir solo IP específicas.

4.1 Uso de ssh.socket en Ubuntu 22.10 o posterior

En Ubuntu 22.10 o más reciente, la gestión del servicio SSH puede realizarse a través de ssh.socket en lugar de ssh.service. Con este mecanismo, el servicio se inicia dinámicamente al recibir solicitudes, lo que ayuda a ahorrar recursos.

4.1.1 Verificar el estado de ssh.socket

Ejecute:
sudo systemctl status ssh.socket
Ejemplo de salida (habilitado)
● ssh.socket - OpenSSH Server Socket
   Loaded: loaded (/lib/systemd/system/ssh.socket; enabled; vendor preset: enabled)
   Active: active (listening) since Fri 2025-02-28 12:00:00 UTC

4.1.2 Habilitar o deshabilitar ssh.socket

Para habilitarlo si está desactivado:
sudo systemctl enable --now ssh.socket
Si prefiere usar ssh.service de la manera tradicional:
sudo systemctl disable --now ssh.socket
sudo systemctl enable --now ssh.service

4.2 Túneles SSH (port forwarding)

Los túneles SSH permiten establecer comunicación segura entre el servidor remoto y el PC local, evitando el uso directo de redes externas.

4.2.1 Reenvío de puertos local

Muy útil para acceder de forma segura a bases de datos o servidores web remotos. Ejemplo: acceder desde el PC local a MySQL en el puerto 3306 del servidor remoto
ssh -L 3306:localhost:3306 usuario@IP_del_servidor

4.2.2 Reenvío de puertos inverso

Permite publicar servicios internos en un servidor remoto a través de SSH. Ejemplo: exponer un servidor web local (puerto 80) en el puerto 8080 del servidor remoto
ssh -R 8080:localhost:80 usuario@IP_del_servidor

4.2.3 Reenvío de puertos dinámico

Se puede usar SSH como un proxy SOCKS para navegar de forma anónima en Internet. Ejemplo: crear un proxy SOCKS en el puerto 1080 del PC local
ssh -D 1080 usuario@IP_del_servidor

4.3 Escuchar en múltiples puertos SSH

Por defecto, SSH escucha solo en un puerto (22). Configurarlo en varios puertos permite adaptarse a distintos entornos de red.

4.3.1 Pasos de configuración

  1. Edite el archivo /etc/ssh/sshd_config.
sudo nano /etc/ssh/sshd_config
  1. Añada las siguientes líneas:
Port 22
Port 2200
  1. Reinicie SSH.
sudo systemctl restart ssh
  1. Permita el nuevo puerto en UFW.
sudo ufw allow 2200/tcp

4.4 Permitir SSH solo desde IP específicas

Una estrategia de seguridad adicional es limitar el acceso SSH únicamente a determinadas direcciones IP.

4.4.1 Configurar /etc/hosts.allow

Edite el archivo:
sudo nano /etc/hosts.allow
Agregue la línea (sustituya 192.168.1.100 por la IP autorizada):
sshd: 192.168.1.100

4.4.2 Configurar /etc/hosts.deny

Para rechazar todas las demás IP:
sudo nano /etc/hosts.deny
sshd: ALL
De esta forma, solo las IP incluidas en hosts.allow tendrán acceso SSH.

Resumen

En esta sección hemos explicado configuraciones avanzadas de SSH:
  • Gestión de ssh.socket en Ubuntu 22.10+
  • Uso de túneles SSH (port forwarding) para comunicación segura
  • Configuración de múltiples puertos de escucha
  • Restricción de acceso SSH a IP específicas
Con estos ajustes, se mejora tanto la seguridad como la flexibilidad de SSH.

5. Solución de problemas con SSH

Incluso después de configurar SSH, pueden surgir situaciones en las que no se pueda establecer conexión. En esta sección organizamos los problemas más comunes al conectarse vía SSH y sus soluciones.

5.1 No se puede conectar a SSH

Si al intentar conectarse aparecen errores como Connection refused o timeout, las causas pueden ser varias.

5.1.1 El servicio SSH no está en ejecución

Es posible que el servidor SSH no se haya iniciado correctamente. Verifique el estado:
sudo systemctl status ssh
Solución:
  • Si aparece Active: inactive (dead) o failed, reinicie el servicio.
sudo systemctl restart ssh
  • Para habilitar el inicio automático después del reinicio del sistema:
sudo systemctl enable ssh

5.1.2 El puerto no está correctamente abierto

Si el puerto SSH ha sido cambiado, debe especificarlo al conectarse:
ssh -p 2200 usuario@IP_del_servidor
Para confirmar los puertos en escucha:
sudo netstat -tulnp | grep ssh
O bien:
ss -tulnp | grep ssh

5.1.3 Revisar la configuración del firewall (UFW)

Compruebe si UFW está bloqueando la comunicación SSH:
sudo ufw status
Solución si SSH no está permitido:
sudo ufw allow 22/tcp
Si se cambió el puerto:
sudo ufw allow 2200/tcp

5.2 Errores de autenticación

5.2.1 Nombre de usuario o contraseña incorrectos

Asegúrese de que el nombre de usuario utilizado sea correcto:
ssh usuario@IP_del_servidor

5.2.2 La autenticación con clave pública no está bien configurada

Verifique que la clave pública esté en el servidor en ~/.ssh/authorized_keys:
cat ~/.ssh/authorized_keys
Debe coincidir con el archivo local ~/.ssh/id_rsa.pub.

5.2.3 Permisos incorrectos en el directorio .ssh

SSH exige permisos estrictos en los archivos de claves y el directorio:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
También verifique los permisos del directorio personal:
chmod 755 /home/usuario

5.3 Conexión SSH inestable o desconexiones frecuentes

Si la conexión SSH se corta tras un tiempo, puede deberse a configuraciones de tiempo de espera en el servidor o en el cliente.

5.3.1 Ajustar ClientAliveInterval

Edite el archivo /etc/ssh/sshd_config y añada o modifique:
ClientAliveInterval 60
ClientAliveCountMax 3
Reinicie SSH:
sudo systemctl restart ssh

5.3.2 Cambiar la configuración en el cliente

En el archivo local ~/.ssh/config, añada:
Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3

5.4 Revisión de logs de SSH

Para solucionar problemas, es importante revisar los registros.

5.4.1 Ver registros en tiempo real

sudo journalctl -u ssh -f

5.4.2 Consultar registros anteriores

sudo cat /var/log/auth.log | grep ssh
O filtrar mensajes de error específicos:
sudo grep "Failed password" /var/log/auth.log

Resumen

En esta sección hemos visto los problemas más frecuentes y sus soluciones:
  • Verificar si el servicio SSH está en ejecución
  • Comprobar que los puertos estén abiertos
  • Revisar la configuración del firewall
  • Confirmar la configuración de la autenticación con claves
  • Ajustar parámetros de tiempo de espera
  • Analizar los registros de SSH para identificar errores
Los problemas con SSH suelen deberse a errores de configuración o al entorno de red. Use esta guía para resolverlos rápidamente.

6. FAQ (Preguntas frecuentes)

En esta sección se presentan preguntas frecuentes sobre la configuración y el uso de SSH, junto con sus soluciones. Estos consejos le ayudarán a usar SSH de forma más cómoda y segura.

6.1 ¿Qué hacer si la conexión SSH se corta por timeout?

Si la conexión SSH se interrumpe tras un tiempo, pruebe estos ajustes.

6.1.1 Cambiar la configuración en el servidor

Edite /etc/ssh/sshd_config y añada:
ClientAliveInterval 60
ClientAliveCountMax 3
Reinicie SSH:
sudo systemctl restart ssh

6.1.2 Cambiar la configuración en el cliente

En el archivo local ~/.ssh/config añada:
Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3

6.2 ¿Qué hacer si olvidé la contraseña y no puedo conectarme por SSH?

6.2.1 Si tiene acceso físico al servidor

  1. Inicie en modo de usuario único (seleccione recovery mode en GRUB).
  2. Restablezca la contraseña con:
passwd usuario
  1. Reinicie el sistema.

6.2.2 Si no tiene acceso físico (como en un VPS en la nube)

  • Use la consola del proveedor de VPS para conectarse.
  • Habilite la autenticación por clave pública.

6.3 ¿Cómo usar SSH en Windows?

6.3.1 Usando PowerShell

Desde Windows 10, PowerShell incluye un cliente SSH integrado:
ssh usuario@IP_del_servidor

6.3.2 Usando PuTTY

  1. Descargue e instale PuTTY.
  2. Introduzca la IP del servidor en Host Name (or IP address).
  3. Seleccione SSH en Connection type y haga clic en Open.
  4. Introduzca usuario y contraseña.

6.4 ¿Cómo configurar SSH en Ubuntu WSL (Windows Subsystem for Linux)?

Para configurar SSH en WSL:

6.4.1 Instalar el servidor SSH

sudo apt update && sudo apt install openssh-server

6.4.2 Cambiar la configuración de SSH

Edite /etc/ssh/sshd_config y habilite:
PasswordAuthentication yes
Como WSL no usa systemd por defecto, inicie SSH manualmente:
sudo service ssh start

6.5 ¿Qué medidas de seguridad adicionales aplicar después de configurar SSH?

6.5.1 Instalar Fail2Ban

Para proteger contra accesos no autorizados:
sudo apt install fail2ban -y
Edite /etc/fail2ban/jail.local y active la protección:
[sshd]
enabled = true
port = 22
maxretry = 3
findtime = 600
bantime = 3600
Reinicie Fail2Ban:
sudo systemctl restart fail2ban

6.5.2 Cambiar el puerto de SSH

Edite /etc/ssh/sshd_config y modifique:
Port 2200
Luego reinicie SSH y permita el puerto en UFW:
sudo ufw allow 2200/tcp

6.6 ¿Cómo monitorear los logs de SSH en tiempo real en Ubuntu?

Para ver registros en tiempo real:
sudo journalctl -u ssh -f
Para consultar registros anteriores:
sudo cat /var/log/auth.log | grep ssh

6.7 ¿Cómo hacer que SSH sea más práctico?

6.7.1 Inicios de sesión rápidos con .ssh/config

Guarde configuraciones en ~/.ssh/config:
Host miservidor
    HostName 192.168.1.100
    User usuario
    Port 2200
    IdentityFile ~/.ssh/id_rsa
Luego podrá conectarse simplemente con:
ssh miservidor

6.7.2 Usar ssh-agent

Para evitar introducir la passphrase de la clave privada cada vez:
eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa

Resumen

En esta sección hemos visto preguntas y soluciones comunes sobre SSH:
  • Solución de desconexiones por timeout
  • Cómo recuperar acceso si se olvida la contraseña
  • Uso de SSH en Windows y WSL
  • Medidas adicionales de seguridad
  • Revisión de logs de SSH
  • Consejos para hacer SSH más práctico
Aplicando estas recomendaciones, podrá gestionar servidores de forma segura y eficiente.

Artículos relacionados

Artículos

1. Introducción Al utilizar SSH en Ubuntu, es posible acceder y administrar de manera segura un servidor o PC de forma […]

年収訴求