Guía completa de configuración de SSH en Ubuntu: instalación, endurecimiento de seguridad, configuración avanzada y solución de problemas

目次

1. Introducción

Configurar SSH en Ubuntu es esencial para administrar servidores remotos. SSH (Secure Shell) es un protocolo que brinda comunicación cifrada segura, permitiendo a los usuarios acceder a los servidores de forma remota, ejecutar comandos y transferir archivos.

Este artículo explica cómo configurar SSH en Ubuntu, desde los pasos básicos de instalación hasta medidas de seguridad avanzadas.

1.1 ¿Por qué configurar SSH en Ubuntu?

1.1.1 ¿Qué es SSH?

SSH (Secure Shell) es un protocolo que permite comunicación segura a través de una red. Se utiliza habitualmente para iniciar sesión en servidores remotos, transferir archivos y crear túneles (reenvío de puertos). A diferencia de Telnet o FTP tradicionales, SSH cifra toda la comunicación, proporcionando una seguridad robusta.

1.1.2 Cuándo se necesita SSH en Ubuntu

Los escenarios más comunes en los que se usa SSH para gestionar Ubuntu de forma remota incluyen:

  • Administración de servidores en la nube : los servidores Linux en AWS, GCP, Vultr y otros suelen accederse mediante SSH.
  • Operaciones remotas en entornos LAN : acceso remoto a servidores internos o máquinas de desarrollo.
  • Gestión de dispositivos IoT : control de sistemas embebidos como Raspberry Pi de forma remota.

De forma predeterminada, el servidor SSH está deshabilitado en Ubuntu, por lo que debe instalarse y configurarse manualmente para habilitar el acceso SSH.

2. Configuración básica de SSH

Para usar SSH en Ubuntu, es necesario instalar el servidor SSH (OpenSSH) y configurarlo adecuadamente. Esta sección explica cómo instalar SSH, ajustar configuraciones básicas, configurar el firewall y conectarse al servidor.

2.1 Instalación y arranque de OpenSSH

2.1.1 ¿Qué es OpenSSH?

OpenSSH (Open Secure Shell) es una implementación de código abierto del protocolo SSH. Soporta conexiones remotas, transferencias seguras de archivos (SCP y SFTP) y reenvío de puertos.

2.1.2 Instalación de OpenSSH

Ubuntu no incluye un servidor SSH por defecto, por lo que se instala con el siguiente comando:

sudo apt update && sudo apt install -y openssh-server

Esto actualiza las listas de paquetes e instala el servidor OpenSSH.

2.1.3 Iniciar SSH y habilitar el arranque automático

Tras la instalación, inicie el servidor SSH y habilite su inicio automático:

sudo systemctl enable --now ssh

La opción enable garantiza que SSH se inicie automáticamente al arrancar el sistema operativo.

2.1.4 Verificar el estado de SSH

Compruebe que SSH está en ejecución:

systemctl status ssh

Si la salida muestra active (running), SSH funciona normalmente:

● 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 muestra inactive (dead) o failed, inicie SSH manualmente:

sudo systemctl start ssh

2.2 Configuración del firewall (UFW)

Ubuntu incluye un firewall sencillo llamado ufw (Uncomplicated Firewall). Es necesario permitir las conexiones SSH a través de él.

2.2.1 Verificar el estado de UFW

sudo ufw status

Ejemplo de salida (inactive):

Status: inactive

Ejemplo de salida (active):

Status: active
To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere

2.2.2 Permitir SSH

sudo ufw allow ssh

O de forma explícita:

sudo ufw allow 22/tcp

2.2.3 Habilitar UFW

sudo ufw enable

2.2.4 Verificar las reglas de UFW

sudo ufw status verbose

Ejemplo:

Status: active
To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
22/tcp (v6)                ALLOW       Anywhere (v6)

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

Una vez que SSH está en funcionamiento, conéctese desde una máquina cliente.

2.3.1 Conexión desde Linux/macOS

ssh username@server-ip-address

Ejemplo:

ssh user@192.168.1.100

Es posible que vea una advertencia de seguridad en la primera conexión:

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 para continuar.

2.3.2 Conexión desde Windows

Puede usar PowerShell o PuTTY.

Usando PowerShell (Windows 10+ incluye SSH):

ssh username@server-ip-address

Usando PuTTY:

  1. Descargue PuTTY desde el sitio oficial
  2. Abra PuTTY e ingrese la IP del servidor en Host Name (or IP address)
  3. Seleccione SSH como tipo de conexión
  4. Haga clic en Open e inicie sesión

Conclusión

Esta sección cubrió los conceptos básicos para configurar SSH en Ubuntu:

  • Cómo instalar y iniciar OpenSSH
  • Cómo permitir conexiones SSH con UFW
  • Cómo conectarse desde Linux/macOS y Windows

3. Fortalecimiento de la seguridad SSH

SSH es potente, pero dejarlo con la configuración predeterminada aumenta los riesgos de seguridad. Los atacantes a menudo intentan ataques de fuerza bruta o escaneos de puertos. Fortalecer la seguridad de SSH es esencial.

3.1 Desactivar el inicio de sesión como root

El inicio de sesión como root brinda control total del sistema y es un objetivo principal para los atacantes. Desactivarlo mejora la seguridad.

3.1.1 Pasos

  1. Edite el archivo de configuración de SSH:
    sudo nano /etc/ssh/sshd_config
    
  1. Cambie la línea a:
    PermitRootLogin no
    
  1. Reinicie SSH:
    sudo systemctl restart ssh
    
  1. Confirme el cambio:
    sudo grep PermitRootLogin /etc/ssh/sshd_config
    

Si la salida es PermitRootLogin no, la configuración se ha aplicado.

3.2 Desactivar la autenticación por contraseña y usar autenticación con clave

La autenticación con clave pública es más segura que las contraseñas y reduce los riesgos de ataques de fuerza bruta.

3.2.1 Creación de claves SSH

ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa

Esto genera dos archivos:

  • id_rsa (clave privada) — guárdela localmente, nunca la comparta
  • id_rsa.pub (clave pública) — cárguela al servidor

3.2.2 Carga de la clave pública

ssh-copy-id username@server-ip-address

3.2.3 Desactivar la autenticación por contraseña

sudo nano /etc/ssh/sshd_config

Edite:

PasswordAuthentication no

Reinicie SSH:

sudo systemctl restart ssh

3.3 Permitir acceso SSH solo a usuarios específicos

Para mejorar la seguridad de SSH, puede restringir el acceso de modo que solo ciertos usuarios puedan iniciar sesión.

3.3.1 Pasos de configuración

  1. Abra el archivo de configuración de SSH /etc/ssh/sshd_config :
    sudo nano /etc/ssh/sshd_config
    
  1. Añada los usuarios que pueden acceder vía SSH:
    AllowUsers username1 username2
    
  1. Reinicie SSH para aplicar los cambios:
    sudo systemctl restart ssh
    

3.4 Cambiar el puerto de SSH

Debido a que el puerto 22 es frecuentemente objetivo de atacantes, cambiar el puerto predeterminado puede mejorar la seguridad.

3.4.1 Pasos de configuración

  1. Abra el archivo de configuración de SSH:
    sudo nano /etc/ssh/sshd_config
    
  1. Modifique la configuración del puerto, por ejemplo:
    Port 2200
    
  1. Reinicie SSH:
    sudo systemctl restart ssh
    

3.4.2 Actualizando la configuración del firewall

Si cambia el puerto, actualice UFW:

sudo ufw allow 2200/tcp

Verifique la nueva regla:

sudo ufw status

3.5 Prevenir ataques de fuerza bruta con Fail2Ban

Fail2Ban detecta intentos fallidos de inicio de sesión y bloquea la IP atacante durante un tiempo especificado.

3.5.1 Instalar Fail2Ban

sudo apt install fail2ban -y

3.5.2 Crear un archivo de configuración

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Abra el archivo:

sudo nano /etc/fail2ban/jail.local

Modifique la configuración:

[sshd]
enabled = true
port = 2200
maxretry = 3
findtime = 600
bantime = 3600

3.5.3 Reiniciar Fail2Ban

sudo systemctl restart fail2ban

3.5.4 Verificar lista de baneos

sudo fail2ban-client status sshd

Conclusión

Esta sección explicó métodos para mejorar la seguridad de SSH:

  • Desactivar el inicio de sesión como root
  • Desactivar la autenticación por contraseña y habilitar la autenticación con clave
  • Restringir el acceso SSH a usuarios específicos
  • Cambiar el puerto SSH
  • Usar Fail2Ban para bloquear intentos no autorizados

Implementar estas configuraciones ayuda a crear un entorno SSH seguro.

4. Configuración avanzada de SSH

Una vez completada la configuración básica de SSH y el endurecimiento de la seguridad, puedes pasar a funciones avanzadas para mejorar la flexibilidad y la seguridad. Esta sección cubre la gestión de ssh.socket (Ubuntu 22.10+), túneles SSH, la escucha en varios puertos y el control de acceso basado en IP.

4.1 Uso de ssh.socket en Ubuntu 22.10+

En Ubuntu 22.10+, SSH puede ser gestionado por ssh.socket en lugar de ssh.service. Esta activación basada en sockets inicia SSH solo cuando es necesario, ahorrando recursos del sistema.

4.1.1 Verificar el estado de ssh.socket

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

Habilitar el socket:

sudo systemctl enable --now ssh.socket

Volver al ssh.service clásico:

sudo systemctl disable --now ssh.socket
sudo systemctl enable --now ssh.service

4.2 Túneles SSH (Redirección de puertos)

Los túneles SSH establecen canales de comunicación seguros entre sistemas locales y remotos.

4.2.1 Redirección de puerto local

Útil para conectar de forma segura a bases de datos remotas o servicios internos.

Ejemplo: Acceder a un servidor MySQL remoto en el puerto 3306

ssh -L 3306:localhost:3306 username@server-ip-address

4.2.2 Redirección de puerto inversa

Exponer servicios locales a través de un servidor remoto.

Ejemplo: Publicar un servidor web local en el puerto remoto 8080

ssh -R 8080:localhost:80 username@server-ip-address

4.2.3 Redirección de puerto dinámica (proxy SOCKS)

Usar SSH como proxy SOCKS para navegación anónima.

ssh -D 1080 username@server-ip-address

4.3 Escucha en varios puertos

SSH puede escuchar en más de un puerto para mayor flexibilidad en diferentes entornos de red.

4.3.1 Pasos de configuración

  1. Editar /etc/ssh/sshd_config :
    sudo nano /etc/ssh/sshd_config
    
  1. Añadir varias líneas Port :
    Port 22
    Port 2200
    
  1. Reiniciar SSH :
    sudo systemctl restart ssh
    
  1. Permitir el nuevo puerto con UFW :
    sudo ufw allow 2200/tcp
    

4.4 Permitir SSH solo desde direcciones IP específicas

Restringir el acceso SSH por dirección IP ofrece un control de seguridad sólido.

4.4.1 Configurar /etc/hosts.allow

sudo nano /etc/hosts.allow

Añadir una dirección IP permitida:

sshd: 192.168.1.100

4.4.2 Configurar /etc/hosts.deny

sudo nano /etc/hosts.deny

Denegar a todos los demás:

sshd: ALL

Conclusión

Esta sección cubrió temas de configuración avanzada de SSH:

  • Gestión de ssh.socket en Ubuntu 22.10+
  • Uso de túneles SSH (redirección de puertos)
  • Escucha en varios puertos SSH
  • Restricción del acceso SSH a direcciones IP específicas

Aplicar estas configuraciones mejora tanto la seguridad como la usabilidad.

5. Solución de problemas de SSH

Incluso con una configuración correcta, las conexiones SSH pueden fallar ocasionalmente. Esta sección explica problemas comunes de SSH y sus soluciones.

5.1 Cuando SSH no puede conectarse

Si SSH devuelve Connection refused o se agota el tiempo, las causas posibles incluyen problemas del servicio, configuración incorrecta del puerto o restricciones del firewall.

5.1.1 El servicio SSH no está en ejecución

sudo systemctl status ssh

Solución:

  • Si está inactive o failed, reinicia SSH:
    sudo systemctl restart ssh
    
  • Habilita el inicio automático:
    sudo systemctl enable ssh
    

5.1.2 Puerto SSH no está abierto

ssh -p 2200 username@server-ip-address

Verificar puertos abiertos:

sudo netstat -tulnp | grep ssh

Or:

ss -tulnp | grep ssh

5.1.3 Firewall (UFW) Bloqueando SSH

sudo ufw status

Permitir SSH:

sudo ufw allow 22/tcp

Si se usa un puerto personalizado:

sudo ufw allow 2200/tcp

5.2 Errores de Autenticación

5.2.1 Nombre de Usuario o Contraseña Incorrectos

ssh username@server-ip-address

5.2.2 Clave Pública No Instalada Correctamente

cat ~/.ssh/authorized_keys

Verifique que coincida con el id_rsa.pub local.

5.2.3 Permisos Incorrectos en el Directorio .ssh

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

También asegúrese de:

chmod 755 /home/username

5.3 Conexiones SSH Inestables o Desconexiones Inesperadas

5.3.1 Ajustar ClientAliveInterval

ClientAliveInterval 60
ClientAliveCountMax 3
sudo systemctl restart ssh

5.3.2 Ajustar Configuraciones del Cliente Local

Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3

5.4 Visualizar Registros de SSH

5.4.1 Ver Registros en Tiempo Real

sudo journalctl -u ssh -f

5.4.2 Ver Registros Anteriores

sudo cat /var/log/auth.log | grep ssh
sudo grep "Failed password" /var/log/auth.log

Conclusión

Esta sección explicó problemas comunes de SSH y cómo resolverlos:

  • Verificar si el servicio SSH está en ejecución
  • Verificar puertos abiertos
  • Comprobar configuraciones del firewall
  • Asegurar autenticación correcta con claves
  • Corregir problemas de tiempo de espera y desconexiones
  • Analizar registros de SSH

La mayoría de los problemas de SSH provienen de configuraciones erróneas o restricciones de red. Use estos pasos de solución de problemas para resolver los inconvenientes de manera eficiente.

6. Preguntas frecuentes (FAQ)

Esta sección responde preguntas comunes relacionadas con el uso y la configuración de SSH.

6.1 ¿Cómo Solucionar Problemas de Tiempo de Espera en SSH?

6.1.1 Configuraciones del Lado del Servidor

ClientAliveInterval 60
ClientAliveCountMax 3
sudo systemctl restart ssh

6.1.2 Configuraciones del Lado del Cliente

Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3

6.2 ¿Qué Hacer Si Olvida la Contraseña de SSH?

6.2.1 Si Tiene Acceso Físico

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

6.2.2 Si No Es Posible el Acceso Físico (VPS en la Nube)

  • Use la consola de VPS proporcionada por el servicio de alojamiento
  • Use autenticación con clave pública

6.3 ¿Cómo Usar SSH en Windows?

6.3.1 Usando PowerShell

ssh username@server-ip-address

6.3.2 Usando PuTTY

  1. Descargue e instale PuTTY
  2. Ingrese la dirección IP del servidor en Host Name
  3. Seleccione SSH como tipo de conexión
  4. Inicie sesión con nombre de usuario y contraseña

6.4 ¿Cómo Configurar SSH en Ubuntu WSL?

6.4.1 Instalar el Servidor SSH

sudo apt update && sudo apt install openssh-server

6.4.2 Modificar Configuraciones de SSH

PasswordAuthentication yes

Inicie SSH manualmente (WSL no usa systemd):

sudo service ssh start

6.5 Mejores Prácticas de Seguridad Adicionales

6.5.1 Usar Fail2Ban

sudo apt install fail2ban -y
[sshd]
enabled = true
port = 22
maxretry = 3
findtime = 600
bantime = 3600
sudo systemctl restart fail2ban

6.5.2 Cambiar el Puerto de SSH

Port 2200
sudo ufw allow 2200/tcp

6.6 ¿Cómo Monitorear Registros de SSH en Tiempo Real?

sudo journalctl -u ssh -f
sudo cat /var/log/auth.log | grep ssh

6.7 Consejos para Usar SSH de Manera Más Cómoda

6.7.1 Usar .ssh/config para Inicios de Sesión Simples

Host myserver
    HostName 192.168.1.100
    User user
    Port 2200
    IdentityFile ~/.ssh/id_rsa

Luego conéctese con:

ssh myserver

6.7.2 Usar ssh-agent

eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa

Conclusión

Esta sección resumió preguntas frecuentes relacionadas con SSH:

  • Cómo solucionar problemas de tiempo de espera de SSH
  • Cómo recuperar una contraseña olvidada
  • Cómo usar SSH en Windows y WSL
  • Mejores prácticas de seguridad
  • Cómo revisar los registros de SSH
  • Consejos para hacer SSH más conveniente usando .ssh/config

Al aplicar estas técnicas, puedes crear un entorno SSH seguro y eficiente y gestionar servidores remotos sin problemas.

侍エンジニア塾