Saltar al contenido
ecdsa.com
OpenSSH server (sshd) logSSH

Mensaje de error

userauth_pubkey: signature algorithm ssh-rsa not in PubkeyAcceptedAlgorithms [preauth]

También se muestra como

  • userauth_pubkey: key type ssh-rsa not in PubkeyAcceptedAlgorithms [preauth]
  • userauth_pubkey: key type ssh-rsa not in PubkeyAcceptedKeyTypes [preauth]
  • userauth_pubkey: signature algorithm ssh-ed25519 not in PubkeyAcceptedAlgorithms [preauth]

Texto según la versión de sshd (comprobado en el código fuente de OpenSSH): 9.0 y posteriores, «signature algorithm … not in PubkeyAcceptedAlgorithms»; 8.5–8.9, «key type … not in PubkeyAcceptedAlgorithms»; 8.4 y anteriores, «key type … not in PubkeyAcceptedKeyTypes» (la opción cambió de nombre en 8.5). El algoritmo que aparece en el mensaje varía según el cliente y la restricción del servidor.

OpenSSH server (sshd) log — the client sees only "Permission denied (publickey)."

Qué significa

El registro del servidor explica un «Permission denied (publickey)»: el cliente presentó un algoritmo de firma que el servidor no acepta. Con `ssh-rsa`, se trata del esquema de firma RSA basado en SHA-1, desactivado por defecto desde OpenSSH 8.8 (2021). La clave RSA en sí está bien —la misma clave funciona con los algoritmos `rsa-sha2-256`/`rsa-sha2-512`—, pero el cliente (un OpenSSH antiguo, una biblioteca desactualizada o un dispositivo embebido) solo conoce la variante con SHA-1.

Por qué ocurre

Cómo solucionarlo

  1. 1.

    Usar una clave moderna o un cliente moderno

    Una clave Ed25519 evita por completo el problema de RSA/SHA-1; si no es posible, actualiza la biblioteca cliente para que negocie `rsa-sha2-*`.

    bash
    # Best: a modern key type, which every current client signs correctly
    ssh-keygen -t ed25519 -C "deploy@ci" -f ~/.ssh/deploy_ed25519
    # Or keep the RSA key and use a client that supports rsa-sha2-256/512
    # (OpenSSH >= 7.2, Paramiko >= 2.9, JSch fork 0.2.x, golang.org/x/crypto >= 2022, PuTTY >= 0.75)
  2. 2.

    Permitir ssh-rsa de forma acotada, si es imprescindible

    Un bloque `Match` para un único dispositivo heredado mantiene las firmas SHA-1 lejos de todos los demás. Trátalo como algo temporal.

    text
    # /etc/ssh/sshd_config.d/legacy-device.conf - only for one legacy client, and remove it afterwards
    Match Address 10.0.5.17
        PubkeyAcceptedAlgorithms +ssh-rsa

Errores relacionados

Explorar toda la base de datos de errores de firma