15%

Ahorra 15%<\/span> en todos los servicios de hosting

Pon a prueba tus habilidades y obtén Descuento<\/span> en cualquier plan de hosting

Usa el código:

Skills
Comenzar
30.10.2024
2 +1

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 -y

Ahora instala el paquete del servidor OpenSSH:

sudo apt install openssh-server -y

El 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 ssh

Deberí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 ssh

Paso 2: Comprende el archivo de configuración SSH

El archivo de configuración principal del daemon SSH se encuentra en:

/etc/ssh/sshd_config

Este 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.bak

Ahora abre el archivo con un editor de texto:

sudo nano /etc/ssh/sshd_config

Las 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 22

Descomé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 no

Si 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_user

Alternativamente, puedes restringir el acceso por grupo:

AllowGroups sshusers

3.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 no

3.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 inet

La 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 2

Paso 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 -t

Si no se devuelven errores, aplica los cambios reiniciando el daemon SSH:

sudo systemctl restart ssh

Verifica 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 reload

Si mantuviste el puerto predeterminado 22:

sudo ufw allow ssh
sudo ufw reload

Verifica el estado actual del firewall:

sudo ufw status verbose

Si UFW aún no está habilitado, actívalo (asegúrate de que tu puerto SSH esté permitido primero para evitar bloqueos):

sudo ufw enable

Paso 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_ip

Este 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_keys

6.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_ip

Se 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 no

Reinicia SSH para aplicar:

sudo systemctl restart ssh

Paso 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 -20

Instala 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 fail2ban

Crea una configuración de jail local para SSH:

sudo nano /etc/fail2ban/jail.local

Agrega lo siguiente:

[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 3600
findtime = 600

Reinicia Fail2Ban para aplicar:

sudo systemctl restart fail2ban

Mantén OpenSSH actualizado

Actualiza regularmente OpenSSH para parchear vulnerabilidades conocidas:

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

Conexión a tu servidor SSH: Referencia rápida

EscenarioComando
Puerto predeterminado (22)ssh username@your_server_ip
Puerto personalizadossh -p 2222 username@your_server_ip
Archivo de identidad específicossh -i ~/.ssh/id_ed25519 username@your_server_ip
Salida detallada (depuración)ssh -v username@your_server_ip
Copiar archivos vía SSHscp -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.

15%

Ahorra 15%<\/span> en todos los servicios de hosting

Pon a prueba tus habilidades y obtén Descuento<\/span> en cualquier plan de hosting

Usa el código:

Skills
Comenzar