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

- Link: https://binariocero.com/linux/como-deshabilitar-el-acceso-ssh-del-usuario-root-en-linux-mediante-script-bash
- Published: 2025-08-03T09:43:33+02:00
- Author: Juan José Fernández Durán

![Loading](https://binariocero.com/wp-content/plugins/page-views-count/ajax-loader-
2x.gif)

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

    ```wp-block-preformatted
    #!/bin/bash# Detectar distribuciónif [ -f /etc/os-release ]; then    . /etc/os-release    DISTRO=$IDelse    echo "No se puede detectar la distribución."    exit 1fi# Archivo de configuración SSHSSHD_CONFIG="/etc/ssh/sshd_config"# Crear copia de seguridadcp "$SSHD_CONFIG" "${SSHD_CONFIG}.bak_$(date +%F_%T)"# Deshabilitar root login por cualquier métodosed -i '/^#*PermitRootLogin/s/.*/PermitRootLogin no/' "$SSHD_CONFIG"# Reiniciar SSH según la distribuciónif [[ "$DISTRO" == "debian" || "$DISTRO" == "ubuntu" ]]; then    systemctl restart sshelif [[ "$DISTRO" == "centos" || "$DISTRO" == "rhel" || "$DISTRO" == "rocky" ]]; then    systemctl restart sshdelse    echo "Distribución no soportada: $DISTRO"    exit 1fiecho "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.

    ```wp-block-preformatted
    . /etc/os-releaseDISTRO=$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.

    ```wp-block-preformatted
    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.

    ```wp-block-preformatted
    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:

    ```wp-block-preformatted
    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.
