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:

  • En Debian/Ubuntu se usa systemctl restart ssh.
  • En CentOS/RHEL/Rocky se usa systemctl restart sshd.

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

  • Asegúrate de tener otro usuario con acceso SSH y permisos sudo antes de ejecutar este script.
  • Si el servidor está en producción, realiza una prueba en entorno de desarrollo o máquina virtual primero.
  • Verifica el acceso remoto con el nuevo usuario antes de cerrar sesión.

Compartir:

Binario 0
Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.