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

  • 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.

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.