Git-Commit-Signierung fehlgeschlagen: Geheimschlüssel nicht verfügbar

85

Ich erhalte diesen Fehler, wenn ich versuche, mit Git ein Commit durchzuführen.

gpg: skipped "name <[email protected]>": secret key not available
gpg: signing failed: secret key not available
error: gpg failed to sign the data
fatal: failed to write commit object

Ich habe einen neuen Schlüssel wie unten generiert, aber es gibt immer noch den gleichen Fehler

gpg --list-keys
~/.gnupg/pubring.gpg
--------------------------------
pub   2048R/35F5FFB2 2016-04-23
uid                  name (New key) <[email protected]>
sub   2048R/112A8C2D 2016-04-23

Der geheime Schlüssel ist der gleiche wie oben

Ich habe dies gefunden. Generieren eines GPG-Schlüssels für das Git-Tagging und habe die Schritte befolgt, aber es funktioniert immer noch nicht, eine Idee?

Emilio Menéndez
quelle
3
Für Windows-Benutzer ist es viel wahrscheinlicher, dass dieser Fehler auftritt, da Git unter Windows nicht das richtige GPG verwendet. Da git in PATH nicht die richtige Binärdatei findet, verwendet es intern gebündeltes gpg in seinem minimierten MSYS, das nicht weiß, wo sich Ihre Schlüssel befinden. Durch Festlegen von gpg.program- oder G (NU) PGHOME-Variablen wird dies behoben, wie in einigen der folgenden Antworten angegeben.
Abel Cheung

Antworten:

78

Sie müssen den geheimen Schlüssel konfigurieren, bevor Sie ihn verwenden können.

git config user.signingkey 35F5FFB2

Oder deklarieren Sie es global, wenn Sie für jedes Repository denselben Schlüssel verwenden möchten.

git config --global user.signingkey 35F5FFB2

Quelle: Git Tools - Signieren Sie Ihre Arbeit

Leonardo Emanuel Alifraco
quelle
Vielen Dank Leonardo! Es klappt!! Entschuldigung, wenn die Frage albern war, ich hatte keine Ahnung, wie ich sie lösen sollte.
Emilio Menéndez
Ausgezeichnet! Wenn Sie den Signaturschlüssel des Benutzers angeben, werden auch mehrere E-Mail-Adressen auf einem Schlüssel und eine Nichtübereinstimmung zwischen der Git-E-Mail und der ersten Adresse auf dem Schlüssel vermieden.
user2943160
1
Ist es sicher, .gitconfig mit geheimem Schlüssel im öffentlichen Repo zu speichern?
Melihovv
1
Für die Aufzeichnung fragte @melihovv nach: - Der geheime Schlüssel muss sich auf Ihrem GPG-Schlüsselbund befinden. In der Konfiguration wird nur die Hash-ID dieses Schlüssels gespeichert.
BRPocock
2
Ich musste das zusammen mit tun git config --global gpg.program gpg2.
Splaktar
110

Dies funktionierte für mich unter Windows 10 (Beachten Sie, dass ich den absoluten Pfad zu gpg.exe verwende):

git config --global gpg.program "C:\Program Files (x86)\GnuPG\bin\gpg.exe"

Dies war der Fehler, den ich vor dem Fix erhalten habe:

gpg: skipped "3E81C*******": secret key not available
gpg: signing failed: secret key not available
error: gpg failed to sign the data
fatal: failed to write commit object
Wakeel
quelle
2
Habe diesen Fehler secret key not availablemit VS Code und Einstellungsort gpg.exebehoben.
Dawid
2
Das hat auch bei mir funktioniert. Besonders nachdem Sie die Konfigurationsschritte von Github selbst ausgeführt haben.
Bas G
1
Bei jeder Installation meines Windows Insider-Builds wird diese Option zurückgesetzt. Danke dafür :)
VRG
Dies funktionierte auch für mich, nachdem ich den absoluten Pfad von gpg hinzugefügt hatte. Vielen Dank.
Adarsh ​​Srivastava
64

Was für mich funktionierte, war das Hinzufügen

git config --global gpg.program "C:/Program Files (x86)/GNU/GnuPG/gpg2.exe"

Wenn Sie den vollständigen Pfad von gpg2.exe finden möchten:

where gpg2.exe
Paul van Bladel
quelle
3
Abhängig von der installierten Version von GnuPG müssen Sie dies gpg.exeanstelle von tun gpg2.exe.
Mark Rotteveel
14

Ich möchte all diese Antworten vervollständigen, weil ich damit viele Probleme habe.

Diese Beispiele verwenden das --globalFlag, aber Sie können es entfernen, wenn Sie diese Dinge lokal ausführen möchten.

Konfigurieren Sie den geheimen Schlüssel in git

git config --global user.signingkey 35F5FFB2

Konfigurieren Sie das gpg-Programm für die Verwendung in git (optional).

Einige Systeme (zum Beispiel Ubuntu) können gpgund gpg2gleichzeitig haben. Sie müssen angeben, was Sie verwenden möchtengpg2

git config --global gpg.program gpg2

GPG_TTY exportieren (optional)

Wenn Sie diesen Befehl in einer SSH-Umgebung verwenden, tritt möglicherweise der folgende Fehler auf: Inappropriate ioctl for deviceoder gpg: échec de la signature : Ioctl() inapproprié pour un périphérique. Dies kann behoben werden über:

export GPG_TTY=$(tty)

GPG-Gesang automatisch aktivieren (optional)

git config --global commit.gpgsign true
Alphayax
quelle
Wie deaktiviert man es, wenn man es nicht mehr benutzen will?
Madona Syombua
1
Sie können das --unsetFlag zu diesen git configBefehlen hinzufügen , um es zu deaktivieren
Alphayax
Ich habe tatsächlich diese Git-Konfiguration verwendet --global commit.gpgsign true, sagte aber false.
Madona Syombua
7

Ich hatte eine Situation, in der mir auf einem Windows 10-Computer dasselbe passiert ist.

$ git commit -m "Improve logging, imports and show time executed"
gpg: signing failed: Operation cancelled
gpg: signing failed: Operation cancelled
error: gpg failed to sign the data
fatal: failed to write commit object

Die Befehle "C:\Program Files (x86)\GnuPG\bin\gpg.exe" --list-secret-keys --keyid-format LONGund gpg --list-secret-keys --keyid-format LONGwo geben mir völlig unterschiedliche Ergebnisse!

$ where gpg
C:\Program Files\Git\usr\bin\gpg.exe
C:\Program Files (x86)\GnuPG\bin\gpg.exe

Der Hauptgrund bezog sich auf frühere Antworten, jedoch in einem anderen Sinne:

  • Ich habe die GPG-Schlüssel mit der Git-Version (konfigurierter Pfad) von GPG erstellt
  • Git wurde so konfiguriert, dass die heruntergeladene Version von gpg für das Commit verwendet wird.
  • Anscheinend verwenden GPG-Implementierungen ihre eigene Zertifikatdatenbank und ihren eigenen Speicher.

Ich hoffe, dies kann jedem helfen, der über diese Nachricht stolpert und frühere Antworten lösen das Problem nicht.

will824
quelle
Musste den geheimen Schlüssel für Kleopatra aus dem Cli-Export hinzufügen, da die Visual Studio-Community diesen standardmäßig zum Signieren verwendet, wobei der Git-Cli eine andere Liste / Implementierung verwendete und daher immer noch ohne Kleopatra arbeitete.
Nithish
5

Sie müssen die Variable setzen GNUPGHOME. Ohne diese Funktion kann GnuPG Ihre Schlüssel nicht finden.

# On unix add it to your path

# On windows it will usually be under: 
<drive>:\Users\<username>\AppData\Roaming\gnupg

Unter Unix wird es einfach dem Pfad hinzugefügt.
Unter Windows müssen Sie die Systemsteuerung öffnen und als festlegen

System Variable
  Name: GNUPGHOME
  Path: <drive>:\Users\<username>\AppData\Roaming\gnupg
CodeWizard
quelle
1
Für mich war es nicht GNUPGHOME. Damit GPGHOMEfunktioniert es für mich
Sysix
1

Ich hatte das gleiche Problem: Der Git- Name und der E-Mail- Speicher in .gitconfig unterschieden sich von denen des bereitgestellten GPG- Schlüssels. Ich habe sie geändert, um sie anzupassen, und es fing an zu funktionieren.

Patricio Perpetua
quelle
0

Verwenden "C:\Program Files\Git\usr\bin\gpg.exe"war die Lösung für mich.
Musste kleopatra deinstallieren. Damit funktionierte es nicht.

Also, zusammenfassend;

  • Kleopatra ist nicht erforderlich. Verwenden Sie stattdessen die GIT-Standardeinstellung.

  • git config --global user.signingkey Y0URK3Y
    git config --global commit.gpgsign true
    git config --global gpg.program "C:\Program Files\Git\usr\bin\gpg.exe"
    
António Almeida
quelle
-4

Möglicherweise müssen Sie Ihr eigenes Repository klonen, in dem Sie Rechte haben. Ich hatte dieses Problem, als ich das Repository einer anderen Person geklont habe.

user6671429
quelle