Seguridad SSH · 5 min read · Dec 28, 2025
Guía de Fortalecimiento de Seguridad de OpenSSH para Linux

SSH es uno de los protocolos más utilizados para la administración de sistemas en plataformas Linux. Está disponible para muchos sistemas operativos basados en Unix, Linux y MacOS. Se basa en el modelo cliente-servidor, donde una máquina ejecuta el componente del servidor y la otra utiliza una herramienta cliente para acceder a él.
¿Cómo funciona SSH?
El cliente (ssh) inicia la conexión enviando una solicitud al servidor. El servidor escucha las solicitudes entrantes utilizando el demonio del servidor (sshd). Utiliza su clave pública para autenticarse ante el cliente que intenta conectarse:
De esta manera, el cliente se asegura de que se está conectando al servidor SSH correcto. Cuando esto se hace, el cliente puede acceder al servidor. Si estás en un cliente Windows, tendrás que usar herramientas como putty para conectarte al servidor. Tanto el cliente como el servidor pueden estar instalados en el mismo sistema, lo que significa que puedes usar la herramienta cliente para acceder a otras máquinas o tu sistema puede ser el servidor mismo al que otros pueden acceder. En tal caso, el archivo de configuración se coloca en el mismo directorio pero con un nombre ligeramente diferente. La ubicación del directorio es ‘/etc/ssh’ y el nombre del archivo de configuración del cliente ssh es ‘ssh_config’ y el del archivo de configuración del servidor es ‘sshd_config’:

En caso de que tengas ambos archivos en tu sistema, deberías elegir sabiamente cuál archivo necesitas configurar. En la mayoría de los casos, es el servidor el que necesitamos configurar para la seguridad, ya que abre la puerta a un acceso potencial al sistema.
Primero comenzamos verificando el estado del demonio SSH o sshd en nuestro servidor. De esta manera podemos ver si está en ejecución y habilitado para iniciarse automáticamente al arrancar. El siguiente comando verificará el estado de sshd:
$ systemctl status ssh.service
O usa el siguiente:
$ systemctl status sshd.service

En la captura de pantalla podemos ver que el servicio está activo y habilitado. Ha estado en funcionamiento durante las últimas 6 horas. Cuando expandes la vista del terminal presionando la flecha derecha, notarás que está escuchando en el puerto predeterminado 22.
A veces hacemos cambios en el archivo de configuración SSH del sistema remoto mientras estamos conectados a él usando el propio SSH. En tal caso, deberíamos usar el comando de recarga en lugar del de reinicio. De esta manera es menos probable que nos desconectemos.
Configurando SSH utilizando las Mejores Prácticas
Creo que ahora es el momento de comenzar a configurar la configuración del servidor SSH. Antes de ensuciarnos las manos con el archivo de configuración SSH, deberíamos hacer una copia de seguridad del archivo con la configuración predeterminada:
$ sudo cp /etc/ssh/sshd_config ~/sshd_config.bkp
Después de realizar la copia de seguridad, estamos seguros de que si cometemos un error con el archivo principal y rompemos nuestro SSH, podemos usar el archivo de copia de seguridad para volver a la normalidad.
1. Cambiando el Puerto Predeterminado
El demonio sshd por defecto escucha en el puerto 22 del servidor. Se recomienda cambiar este valor a otro número de manera que se reduzca el alcance de los ataques automatizados utilizando scripts. Este enfoque se llama seguridad a través de la oscuridad. Para esto, abre el siguiente archivo y busca la línea que contiene el texto ‘#Port 22’.
$ sudo nano /etc/ssh/sshd_config
Descomenta la línea ‘#Port 22’ y cambia ‘22’ a otro número de puerto, que no esté en uso en tu sistema. Debemos cambiarlo a ‘222’ y reiniciar el servicio. Ahora usa el comando ssh con la opción ‘p’ para especificar el nuevo puerto:
$ ssh user@system_ip -p 222
2. Deshabilitando el inicio de sesión como usuario Root
Root es el usuario supremo en cualquier sistema Linux con acceso a todos los recursos de tu sistema. En caso de que no requieras un acceso root estricto, deberías deshabilitar la facilidad de inicio de sesión root en tu servidor. Para esto, abre el mismo archivo anterior:
$ sudo nano /etc/ssh/sshd_config
y establece el parámetro ‘PermitRootLogin’ en ‘no’. Esto asegurará que el servidor esté protegido de los ataques aleatorios que apuntan a la cuenta root. La opción predeterminada es ‘prohibit-password’ que permite el inicio de sesión basado en autenticación de clave pública pero niega los inicios de sesión basados en contraseña.
3. Estableciendo la Versión del Protocolo
La versión de protocolo más antigua de SSH es 1 y es menos segura en comparación con SSH2 y tienen diferentes implementaciones de red y tampoco son compatibles entre sí. Para verificar qué versión de protocolo está activa en tu servidor, abre el archivo sshd_config nuevamente y busca la línea ‘Protocol’:
$ cat /etc/ssh/sshd_config | grep ‘Protocol’
En caso de que tengas una salida vacía, OpenSSH probablemente esté utilizando la versión 2, ya que así fue en nuestro caso. Otra forma es usar la utilidad de comando netcat:
$ nc localhost 22
Salida de Ejemplo:
SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.4
De la salida podemos ver que SSH2 está activo en nuestro sistema.
Para verificar qué versión de protocolos está ejecutando un servidor remoto, intenta conectarte a él usando un cliente ssh con la opción -Q (consulta):
$ ssh -Q protocol-version user@server_name

La imagen anterior muestra una versión SSH 2 mientras se accede a un servidor ssh de Ubuntu desde un Kali Linux.
4. Complejidad de la Contraseña
Las contraseñas débiles siempre son vulnerables a ser explotadas, por lo que las contraseñas vacías son más propensas a ser explotadas. Por lo tanto, la opción PermitEmptyPasswords debe establecerse en ‘no’ en el archivo sshd_config. De la misma manera, el número de intentos de inicio de sesión con contraseña incorrecta debe limitarse para reducir las posibilidades de un ataque de fuerza bruta. Esto se puede lograr con la opción ‘MaxAuthTries’ establecida en un valor más pequeño como 3.

De la imagen anterior podemos ver que cuando establecemos el valor de ‘MaxAuthTries’ en 3, se nos niega el acceso a SSH después de tres contraseñas incorrectas. Otro aspecto importante de seguridad es usar la autenticación de clave pública para el inicio de sesión. Los modelos de autenticación basados en clave son menos vulnerables a ataques de fuerza bruta. De manera similar, podemos usar el módulo de autenticación PAM para fortalecer aún más el servidor SSH.
Conclusión
En esta guía, hemos tratado de cubrir los puntos más importantes para asegurar un servidor SSH y resumirlos en cuatro puntos principales. Aunque esta guía no es completa, puedes encontrar más áreas para fortalecer aún más tu servidor SSH. Por ejemplo, puedes intentar agregar un mensaje de banner para alertar a los usuarios sobre el uso de tu sistema a través de SSH. También puedes negar el inicio de sesión con una contraseña y usar autenticación basada en clave para un inicio de sesión sin contraseña. Otra cosa interesante es que puedes limitar el número de usuarios SSH y su tiempo de conexión.
Recibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.