Fehlermeldung
sign_and_send_pubkey: signing failed for RSA "/path/to/key" from agent: agent refused operation
Auch ausgegeben als
- sign_and_send_pubkey: signing failed: agent refused operation
- sign_and_send_pubkey: signing failed for ED25519 "/path/to/key" from agent: agent refused operation
Schlüsseltyp und Pfad der Identitätsdatei variieren (`RSA`, `ED25519`, `ECDSA-SK` …). OpenSSH 8.3 und älter gaben die kürzere Form „sign_and_send_pubkey: signing failed: agent refused operation“ aus (geprüft in den Quellen von 7.9 und 8.4).
Was der Fehler bedeutet
Der Server hat den angebotenen öffentlichen Schlüssel akzeptiert, also hat ssh den SSH-Agenten gebeten, die Authentifizierungs-Challenge zu signieren – und der Agent hat abgelehnt. Der Schlüssel existiert, der Server würde ihn akzeptieren; nur die Operation mit dem privaten Schlüssel selbst hat nicht stattgefunden. Agenten lehnen ab, wenn sie eine Benutzerinteraktion brauchen, die sie nicht bekommen (eine Bestätigung, eine PIN, eine Berührung), oder wenn das Schlüsselmaterial hinter dem aufgelisteten Schlüssel nicht mehr nutzbar ist.
Warum der Fehler auftritt
Der Agent braucht eine Bestätigung, die er nicht anzeigen kann
häufigMit `ssh-add -c` hinzugefügte Schlüssel, Agenten von 1Password, Bitwarden oder Secretive, die um Bestätigung bitten, oder Abfragen des macOS-Schlüsselbunds – während ssh über SSH, in einem Container oder ohne GUI-Sitzung läuft (`SSH_ASKPASS` fehlt).
Hardware-Token oder gpg-agent kann nicht signieren
häufigEin YubiKey oder eine Smartcard wurde entfernt oder nicht rechtzeitig berührt, die PIV-PIN ist gesperrt, oder gpg-agent hat kein nutzbares Pinentry-Programm (kein `GPG_TTY`). Der Agent listet den Schlüssel weiterhin auf, kann ihn aber nicht verwenden.
Schlüssel im Agenten und Identitätsdatei stimmen nicht überein
gelegentlich`-i ~/.ssh/key` mit einer `.pub`-Datei, die zu einem anderen Schlüssel gehört, oder ein Schlüssel, der auf der Festplatte ersetzt wurde, während der Agent noch den alten hält. Lädst du den Schlüssel neu in den Agenten, ist das Problem behoben.
So behebst du den Fehler
- 1.
Antwortenden Agenten ermitteln und Schlüssel neu laden
`SSH_AUTH_SOCK` zeigt dir, welcher Agent verwendet wird; `ssh-add -l` listet auf, was er hält. Entfernst du den Schlüssel und fügst ihn erneut hinzu, verschwinden veraltete Einträge.
bash echo "$SSH_AUTH_SOCK" # which agent answers: ssh-agent, gpg-agent, 1Password, ... ssh-add -l # keys the agent holds ssh-add -D && ssh-add ~/.ssh/id_ed25519 # reload a key that the agent cannot use anymore - 2.
gpg-agent ein Terminal für Abfragen geben
Wenn gpg-agent SSH-Schlüssel bereitstellt, zeigt er PIN-Abfragen auf dem TTY an, das ihm mitgeteilt wurde; aktualisiere diese Angabe aus der aktuellen Shell heraus.
bash # gpg-agent as SSH agent: tell it which terminal can show the PIN/confirmation prompt export GPG_TTY=$(tty) gpg-connect-agent updatestartuptty /bye