Zum Inhalt springen
ecdsa.com
Git (commit -S, tag -s, commit.gpgsign) with GnuPGGit

Fehlermeldung

error: gpg failed to sign the data

Auch ausgegeben als

  • fatal: failed to write commit object
  • gpg: skipped "ABCDEF0123456789": No secret key
  • gpg: signing failed: No secret key

Git gibt den stderr von gpg nach der ersten Zeile aus, zum Beispiel „gpg: skipped "<key>": No secret key“ oder „gpg: signing failed: Inappropriate ioctl for device“. Lässt sich `gpg.program` nicht starten, gibt Git „(no gpg output)“ aus.

Was der Fehler bedeutet

Git hat GnuPG gebeten, das Commit- oder Tag-Objekt zu signieren, und gpg hat sich mit einem Fehler beendet, deshalb hat Git abgebrochen („fatal: failed to write commit object“). Die Zeile von Git selbst sagt nichts über die Ursache; das tun die mit ausgegebenen gpg-Zeilen (oder die Statuszeilen `[GNUPG:]`). Am häufigsten ist „No secret key“: Den konfigurierten `user.signingkey` gibt es in diesem Schlüsselbund nicht.

Warum der Fehler auftritt

So behebst du den Fehler

  1. 1.

    gpg selbst mit dem konfigurierten Schlüssel ausführen

    Schlägt `gpg --clearsign` mit demselben Schlüssel fehl, liegt das Problem bei GnuPG, nicht bei Git – und die Meldung von gpg ist die eigentliche.

    bash
    git config --get user.signingkey
    gpg --list-secret-keys --keyid-format=long          # is that key listed, with a "sec" line?
    echo test | gpg --clearsign --local-user "$(git config --get user.signingkey)" > /dev/null && echo "gpg can sign"
  2. 2.

    Git auf einen vorhandenen Schlüssel verweisen und pinentry lauffähig machen

    Verwende die lange Schlüssel-ID oder den Fingerabdruck eines lokal vorhandenen geheimen Schlüssels, setze `gpg.program` explizit und exportiere `GPG_TTY` in deiner Shell.

    bash
    KEY=$(gpg --list-secret-keys --with-colons alice@example.com | awk -F: '/^sec/ {print $5; exit}')
    git config --global user.signingkey "$KEY"
    git config --global gpg.program "$(command -v gpg)"
    export GPG_TTY=$(tty)        # in ~/.bashrc / ~/.zshrc, so pinentry can ask for the passphrase

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen