# Deshabilitar el Acceso SSH del Usuario Root y la Autenticación por Clave Pública en Linux

- Link: https://binariocero.com/linux/deshabilitar-el-acceso-ssh-del-usuario-root-y-la-autenticacion-por-clave-publica-en-linux
- Published: 2025-08-02T10:03:04+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 o sistemas expuestos a redes públicas, una de las principales
medidas de endurecimiento de la seguridad (hardening) consiste en **deshabilitar
el acceso directo del usuario `root` por SSH**, así como la **autenticación mediante
claves públicas para todos los usuarios**. Esto reduce significativamente el riesgo
de ataques automatizados o accesos no autorizados a cuentas privilegiadas.

### Objetivo

Este artículo describe cómo aplicar estas configuraciones de forma automatizada 
en sistemas basados en Debian, Ubuntu, CentOS, RHEL y Rocky Linux, mediante un **
script Bash que detecta la distribución y modifica correctamente el archivo de configuración
del servicio SSH (`sshd_config`)**.

### Script Bash

A continuación, se presenta el script completo:

    ```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 1fiSSHD_CONFIG="/etc/ssh/sshd_config"# Copia de seguridadcp "$SSHD_CONFIG" "${SSHD_CONFIG}.bak_$(date +%F_%T)"# Deshabilitar login root (por contraseña y clave pública)sed -i '/^#*PermitRootLogin/s/.*/PermitRootLogin no/' "$SSHD_CONFIG"# Deshabilitar autenticación por clave pública para todosif grep -q "^#*PublicKeyAuthentication" "$SSHD_CONFIG"; then    sed -i '/^#*PublicKeyAuthentication/s/.*/PublicKeyAuthentication no/' "$SSHD_CONFIG"else    echo "PublicKeyAuthentication no" >> "$SSHD_CONFIG"fi# Reiniciar servicio SSHif [[ "$DISTRO" =~ ^(debian|ubuntu)$ ]]; then    systemctl restart sshelif [[ "$DISTRO" =~ ^(centos|rhel|rocky)$ ]]; then    systemctl restart sshdelse    echo "Distribución no soportada: $DISTRO"    exit 1fiecho "Login de root y autenticación por clave pública deshabilitados en SSH."
    ```

### Explicación del Funcionamiento

| Sección | Descripción | 
| **Detección de la distribución** | Se lee el archivo `/etc/os-release` para identificar si el sistema es Debian/Ubuntu o CentOS/RHEL/Rocky. | 
| **Copia de seguridad** | Se guarda una copia del archivo `sshd_config` antes de realizar modificaciones. | 
| **Modificación del archivo SSH** | Se aplican las siguientes reglas de seguridad:
- `PermitRootLogin no`- `PublicKeyAuthentication no` | 
| **Reinicio del servicio SSH** | Se reinicia el servicio adecuado según la distribución. |

### Consideraciones de Seguridad

 * **No aplicar este script en servidores sin usuarios con privilegios sudo previamente
   configurados**, ya que podría bloquear el acceso remoto totalmente.
 * Este script **no revoca claves ya desplegadas**, sólo desactiva su uso desde 
   el servidor.
 * Se recomienda **automatizar esta tarea mediante Ansible, Puppet o scripts NinjaOne**
   en entornos gestionados.

### Resultado Esperado

Al ejecutar el script:

 * El acceso SSH con el usuario `root` queda completamente deshabilitado.
 * Ningún usuario puede autenticarse mediante claves públicas (a menos que se vuelva
   a habilitar la opción).
 * El servicio SSH se reinicia para aplicar los cambios.
