Guía definitiva de configuración de SSH para Ubuntu: acceso remoto seguro, configuración y solución de problemas

目次

1. Introducción

Al usar SSH en Ubuntu, puedes acceder y operar servidores o PCs de forma segura de manera remota. Este artículo proporciona una explicación detallada de SSH —desde sus conceptos básicos y cómo instalar un servidor SSH en Ubuntu, hasta las mejores prácticas de seguridad y la resolución de problemas— utilizando explicaciones claras adecuadas incluso para principiantes.

¿Qué es SSH?

SSH (Secure Shell) es un protocolo que permite conexiones remotas seguras a computadoras a través de una red. A diferencia de protocolos tradicionales como Telnet o FTP, SSH cifra los datos de comunicación, reduciendo significativamente el riesgo de espionaje y manipulación.

Principales casos de uso de SSH en Ubuntu

Los principales escenarios en los que se usa SSH en Ubuntu incluyen los siguientes:

  • Gestión remota de servidores : Opera servidores Ubuntu desde ubicaciones remotas
  • Transferencia de archivos : Intercambia archivos de forma segura usando SCP o SFTP
  • Reenvío de puertos : Establece conexiones remotas seguras

Lo que aprenderás en este artículo

  • Conceptos básicos y mecanismos de SSH
  • Cómo instalar un servidor SSH en Ubuntu
  • Cómo configurar conexiones SSH y resolver errores
  • Mejores prácticas de seguridad para SSH

2. Conceptos básicos de SSH

Para usar SSH de manera efectiva, es crucial entender sus conceptos principales. En este capítulo, explicamos cómo funciona SSH y las diferencias entre los métodos de autenticación.

Cómo funciona SSH

SSH es un protocolo que establece una conexión segura entre un cliente y un servidor. Por defecto, utiliza el puerto TCP 22 para la comunicación cifrada.

Características principales

  • Inicio de sesión remoto : Ejecuta comandos en un servidor
  • Transferencia de archivos : Envía datos de forma segura mediante SCP o SFTP
  • Reenvío de puertos : Conéctate a otros servicios a través de SSH

Métodos de autenticación de SSH

SSH ofrece principalmente dos métodos de autenticación:

Autenticación con contraseña

  • Inicia sesión usando un nombre de usuario y contraseña
  • Simple, pero vulnerable a ataques de fuerza bruta

Autenticación con clave pública

  • Autenticación usando un par de claves pública y privada
  • Más segura y recomendada por defecto

Ventajas de SSH

  • Comunicación cifrada : Protege los datos transmitidos
  • Gestión remota fácil : Acceso desde cualquier lugar
  • Seguridad mejorada : Ayuda a prevenir accesos no autorizados

3. Instalación de un servidor SSH en Ubuntu

Para usar SSH en Ubuntu, debes instalar el paquete del servidor OpenSSH. Este capítulo explica cómo instalarlo y configurarlo.

Instalación del servidor OpenSSH

Puedes instalar el servidor OpenSSH en Ubuntu usando los siguientes comandos:

sudo apt update
sudo apt install openssh-server

Después de la instalación, verifica que el servicio SSH esté en ejecución:

sudo systemctl status ssh

Inicio y gestión del servicio SSH

Para iniciar o detener manualmente el servicio SSH, usa los siguientes comandos:

# Start SSH
sudo systemctl start ssh

# Enable SSH to start automatically after reboot
sudo systemctl enable ssh

# Stop SSH
sudo systemctl stop ssh

Configuración de UFW (Uncomplicated Firewall)

Si UFW está habilitado, las conexiones SSH podrían bloquearse. Permite el puerto SSH (22) con los comandos a continuación:

sudo ufw allow ssh
sudo ufw enable

4. Configuración de conexiones SSH

Para usar SSH de forma segura, una configuración adecuada es esencial. Este capítulo explica cómo configurar la autenticación con clave pública.

Generación de un par de claves

Ejecuta el siguiente comando en la máquina cliente para generar un par de claves pública/privada:

ssh-keygen -t rsa -b 4096

Por defecto, la clave privada se almacena en ~/.ssh/id_rsa y la clave pública en ~/.ssh/id_rsa.pub.

Carga de la clave pública al servidor

Transfiere la clave pública generada al servidor SSH:

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

O transfiere manualmente:

scp ~/.ssh/id_rsa.pub username@server-ip-address:~/

En el servidor, ejecuta los siguientes comandos para colocar la clave pública en el directorio correcto:

mkdir -p ~/.ssh
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
rm ~/id_rsa.pub

Edición de sshd_config

Abra el archivo de configuración de SSH para mejorar la configuración de seguridad:

sudo nano /etc/ssh/sshd_config

Verifique y edite los siguientes elementos de configuración:

# Disable password authentication (use public key only)
PasswordAuthentication no

# Disable root login
PermitRootLogin no

# Change the SSH port (example: 2222)
Port 2222

Después de realizar los cambios, reinicie el servicio SSH:

sudo systemctl restart ssh

5. Ejecución de conexiones SSH

Una vez que el servidor SSH esté configurado en Ubuntu, puede conectarse desde una máquina cliente. Este capítulo explica el uso básico de SSH y los métodos de conexión cuando se cambia el puerto.

Comando básico de conexión SSH

Utilice el siguiente comando para conectarse desde un cliente SSH al servidor:

ssh username@server-ip-address

Por ejemplo, si la IP del servidor es 192.168.1.10 y el nombre de usuario es ubuntu, escriba:

ssh ubuntu@192.168.1.10

En la primera conexión, se mostrará la huella digital del servidor. Ingrese yes para aceptar y continuar.

Conexión después de cambiar el número de puerto

Si cambió el puerto SSH, por ejemplo, a 2222, utilice la opción -p:

ssh -p 2222 ubuntu@192.168.1.10

Conexión con una clave privada

Si se ha configurado la autenticación con clave pública, especifique la clave privada utilizando la opción -i:

ssh -i ~/.ssh/id_rsa ubuntu@192.168.1.10

Ejecución de comandos remotos vía SSH

Puede ejecutar comandos directamente en el servidor remoto sin iniciar sesión de manera interactiva:

ssh ubuntu@192.168.1.10 "ls -lah /home/ubuntu"

Este enfoque permite una automatización eficiente y operaciones remotas utilizando scripts.

Transferencia de archivos con SCP

Puede transferir archivos entre la PC local y el servidor remoto utilizando SSH.

Local → Remoto

scp filename username@server-ip-address:/remote/directory

Ejemplo:

scp myfile.txt ubuntu@192.168.1.10:/home/ubuntu/

Remoto → Local

scp username@server-ip-address:/remote/filename /local/directory

Ejemplo:

scp ubuntu@192.168.1.10:/home/ubuntu/myfile.txt ./

Gestión de archivos con SFTP

También puede gestionar archivos utilizando SFTP:

sftp ubuntu@192.168.1.10

Una vez conectado, puede ejecutar los siguientes comandos:

ls        # List files
cd        # Change directory
put filename   # Upload a local file to the remote server
get filename   # Download a remote file to the local machine
exit      # Exit the connection

6. Solución de problemas en conexiones SSH

No es raro encontrar problemas al conectarse vía SSH. Este capítulo describe problemas comunes y cómo resolverlos.

Causas comunes de errores en conexiones SSH y soluciones

Cuando falla una conexión SSH, la causa suele ser una de las siguientes:

1. El servidor SSH no está ejecutándose

Primero, confirme que el servidor SSH se esté ejecutando correctamente:

sudo systemctl status ssh

Solución:

  • Si el servidor SSH está detenido, inícielo utilizando el siguiente comando:
    sudo systemctl start ssh
    
  • Para habilitar que SSH se inicie automáticamente después del reinicio, ejecute:
    sudo systemctl enable ssh
    

2. El firewall (UFW) está bloqueando SSH

Si UFW (Uncomplicated Firewall) está habilitado, el acceso SSH puede estar bloqueado:

Solución:

  • Verifique la configuración actual de UFW:
    sudo ufw status
    
  • Permita el acceso SSH:
    sudo ufw allow ssh
    

(Si utiliza un puerto personalizado, ejecute sudo ufw allow <port-number>)

  • Reinicie UFW:
    sudo ufw reload
    

3. El número de puerto ha sido cambiado

Si el servidor SSH no está utilizando el puerto predeterminado 22, debe especificar el puerto correcto al conectarse:

Solución:

  • Verifique el número de puerto en el servidor:
    sudo grep Port /etc/ssh/sshd_config
    
  • Especifique el puerto correcto en el cliente:
    ssh -p 2222 username@server-ip-address
    

4. Permisos Incorrectos de la Clave SSH

Si está utilizando autenticación con clave pública, los permisos incorrectos de la clave pueden impedir la conexión.

Solución:

  • Establezca los permisos para la clave privada:
    chmod 600 ~/.ssh/id_rsa
    
  • Establezca los permisos para la clave pública:
    chmod 644 ~/.ssh/authorized_keys
    

5. Incongruencia de la Clave del Host

Si la clave del host SSH en el servidor ha cambiado, el cliente puede mostrar un error como: “¡ADVERTENCIA: LA IDENTIFICACIÓN DEL HOST REMOTO HA CAMBIADO!”

Solución:

  • Elimine la clave del host antigua:
    ssh-keygen -R <server-ip-address>
    
  • Intente conectarse nuevamente:
    ssh username@server-ip-address
    

6. Verificando los Registros SSH

Para identificar mensajes de error detallados de SSH, revise los archivos de registro del servidor:

sudo journalctl -u ssh --no-pager | tail -n 20

Para monitorear los registros en tiempo real, ejecute:

sudo tail -f /var/log/auth.log

7. Problemas de Tiempo de Espera de la Conexión SSH

Si las conexiones SSH son lentas o se desconectan inesperadamente, revise los siguientes puntos:

Solución:

  • Habilitar KeepAlive Añada lo siguiente al archivo ~/.ssh/config del cliente:
    Host *
        ServerAliveInterval 60
    
  • Ajustar la configuración de tiempo de espera en el servidor Añada lo siguiente a /etc/ssh/sshd_config y reinicie el servicio:
    ClientAliveInterval 60
    ClientAliveCountMax 3
    
    sudo systemctl restart ssh
    

Resumen

Los problemas de conexión SSH suelen originarse en los siguientes puntos. En la mayoría de los casos, revisar estos elementos resuelve el problema:

Verifique que el servicio SSH esté en ejecución
Compruebe si el firewall está bloqueando la conexión
Confirme que se está utilizando el puerto SSH correcto
Asegúrese de que los permisos de la clave SSH estén configurados correctamente
Revise los registros SSH para identificar errores detallados

7. Mejorando la Seguridad de SSH

SSH es una herramienta poderosa de acceso remoto, pero sin medidas de seguridad adecuadas, puede convertirse en un objetivo para accesos no autorizados o ataques de fuerza bruta. Este capítulo explica configuraciones recomendadas para reforzar la seguridad de SSH.

1. Desactivar la Autenticación por Contraseña y Usar Autenticación con Clave Pública

Por defecto, SSH permite el inicio de sesión con contraseña, lo que incrementa el riesgo de ataques de fuerza bruta. Habilite la autenticación con clave pública y desactive la autenticación por contraseña para mejorar la seguridad.

Pasos

  1. Edite sshd_config
    sudo nano /etc/ssh/sshd_config
    
  1. Edite o añada las siguientes configuraciones
    PasswordAuthentication no
    PubkeyAuthentication yes
    
  1. Reinicie el servicio SSH
    sudo systemctl restart ssh
    

Después de aplicar esta configuración, SSH solo aceptará autenticación con clave pública. Asegúrese de que sus claves SSH estén configuradas correctamente de antemano.

2. Cambiar el Número de Puerto SSH

Usar el puerto SSH predeterminado (22) hace que los servidores sean objetivos más fáciles para los atacantes. Cambiar el número de puerto ayuda a reducir los intentos de acceso no autorizado.

Pasos

  1. Abra sshd_config
    sudo nano /etc/ssh/sshd_config
    
  1. Modifique la siguiente línea (ejemplo: cambie el puerto a 2222)
    Port 2222
    
  1. Permita el nuevo puerto a través del firewall
    sudo ufw allow 2222/tcp
    
  1. Reinicie el servicio SSH
    sudo systemctl restart ssh
    
  1. Pruebe la conexión usando el nuevo puerto
    ssh -p 2222 username@server-ip-address
    

3. Desactivar el Acceso Root

Por defecto, SSH permite el acceso root, lo que representa un riesgo de seguridad serio. Se recomienda permitir el acceso SSH solo a través de cuentas de usuario normales y usar sudo cuando se requieran privilegios administrativos.

Pasos

  1. Abra sshd_config
    sudo nano /etc/ssh/sshd_config
    
  1. Edite la siguiente línea
    PermitRootLogin no
    
  1. Reinicie el servicio SSH
    sudo systemctl restart ssh
    

4. Prevenir Ataques de Fuerza Bruta con Fail2Ban

Fail2Ban detecta intentos de inicio de sesión no autorizados y bloquea automáticamente las direcciones IP que superan un número determinado de fallos.

Instalación y Configuración

  1. Instale Fail2Ban

.«` sudo apt install fail2ban -y

2. Copiar el archivo de configuración predeterminado

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

3. Editar `jail.local`

sudo nano /etc/fail2ban/jail.local

4. Modificar la sección `[sshd]`
[sshd] enabled = true maxretry = 5 bantime = 600 findtime = 600

* `maxretry` : Número de intentos fallidos de inicio de sesión permitidos
* `bantime` : Duración del bloqueo de IP (segundos)
* `findtime` : Ventana de tiempo para contar intentos fallidos (segundos)

1. Reiniciar Fail2Ban

sudo systemctl restart fail2ban

6. Verificar el estado actual de Fail2Ban

sudo fail2ban-client status sshd

### Resumen

Para mejorar la seguridad de SSH, aplique las siguientes medidas:

✅ **Desactivar la autenticación por contraseña y usar autenticación con clave pública**  
✅ **Cambiar el puerto de SSH para reducir la exposición a ataques**  
✅ **Desactivar el inicio de sesión como root para minimizar riesgos**  
✅ **Utilizar Fail2Ban para prevenir ataques de fuerza bruta**

## 8. Preguntas Frecuentes (FAQ)

Esta sección aborda preguntas comunes y problemas que surgen al configurar y usar SSH.

### Q1: ¿Por qué SSH muestra “Connection refused”?

Hay varias causas posibles para que una conexión SSH sea rechazada.

**Causas principales y soluciones:**

1. **El servicio SSH no está en ejecución**

sudo systemctl status ssh

**Solución:** Inicie el servicio si está detenido.

sudo systemctl start ssh

2. **El firewall (UFW) está bloqueando SSH**

sudo ufw allow ssh sudo ufw enable

3. **El número de puerto SSH ha sido cambiado**  Si SSH usa un puerto personalizado, especifíquelo al conectarse.

ssh -p 2222 username@server-ip-address

### Q2: ¿Cómo cambio el puerto SSH predeterminado?

El puerto 22 es un objetivo frecuente de ataques, por lo que cambiarlo mejora la seguridad.

**Pasos:**

1. Editar el archivo de configuración de SSH

sudo nano /etc/ssh/sshd_config

2. Modificar la directiva `Port`

Port 2222

3. Permitir el nuevo puerto a través del firewall

sudo ufw allow 2222/tcp

4. Reiniciar el servicio SSH

sudo systemctl restart ssh

Después de realizar estos cambios, conéctese usando el nuevo puerto:

ssh -p 2222 username@server-ip-address

### Q3: ¿Qué debo verificar si la autenticación con clave pública no funciona?

Verifique lo siguiente si la autenticación con clave SSH falla:

1. **Asegúrese de que la clave pública esté instalada correctamente**

ls -l ~/.ssh/authorized_keys

Asegúrese de que `authorized_keys` exista y contenga la clave correcta.

2. **Comprobar los permisos de los archivos**

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

3. **Verificar que SSH permita la autenticación con clave pública**

sudo nano /etc/ssh/sshd_config

Asegúrese de que las siguientes entradas estén presentes:

PubkeyAuthentication yes PasswordAuthentication no

4. **Reiniciar el servicio SSH**

sudo systemctl restart ssh

### Q4: ¿Cómo permito el acceso SSH solo desde direcciones IP específicas?

Restringir el acceso SSH a direcciones IP específicas aumenta significativamente la seguridad.

**Método 1: Editar `sshd_config`**

1. Abrir el archivo de configuración

sudo nano /etc/ssh/sshd_config

2. Añadir una entrada `AllowUsers`

AllowUsers username@192.168.1.100

3. Reiniciar el servicio SSH

sudo systemctl restart ssh

**Método 2: Configurar el firewall (UFW)**

1. Permitir acceso desde una IP específica

sudo ufw allow from 192.168.1.100 to any port 22

2. Denegar acceso a los demás

sudo ufw deny 22

### Q5: ¿Cómo puedo cambiar el tiempo de espera de la sesión SSH?

Si su sesión SSH se desconecta después de estar inactiva, modifique los siguientes ajustes.

**Configuración del cliente**

1. Añada lo siguiente a `~/.ssh/config` :

Host * ServerAliveInterval 60

**Configuración del servidor**

1. Editar `sshd_config`

sudo nano /etc/ssh/sshd_config

2. Añadir o modificar:

ClientAliveInterval 60 ClientAliveCountMax 3

3. Reiniciar el servicio SSH

sudo systemctl restart ssh «`

Resumen

Esta FAQ cubre los problemas y soluciones más comunes de SSH. Cuando ocurre un problema, siempre revise los registros y la configuración para identificar la causa.

Cómo resolver problemas de “Connection refused”
Cómo cambiar el puerto SSH predeterminado y conectarse correctamente
Cómo solucionar fallos de autenticación con clave pública
Cómo restringir el acceso SSH a direcciones IP específicas
Cómo evitar que las sesiones SSH expiren

9. Conclusión

Este artículo explicó cómo configurar y usar SSH en Ubuntu, desde conceptos básicos hasta prácticas de seguridad avanzadas. Repasemos los puntos clave.

Puntos clave

1. Conceptos básicos de SSH

  • SSH permite acceso remoto seguro mediante comunicación cifrada.
  • Más seguro que Telnet o FTP.
  • Los métodos de autenticación incluyen autenticación por contraseña y autenticación con clave pública.

2. Instalación del servidor SSH

  • Instale OpenSSH mediante sudo apt install openssh-server.
  • Verifique el estado del servicio con systemctl status ssh.
  • Permita el acceso SSH a través de UFW usando sudo ufw allow ssh.

3. Configuración del acceso SSH

  • Conéctese con ssh username@server-ip-address.
  • Utilice la autenticación con clave pública para mayor seguridad.
  • Desactive la autenticación por contraseña en sshd_config si lo desea.

4. Solución de problemas

  • Compruebe si SSH está en ejecución (systemctl status ssh).
  • Especifique el puerto correcto si se cambió (ssh -p 2222 username@IP).
  • Verifique los permisos de la clave en ~/.ssh/authorized_keys.

5. Mejoras de seguridad

  • Desactive la autenticación por contraseña y confíe en claves públicas.
  • Cambie el puerto SSH para reducir los ataques de escaneo.
  • Use Fail2Ban para bloquear intentos de inicio de sesión repetidos.
  • Restrinja el acceso SSH a direcciones IP específicas cuando sea posible.

Recursos de aprendizaje adicionales

Para profundizar su comprensión de SSH, explore los siguientes recursos:

📚 Documentación oficial

🛠 Herramientas relacionadas

🎥 Videos recomendados

  • Busca en YouTube “Ubuntu SSH setup” para encontrar tutoriales para principiantes.

作成した動画を友だち、家族、世界中の人たちと共有…

Próximos pasos

Una vez que comprenda cómo funciona SSH, explore usos más avanzados:

Automatizar la gestión de servidores usando Ansible sobre SSH

  • Ideal para gestionar varios servidores de manera eficiente.

Túneles SSH y reenvío de puertos

  • Use SSH para asegurar conexiones de escritorio remoto o crear túneles tipo VPN.

Monitorear los registros SSH y mejorar la seguridad

  • Use herramientas como fail2ban y logwatch para vigilar actividades sospechosas.

Reflexiones finales

¡Gracias por leer esta guía hasta el final! 🎉
Configurar correctamente SSH en Ubuntu mejora enormemente la eficiencia y la seguridad de la gestión remota.

A medida que continúe aprendiendo, explore técnicas avanzadas como túneles seguros y monitoreo proactivo para crear sistemas aún más robustos.

¡Disfrute de una experiencia SSH segura y productiva! 🖥️🔐

侍エンジニア塾