it-swarm.com.de

Git-Fehler - gpg konnte keine Daten signieren

Ich habe gerade mit git angefangen und installiere git und gpg über homebrew . Aus irgendeinem Grund erhalte ich diese Fehlermeldung, wenn ich git commit.__ tue. Ich habe mir so viele andere stackoverflow-Fragen zu diesem Thema angesehen und keiner von ihnen hat für mich gearbeitet Wie kann ich diesen Fehler beheben, damit ich erfolgreich hochladen kann? 

error: gpg failed to sign the data
fatal: failed to write commit object
71
Entitize

Für die Problembehandlung sollten Sie zunächst zwei Dinge ausprobieren:

  • führen Sie git config --global gpg.program gpg2 aus, um sicherzustellen, dass git gpg2 und nicht gpg verwendet.
  • führen Sie echo "test" | gpg2 --clearsign aus, um sicherzustellen, dass gpg2 selbst funktioniert

Wenn das alles gut aussieht, versuchen Sie es als Nächstes:

  • führen Sie brew install pinentry aus, um sicherzustellen, dass für die Eingabe der Passphrase ein gutes Werkzeug installiert ist

Wenn danach installiert wird und Sie git commit erneut versuchen und immer noch die Fehlermeldung "failed to sign the data" erhalten:

  • führen Sie gpgconf --kill gpg-agent aus, um alle aktiven Agenten zu beenden, die möglicherweise aufgehängt sind

Wenn besagt, dass gpgconf nicht installiert ist oder keine --kill-Option hat, versuchen Sie es mit möglicherweise:

  1. cp ~/.gnupg ~/.gnupg-GOOD, um eine Kopie Ihres ~/.gnupg zu speichern, um bei Bedarf später wiederhergestellt zu werden
  2. brew install gnupg21 zur Installation von GnuPG 2.1

Der Grund für das Speichern einer Kopie Ihres ~/.gnupg-Verzeichnisses besteht darin, dass GnuPG 2.1 möglicherweise einige Schlüsseldaten auf eine Weise erstellt/ändert, die nicht abwärtskompatibel mit GnuPG 2.0 und früheren Versionen ist. Daher möchten Sie if später zurückgehen können Sie mv ~/.gnupg ~/.gnupg21 && mv ~/.gnupg-GOOD ~/.gnupg.


Ansonsten müssen Sie einige grundlegende Schritte ausführen, um zu überprüfen, ob Sie eine funktionierende GnuPG-Umgebung haben:

  • führen Sie gpg2 -K --keyid-format SHORT aus, um zu überprüfen, ob Sie mindestens ein Schlüsselpaar haben

Wenn die Ausgabe davon zeigt, dass Sie keinen geheimen Schlüssel für GnuPG verwenden können, müssen Sie einen erstellen:

  • führen Sie gpg2 --gen-key aus, damit GnuPG Sie durch die Schritte zum Erstellen eines Schlüsselpaares führt

Wenn Sie eine Fehlermeldung erhalten, in der "Ungeeignetes Ioctl für Gerät"angezeigt wird, _:

  • führen Sie export GPG_TTY=$(tty) aus und/oder fügen Sie dies Ihrem ~/.bashrc oder ˜/.bash_profile hinzu. 
108
sideshowbarker

Git muss wissen, mit welchem ​​Schlüssel er signiert.

Nachdem Sie GPG, gpg-agent und Ihre gpg.conf-Dateien (siehe diese Anleitung ) eingerichtet haben, müssen Sie sie ausführen

git config --global user.signingkey EB11C755

Offensichtlich ersetzen Sie den öffentlichen Schlüssel am Ende durch Ihren eigenen. Wenn Sie möchten, dass jedes Commit standardmäßig signiert wird, verwenden Sie

git config --global commit.gpgsign true
41
Xavier Ho

Irgendwie ist dein Git so konfiguriert, dass er jedes Commit mit GPG signiert. Das Signieren mit GPG ist nicht unbedingt zum Festschreiben oder Push mit git erforderlich. Es ist wahrscheinlich der Fehler, weil der gpg-Signaturmechanismus noch nicht konfiguriert ist.

Wenn Sie mit git noch nicht vertraut sind, versuchen Sie, es zuerst ohne GPG-Signierung zum Laufen zu bringen, und fügen Sie die Anmeldung später hinzu, wenn Sie es wirklich brauchen.

Sie können die Konfiguration Ihres Git in Bezug auf gpg überprüfen, indem Sie Folgendes tun:

git config -l | grep gpg

Welche kann null oder mehr Zeilen erzeugen, einschließlich:

commit.gpgsign=true

Wenn "commit.gpgsign" wahr ist, haben Sie die gpg-Signatur aktiviert. Deaktiviere es mit:

git config --global --unset commit.gpgsign

Versuchen Sie dann erneut, Ihr Commit auszuführen. Es sollte jetzt ohne GPG-Signatur laufen. Nachdem Sie die Grundfunktionen von git zum Laufen gebracht haben, sollten Sie versuchen, der Mischung wieder gpg-Signaturen hinzuzufügen. 

21
Jason Thrasher

Siehe @sideshowbarker und @Xavier Ho Lösung. Ich habe mein Problem durch folgende Schritte gelöst.

Nehmen Sie an, dass gpg2 von brew installiert wurde.

git config --global gpg.program gpg2
brew install pinentry
gpgconf --kill gpg-agent
gpg2 -K --keyid-format SHORT
// no key found then generate new one
gpg2 --gen-key

gpg2 -K --keyid-format SHORT 

... /. gnupg/pubring.gpg

sec rsa2048 / 0A61C6FC 2017-06-29 [SC] [verfällt: 2019-06-29]

git config --global user.signingkey 0A61C6FC

Von meinem Kollegen erinnert, muss anhängen 

export GPG_TTY=$(tty)

zu ~/.zshrc, wenn Sie zsh verwenden, andernfalls an ~/.bash_profile anhängen


Für macOS

das gpg2 wird beim Brühen mit gpg kombiniert, und der Befehl gpg wird auf gpg2 gerichtet

brew install gpg2

brauen info gpg 

gnupg: stabil 2.2.6 (abgefüllt)

git config --global gpg.program gpg
gpg -K --keyid-format SHORT 

und es gibt Pinentry-Mac für die Eingabe der Passphrase

brew install pinentry-mac
vim ~/.gnupg/gpg-agent.conf

Zeile hinzufügen

pinentry-programm/usr/local/bin/pinentry-mac

16
V-SHY

Dieses Problem ist nach einem Upgrade auf gnupg 2.x aufgetreten. Es würde gesehen werden, dass gpg2 Schlüssel anders referenziert: Ich hatte noch signingkey = ABC98F11 (gpg v1 Einstellung) in meinem ~/.gitconfig. Die Schlüsselkennungen für gpg2 sind länger. Nachschlagen mit gpg --list-secret-keys

3
carp

Möglicherweise wurde Ihre Git-Konfiguration festgelegtgpgsign = true. Versuchen Sie es auf "false" zu setzen, wenn Sie Ihre Commits nicht zuweisen möchten. Gehen Sie zu Ihrem Repository-Ordner und ändern Sie die Datei 

nano .git/config

Davon...

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "Origin"]
    url = [email protected]:yourrepo/project.git
    fetch = +refs/heads/*:refs/remotes/Origin/*
[branch "master"]
    remote = Origin
    merge = refs/heads/master
[user]
    signingkey = <GPG-KEY>
[commit]
    gpgsign = true

Zu diesem ...

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "Origin"]
    url = [email protected]:yourrepo/project.git
    fetch = +refs/heads/*:refs/remotes/Origin/*
[branch "master"]
    remote = Origin
    merge = refs/heads/master
[user]
    signingkey = <GPG-KEY>
[commit]
    gpgsign = false
3
alvaropaco

Dieser Fehler kann auch auftreten, wenn Ihr GPG-Schlüssel abgelaufen ist. Das Generieren eines neuen Schlüssels und das Hinzufügen zu Git sollte dies beheben.

1
osowskit

Bei mir trat dieser Fehler mit git tag -s unter Debian GNU/Linux auf, als ich von pinentry-gnome3 zu pinentry-curses (mit update-alternatives --config pinentry) wechselte, um den Fernzugriff zu erleichtern. Sie trat nur bei git tag -s auf, nicht bei gpg (z. B. gpg --clearsign) selbst.

Die einzige Änderung, die erforderlich war, um es in diesem Fall wieder zum Laufen zu bringen, war das Hinzufügen von export GPG_TTY=$(tty) zu meinen Shell-Startdateien.

In einer anderen Antwort auf diese Frage wurde jedoch die Fehlermeldung "Unangemessener Ioctl für Gerät" als Indikator für diesen Fix nicht angezeigt.

Hinweis: Da die Ursache für diesen Fehler eine völlig andere war als für diejenigen, die export GPG_TTY=$(tty) in anderen Antworten auf diese Frage vorgeschlagen hatten (normalerweise als Nebenhinweis), entschied ich, dass diese Frage eine andere Antwort erfordert, in der erwähnt wird, dass export GPG_TTY=$(tty) möglich ist das wichtigste Problem und die einzige Sache, die in einigen Fällen notwendig ist.

1
Axel Beckert

Prüfen Sie, ob Ihr Schlüssel abgelaufen ist. Sobald Sie das Ablaufdatum festgelegt haben (es ist nicht erforderlich, einen neuen Schlüssel zu erstellen, sofern Sie dies nicht möchten), funktioniert git wie gewohnt.

Eine Möglichkeit, den abgelaufenen Schlüssel zu korrigieren:

(Hinweis: $ steht für die Befehlszeile Eingabeaufforderung, geben Sie die Befehle nach der Eingabeaufforderung ein, und drücken Sie nach jedem Befehl die Eingabetaste.)

$ gpg2 --list-keys zum Auffinden der entsprechenden Schlüssel-ID (Zeichen nach \ in pub-Zeile)

$ gpg2 --edit-key <key id> - Dadurch wird die GPG-Shell geöffnet. Die Eingabeaufforderung wurde in gpg> geändert.

gpg> expire - Folgen Sie den Anweisungen, um ein neues Ablaufdatum für den Primärschlüssel festzulegen

Wenn es Unterschlüssel gibt, die abgelaufen sind (sub wird in der Zeile angezeigt), setzen Sie auch deren Verfallsdatum zurück:

gpg> key 1 - wählt den ersten Unterschlüssel aus gpg> expire - Folgen Sie den Anweisungen, um ein neues Ablaufdatum für den Unterschlüssel festzulegen

Wiederholen Sie diesen Vorgang nach Bedarf für jeden nachfolgenden Unterschlüssel.

1
leanne

Das hat bei mir am Ubuntu 18.04 funktioniert

Überprüfen Sie Ihren GPG-Schlüssel

gpg -K --keyid-format LONG

Wenn Sie eine leere Antwort erhalten, generieren Sie einen GPG-Schlüssel

gpg --generate-key

wenn Sie den ersten Befehl erneut ausführen, sollten Sie eine Ausgabe erhalten als:

sec   rsa3072/95A854E0593B3214 2019-05-06 [SC] [expires: 2021-05-05]
      AF2F7514568DC26B0EB97B9595A854E0593B74D8
uid                 [ultimate] yourname<your_email>
ssb   rsa3072/EFD326E6C611117C 2019-05-06 [E] [expires: 2021-05-05]

Git Gesangstaste setzen

git config --global user.singingkey 95A854E0593B3214

dann kann es losgehen (--global ist optional)

Alternativ, wenn Sie nichts dagegen haben, mit Ihrem SSH-Schlüssel zu signieren

git config commit.gpgsign false

Beachten Sie, dass dies aufgrund eines Sicherheitsproblems gemäß dieser Frage nicht empfohlen wird hier und hier

0
poon gilbert

Ich hatte einen git-Schlüssel mit 3 separaten Schlüsseln für certify/sign/encrypt erstellt. Der Schlüssel wurde in der Zukunft als abgelaufen angezeigt (nachdem ich einige Tage mit dem System gearbeitet hatte):

pub   rsa4096/4CD1E9DA 2017-04-26 [C] [expired: 2017-04-28]
      Key fingerprint = 4670 59C1 7592 08B8 7FA5  313B 2A42 B6A6 4CD1 E9DA
uid         [ expired] Stuart Cardall (GIT Development Keys) <xxxxxx>
sub   rsa4096/5195E715 2017-04-26 [E] [expired: 2019-04-26]
sub   rsa4096/DB74C297 2017-04-26 [S] [expired: 2019-04-26]
sub   rsa2048/A3913A3C 2017-04-28 [] [expired: never     ]

einen neuen Schlüssel erstellt, ohne separate Unterschlüssel hinzuzufügen, um das Problem zu lösen.

0
Stuart Cardall

Ich benutze es. Es unterstützt zsha und arbeitet mit dem Windows-Subsystem für Linux:

export GPG_TTY=$(tty)
0
Jamal Kaksouri

Ich habe das Problem bei der Installation von brew install gpg2 gelöst und dann git config --global gpg.program gpg2 ausgeführt.

0
Andres08P