Cómo Instalar y Configurar un Servidor SSH en Debian (Guía Completa)
SSH (Secure Shell) es uno de los protocolos más fundamentales en la administración moderna de servidores. Proporciona un canal cifrado y autenticado para acceder y gestionar remotamente servidores Linux, convirtiéndolo en una herramienta indispensable para administradores de sistemas, desarrolladores y cualquier persona que gestione una máquina remota. Ya sea que estés administrando un entorno de VPS Hosting o un Servidor Dedicado, instalar y reforzar correctamente tu servidor SSH es una de las primeras tareas que debes completar.
En esta guía completa, aprenderás cómo instalar OpenSSH en Debian, configurarlo de forma segura, configurar la autenticación basada en claves y aplicar medidas de refuerzo de mejores prácticas para proteger tu servidor contra accesos no autorizados.
Requisitos previos
Antes de comenzar, asegúrate de tener:
- Un servidor basado en Debian (Debian 10 Buster, 11 Bullseye o 12 Bookworm)
- Un usuario no root con privilegios
sudo, o acceso root directo para la configuración inicial - Familiaridad básica con la línea de comandos de Linux
- Acceso de red a tu servidor
Paso 1: Actualiza tu sistema e instala el servidor OpenSSH
Antes de instalar cualquier software, es una buena práctica actualizar el índice de paquetes y actualizar los paquetes existentes a sus últimas versiones. Esto garantiza la compatibilidad y reduce las vulnerabilidades de seguridad.
sudo apt update && sudo apt upgrade -yAhora instala el paquete del servidor OpenSSH:
sudo apt install openssh-server -yEl gestor de paquetes descargará e instalará OpenSSH junto con las dependencias necesarias. Una vez completada la instalación, el servicio SSH normalmente se inicia automáticamente.
Verifica que el servicio SSH esté en ejecución
Confirma que el servicio ssh está activo y habilitado:
sudo systemctl status sshDeberías ver una salida similar a:
● ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: active (running) since ...Si el servicio no está en ejecución, inícialo manualmente y habilítalo para que se lance al arrancar:
sudo systemctl start ssh
sudo systemctl enable sshPaso 2: Comprende el archivo de configuración SSH
El archivo de configuración principal del daemon SSH se encuentra en:
/etc/ssh/sshd_configEste archivo controla prácticamente todos los aspectos del comportamiento de tu servidor SSH — desde el puerto en el que escucha, hasta los métodos de autenticación permitidos. Antes de realizar cualquier cambio, crea una copia de seguridad del archivo original:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bakAhora abre el archivo con un editor de texto:
sudo nano /etc/ssh/sshd_configLas secciones a continuación te guían a través de las opciones de configuración más importantes.
Paso 3: Refuerza tu configuración SSH
3.1 Cambia el puerto SSH predeterminado (Recomendado)
De forma predeterminada, SSH escucha en el puerto 22. Esto es ampliamente conocido, y los bots automatizados escanean constantemente internet en busca de conexiones abiertas en el puerto 22 para intentar ataques de fuerza bruta. Cambiar el puerto a un valor no estándar reduce significativamente este ruido.
Localiza la siguiente línea (puede estar comentada con #):
#Port 22Descoméntala y cambia el valor:
Port 2222> Nota: Elige un número de puerto entre 1024 y 65535 que no esté ya en uso por otro servicio. Las alternativas comunes incluyen 2222, 2200 o 4422. Recuerda actualizar las reglas de tu firewall en consecuencia (ver Paso 5).
3.2 Deshabilita el inicio de sesión root (Muy recomendado)
Permitir el inicio de sesión root directo a través de SSH es un riesgo de seguridad significativo. Si un atacante adivina o fuerza la contraseña root, obtiene control total de tu servidor. Deshabilítalo encontrando y modificando esta directiva:
PermitRootLogin noSi necesitas realizar tareas administrativas, inicia sesión como usuario regular y escala privilegios usando sudo.
3.3 Restringe el acceso SSH a usuarios específicos
Puedes incluir en una lista blanca cuentas de usuario específicas que tienen permitido iniciar sesión a través de SSH. Esto evita que cuentas no autorizadas o del sistema sean utilizadas como puntos de entrada:
AllowUsers your_username deploy_userAlternativamente, puedes restringir el acceso por grupo:
AllowGroups sshusers3.4 Deshabilita la autenticación por contraseña (Después de configurar la autenticación por clave)
Una vez que tengas funcionando la autenticación por clave SSH (ver Paso 6), deshabilita los inicios de sesión basados en contraseña por completo para eliminar los vectores de ataque de fuerza bruta:
PasswordAuthentication no3.5 Directivas adicionales de refuerzo
Agrega o modifica las siguientes líneas para una postura de seguridad más robusta:
# Disable empty passwords
PermitEmptyPasswords no
# Limit authentication attempts per connection
MaxAuthTries 3
# Set idle session timeout (seconds)
ClientAliveInterval 300
ClientAliveCountMax 2
# Disable X11 forwarding if not needed
X11Forwarding no
# Use only SSH Protocol 2
Protocol 2
# Restrict to specific address family (IPv4 only example)
AddressFamily inetLa sección relevante final de /etc/ssh/sshd_config debería verse algo así:
Port 2222
PermitRootLogin no
MaxAuthTries 3
PasswordAuthentication no
PermitEmptyPasswords no
AllowUsers your_username
X11Forwarding no
ClientAliveInterval 300
ClientAliveCountMax 2Paso 4: Valida la configuración y reinicia SSH
Antes de reiniciar el servicio, siempre prueba tu archivo de configuración en busca de errores de sintaxis. Un sshd_config mal configurado puede bloquearte el acceso a tu servidor:
sudo sshd -tSi no se devuelven errores, aplica los cambios reiniciando el daemon SSH:
sudo systemctl restart sshVerifica que el servicio se reinició correctamente:
sudo systemctl status ssh> ⚠️ Importante: Antes de cerrar tu sesión SSH actual, abre una segunda ventana de terminal y prueba la nueva configuración. De esta manera, si algo sale mal, todavía tienes una sesión activa para solucionar el problema.
Paso 5: Actualiza las reglas del firewall
Si estás usando UFW (Uncomplicated Firewall) — la herramienta de firewall predeterminada en Debian — necesitas permitir el tráfico en tu nuevo puerto SSH.
Si cambiaste el puerto a 2222:
sudo ufw allow 2222/tcp
sudo ufw reloadSi mantuviste el puerto predeterminado 22:
sudo ufw allow ssh
sudo ufw reloadVerifica el estado actual del firewall:
sudo ufw status verboseSi UFW aún no está habilitado, actívalo (asegúrate de que tu puerto SSH esté permitido primero para evitar bloqueos):
sudo ufw enablePaso 6: Configura la autenticación SSH basada en claves
La autenticación por clave SSH es mucho más segura que el inicio de sesión basado en contraseña. Utiliza criptografía asimétrica — un par de claves que consiste en una clave privada (mantenida en secreto en tu máquina cliente) y una clave pública (almacenada en el servidor). Incluso si un atacante conoce tu nombre de usuario, no puede iniciar sesión sin la clave privada.
6.1 Genera un par de claves SSH en tu máquina cliente
Ejecuta el siguiente comando en tu máquina local (no en el servidor):
ssh-keygen -t ed25519 -C "your_email@example.com"> ¿Por qué Ed25519? Ed25519 es un algoritmo moderno de curva elíptica que ofrece mejor seguridad y rendimiento en comparación con el algoritmo RSA más antiguo. Si tu sistema no lo soporta, usa RSA con una clave de 4096 bits: ssh-keygen -t rsa -b 4096
Cuando se te solicite, elige una ubicación de guardado (el valor predeterminado es ~/.ssh/id_ed25519) y establece una frase de contraseña segura para una capa adicional de protección.
6.2 Copia la clave pública a tu servidor
Usa ssh-copy-id para transferir de forma segura tu clave pública al servidor:
ssh-copy-id -p 2222 username@your_server_ipEste comando agrega tu clave pública a ~/.ssh/authorized_keys en el servidor con los permisos correctos.
Si ssh-copy-id no está disponible, puedes hacerlo manualmente:
# On your local machine, display your public key:
cat ~/.ssh/id_ed25519.pub
# On the server, add it to authorized_keys:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "your_public_key_here" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys6.3 Prueba el inicio de sesión basado en clave
Desde tu máquina cliente, conéctate al servidor:
ssh -p 2222 username@your_server_ipSe te pedirá la frase de contraseña de tu clave (no la contraseña de tu cuenta). Una vez confirmada, habrás iniciado sesión de forma segura.
6.4 Deshabilita la autenticación por contraseña
Ahora que la autenticación por clave está funcionando, vuelve a /etc/ssh/sshd_config y asegúrate de:
PasswordAuthentication noReinicia SSH para aplicar:
sudo systemctl restart sshPaso 7: Monitorea y mantén la seguridad SSH
Instalar y configurar SSH no es una tarea única. El monitoreo continuo es esencial para detectar intentos de intrusión y mantener un entorno seguro.
Verifica los intentos de inicio de sesión fallidos
sudo journalctl -u ssh | grep "Failed password"O usando lastb para ver los intentos de inicio de sesión fallidos:
sudo lastb | head -20Instala Fail2Ban para bloquear ataques de fuerza bruta
Fail2Ban monitorea los archivos de registro y bloquea automáticamente las direcciones IP que muestran comportamiento malicioso (como intentos repetidos de inicio de sesión fallidos):
sudo apt install fail2ban -y
sudo systemctl enable fail2ban
sudo systemctl start fail2banCrea una configuración de jail local para SSH:
sudo nano /etc/fail2ban/jail.localAgrega lo siguiente:
[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 3600
findtime = 600Reinicia Fail2Ban para aplicar:
sudo systemctl restart fail2banMantén OpenSSH actualizado
Actualiza regularmente OpenSSH para parchear vulnerabilidades conocidas:
sudo apt update && sudo apt upgrade openssh-server -yConexión a tu servidor SSH: Referencia rápida
| Escenario | Comando |
|---|---|
| Puerto predeterminado (22) | ssh username@your_server_ip |
| Puerto personalizado | ssh -p 2222 username@your_server_ip |
| Archivo de identidad específico | ssh -i ~/.ssh/id_ed25519 username@your_server_ip |
| Salida detallada (depuración) | ssh -v username@your_server_ip |
| Copiar archivos vía SSH | scp -P 2222 file.txt username@your_server_ip:/path/ |
Elegir el entorno de hosting adecuado para SSH
Los pasos de esta guía se aplican a cualquier servidor basado en Debian, pero el tipo de hosting que uses afecta cómo accedes y gestionas tu entorno:
- VPS Hosting: Un VPS con cPanel u otros Paneles de Control VPS te brinda acceso SSH root completo junto con una interfaz de gestión gráfica — ideal para usuarios que desean tanto potencia como comodidad.
- Servidores Dedicados: Con un Servidor Dedicado, tienes control completo a nivel de hardware, lo que hace que la configuración SSH sea aún más crítica ya que eres el único responsable de la seguridad de la máquina.
- Hosting Compartido: Los planes de Hosting Web Compartido típicamente proporcionan acceso SSH limitado o nulo, ya que el entorno es compartido entre múltiples usuarios. Si SSH es un requisito, actualizar a un VPS es el camino recomendado.
Conclusión
Instalar y configurar un servidor SSH en Debian es una habilidad fundamental para cualquier administrador de sistemas o desarrollador que trabaje con servidores Linux remotos. Siguiendo esta guía, has:
- ✅ Instalado el servidor OpenSSH en Debian
- ✅ Reforzado la configuración SSH cambiando el puerto predeterminado, deshabilitando el inicio de sesión root y restringiendo el acceso de usuarios
- ✅ Configurado la autenticación SSH basada en claves para inicios de sesión seguros sin contraseña
- ✅ Configurado las reglas del firewall para proteger tu puerto SSH
- ✅ Implementado Fail2Ban para defenderte contra ataques de fuerza bruta
- ✅ Establecido una rutina de monitoreo y mantenimiento
Un servidor SSH correctamente asegurado reduce drásticamente tu superficie de ataque y te proporciona una puerta de enlace cifrada y confiable para gestionar tu infraestructura de forma remota. Ya sea que estés comenzando con tu primer servidor o reforzando un entorno de producción, estas prácticas son bloques de construcción esenciales de un sistema Linux seguro.
