Servidores

SSH: pusiste PasswordAuthentication no y sigue activo (el fichero de sshd_config.d)

Publicado el 1 de noviembre de 2026Última revisión: 1 de noviembre de 20262 min de lectura

Resultado de la prueba

Con Include al principio de sshd_config, un 50-cloud-init.conf con PasswordAuthentication yes deja la autenticación por contraseña activa aunque sshd_config diga no; con el no en un fichero 00-*.conf gana el no. sshd -T lo muestra.

Contenido

Este artículo no contiene enlaces de afiliado.

Si asegurar SSH para ti es poner PasswordAuthentication no en /etc/ssh/sshd_config y reiniciar, hay un caso en el que el cambio no sirve de nada: otro fichero en sshd_config.d/ dice yes. Se probó con sshd -T, que muestra la configuración efectiva sin arrancar el servicio.

Condiciones: OpenSSH 9.6p1 (Ubuntu 24.04, arm64), un directorio de pruebas con su propia clave de host; no se tocó /etc/ssh ni se arrancó ningún demonio. Script completo al final.

Resultado

Situación passwordauthentication efectivo
sshd_config con no, sin ficheros en sshd_config.d no
Include al principio de sshd_config y 50-cloud-init.conf con yes yes
no en sshd_config antes del Include, mismo 50-cloud-init.conf no
00-hardening.conf con no y 50-cloud-init.conf con yes no

Por qué

sshd usa el primer valor que lee para cada opción. En las instalaciones de Ubuntu la línea Include /etc/ssh/sshd_config.d/*.conf está al principio de sshd_config, así que los ficheros de ese directorio se leen antes que el resto, en orden alfabético. Un yes en 50-cloud-init.conf gana al no que añadiste más abajo.

Qué hacer

Script completo

#!/bin/bash
# sshd: does PasswordAuthentication no in sshd_config survive a drop-in in sshd_config.d? Usage: test-sshd-dropin.sh WORKDIR. Only reads the effective config with sshd -T; no daemon is started.
W=$1; rm -rf "$W"; mkdir -p "$W/sshd_config.d"; ssh-keygen -q -t ed25519 -N "" -f "$W/hostkey"
printf 'Include %s/sshd_config.d/*.conf\nHostKey %s/hostkey\nPasswordAuthentication no\n' "$W" "$W" > "$W/sshd_config"
show() { echo "== $1"; /usr/sbin/sshd -T -f "$W/sshd_config" -C user=test,host=x,addr=127.0.0.1 2>&1 | grep -i '^passwordauthentication'; }
show "sshd_config dice no, sin drop-in"
echo "PasswordAuthentication yes" > "$W/sshd_config.d/50-cloud-init.conf"
show "con 50-cloud-init.conf = yes (Include al principio)"
printf 'HostKey %s/hostkey\nPasswordAuthentication no\nInclude %s/sshd_config.d/*.conf\n' "$W" "$W" > "$W/sshd_config"
show "Include al final: el 'no' del fichero principal gana"
echo "PasswordAuthentication no" > "$W/sshd_config.d/00-hardening.conf"
printf 'Include %s/sshd_config.d/*.conf\nHostKey %s/hostkey\n' "$W" "$W" > "$W/sshd_config"
show "00-hardening.conf = no, antes que 50-cloud-init.conf = yes"