Icono del sitio Binario 0

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

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

#!/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

SSHD_CONFIG="/etc/ssh/sshd_config"

# Copia de seguridad
cp "$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 todos
if grep -q "^#*PublicKeyAuthentication" "$SSHD_CONFIG"; then
sed -i '/^#*PublicKeyAuthentication/s/.*/PublicKeyAuthentication no/' "$SSHD_CONFIG"
else
echo "PublicKeyAuthentication no" >> "$SSHD_CONFIG"
fi

# Reiniciar servicio SSH
if [[ "$DISTRO" =~ ^(debian|ubuntu)$ ]]; then
systemctl restart ssh
elif [[ "$DISTRO" =~ ^(centos|rhel|rocky)$ ]]; then
systemctl restart sshd
else
echo "Distribución no soportada: $DISTRO"
exit 1
fi

echo "Login de root y autenticación por clave pública deshabilitados en SSH."

Explicación del Funcionamiento

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

Consideraciones de Seguridad

Resultado Esperado

Al ejecutar el script:

Salir de la versión móvil