Fehlermeldung
userauth_pubkey: signature algorithm ssh-rsa not in PubkeyAcceptedAlgorithms [preauth]
Auch ausgegeben als
- 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]
Wortlaut je nach sshd-Version (in den OpenSSH-Quellen geprüft): ab 9.0 „signature algorithm … not in PubkeyAcceptedAlgorithms“; 8.5–8.9 „key type … not in PubkeyAcceptedAlgorithms“; 8.4 und älter „key type … not in PubkeyAcceptedKeyTypes“ (die Option wurde in 8.5 umbenannt). Der Algorithmus in der Meldung hängt vom Client und von der Einschränkung auf dem Server ab.
OpenSSH server (sshd) log — the client sees only "Permission denied (publickey)."
Was der Fehler bedeutet
Das Server-Log erklärt ein „Permission denied (publickey)“: Der Client hat einen Signaturalgorithmus verwendet, den der Server nicht akzeptiert. Bei `ssh-rsa` ist das das RSA-Signaturverfahren auf Basis von SHA-1, das seit OpenSSH 8.8 (2021) standardmäßig deaktiviert ist. Der RSA-Schlüssel selbst ist in Ordnung – derselbe Schlüssel funktioniert mit den Algorithmen `rsa-sha2-256`/`rsa-sha2-512` –, aber der Client (ein altes OpenSSH, eine veraltete Bibliothek oder ein eingebettetes Gerät) kennt nur die SHA-1-Variante.
Warum der Fehler auftritt
Ein alter SSH-Client oder eine alte Bibliothek signiert mit ssh-rsa
häufigOpenSSH vor 7.2, Paramiko vor 2.9 (auch hinter dem Verbindungs-Plugin paramiko von Ansible), das ursprüngliche JSch 0.1.55 (Jenkins-Plugins, IDEs), ältere Versionen von golang.org/x/crypto und viele Netzwerkgeräte erzeugen ausschließlich Signaturen vom Typ `ssh-rsa`.
Der Server schränkt die Algorithmen weiter ein
gelegentlichHärtungsleitfäden setzen `PubkeyAcceptedAlgorithms` auf eine kurze Liste (zum Beispiel nur Ed25519 und ECDSA); RSA- oder Ed25519-Schlüssel außerhalb dieser Liste werden abgelehnt, wie die Meldungsvariante mit `ssh-ed25519` zeigt.
Ein DSA-Schlüssel
gelegentlich`ssh-dss` ist seit OpenSSH 7.0 deaktiviert und wurde in 10.0 entfernt. DSA-Schlüssel müssen ersetzt werden.
So behebst du den Fehler
- 1.
Modernen Schlüssel oder modernen Client verwenden
Ein Ed25519-Schlüssel umgeht das RSA/SHA-1-Problem vollständig; andernfalls aktualisiere die Client-Bibliothek, damit sie `rsa-sha2-*` aushandelt.
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.
ssh-rsa eng begrenzt zulassen, wenn es sein muss
Ein `Match`-Block für ein einzelnes Altgerät hält SHA-1-Signaturen von allen anderen fern. Betrachte ihn als vorübergehende Lösung.
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
Verwandte Fehler
Permission denied (publickey).OpenSSH client (ssh, scp, sftp, git over SSH)Unable to negotiate with 127.0.0.1 port 22: no matching host key type found. Th…OpenSSH client (8.8+) connecting to a server that only offers legacy host key algorithmsssh: handshake failed: ssh: unable to authenticate, attempted methods [none pub…golang.org/x/crypto/ssh (Go)