Pular para o conteúdo
ecdsa.com
OpenSSH server (sshd) logSSH

Mensagem de erro

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

Também aparece 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 por versão do sshd (conferido no código-fonte do OpenSSH): na 9.0 e posteriores, “signature algorithm … not in PubkeyAcceptedAlgorithms”; da 8.5 à 8.9, “key type … not in PubkeyAcceptedAlgorithms”; na 8.4 e anteriores, “key type … not in PubkeyAcceptedKeyTypes” (a opção foi renomeada na 8.5). O algoritmo citado na mensagem varia conforme o cliente e a restrição do servidor.

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

O que significa

O log do servidor explica um “Permission denied (publickey)”: o cliente apresentou um algoritmo de assinatura que o servidor não aceita. No caso de `ssh-rsa`, trata-se do esquema de assinatura RSA baseado em SHA-1, desativado por padrão desde o OpenSSH 8.8 (2021). A chave RSA em si não tem problema — a mesma chave funciona com os algoritmos `rsa-sha2-256`/`rsa-sha2-512` —, mas o cliente (um OpenSSH antigo, uma biblioteca desatualizada ou um dispositivo embarcado) só conhece a variante com SHA-1.

Por que acontece

Como corrigir

  1. 1.

    Usar uma chave moderna ou um cliente moderno

    Uma chave Ed25519 evita por completo o problema RSA/SHA-1; caso contrário, atualize a biblioteca do cliente para que ela 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 restrita, se for mesmo necessário

    Um bloco `Match` para um único dispositivo legado mantém as assinaturas SHA-1 longe de todos os outros. Trate-o como temporário.

    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

Erros relacionados

Ver toda a base de erros de assinatura