Icono del sitio Binario 0

Cómo Deshabilitar el Acceso SSH del Usuario Root en Linux mediante Script Bash

Artículos Guías Manuales Sistemas Linux Windows Redes MySql Binario 0 Binario Cero

Artículos Guías Manuales Sistemas Linux Windows Redes MySql Binario 0 Binario Cero

En entornos de producción, deshabilitar el acceso remoto del usuario root es una práctica recomendada para reforzar la seguridad del sistema. Limitar este acceso previene intentos de fuerza bruta sobre la cuenta más privilegiada del sistema, obligando a los administradores a autenticarse con usuarios con menos privilegios y escalar posteriormente si es necesario mediante sudo.

En este artículo veremos un script Bash que automatiza este proceso para distintas distribuciones Linux, haciendo una copia de seguridad del archivo de configuración y aplicando los cambios necesarios según el sistema.

El Script

#!/bin/bash

# Detectar distribución
if [ -f /etc/os-release ]; then
. /etc/os-release
DISTRO=$ID
else
echo "No se puede detectar la distribución."
exit 1
fi

# Archivo de configuración SSH
SSHD_CONFIG="/etc/ssh/sshd_config"

# Crear copia de seguridad
cp "$SSHD_CONFIG" "${SSHD_CONFIG}.bak_$(date +%F_%T)"

# Deshabilitar root login por cualquier método
sed -i '/^#*PermitRootLogin/s/.*/PermitRootLogin no/' "$SSHD_CONFIG"

# Reiniciar SSH según la distribución
if [[ "$DISTRO" == "debian" || "$DISTRO" == "ubuntu" ]]; then
systemctl restart ssh
elif [[ "$DISTRO" == "centos" || "$DISTRO" == "rhel" || "$DISTRO" == "rocky" ]]; then
systemctl restart sshd
else
echo "Distribución no soportada: $DISTRO"
exit 1
fi

echo "Acceso root deshabilitado en SSH (por contraseña y clave pública)."

Explicación del Script

1. Detección de la distribución

El script utiliza /etc/os-release para obtener el identificador del sistema operativo. Esto permite determinar si el sistema es Debian, Ubuntu, CentOS, RHEL o Rocky Linux, y aplicar el reinicio adecuado del servicio SSH.

. /etc/os-release
DISTRO=$ID

2. Copia de seguridad del archivo de configuración

Antes de modificar /etc/ssh/sshd_config, el script realiza una copia de seguridad con fecha y hora en el mismo directorio. Esto permite restaurar la configuración original si ocurre algún error.

cp "$SSHD_CONFIG" "${SSHD_CONFIG}.bak_$(date +%F_%T)"

3. Modificación segura del archivo

Se usa sed para buscar la línea PermitRootLogin (comentada o no) y reemplazarla por PermitRootLogin no, lo cual bloquea el acceso del usuario root tanto por contraseña como por clave pública.

sed -i '/^#*PermitRootLogin/s/.*/PermitRootLogin no/' "$SSHD_CONFIG"

4. Reinicio del servicio SSH

El script determina el nombre del servicio SSH dependiendo de la distribución:

Esto aplica los cambios de configuración sin necesidad de reiniciar el sistema.

Resultado

Una vez ejecutado el script, cualquier intento de conexión SSH con el usuario root fallará, tanto si se intenta usar contraseña como clave pública:

ssh root@servidor
# Access denied

Recomendaciones adicionales

Salir de la versión móvil