web-dev-qa-db-fra.com

Erreur Git - gpg n'a pas réussi à signer les données

Je viens juste de commencer à utiliser git et j’installe git et gpg via homebrew . Pour une raison quelconque, j’obtiens cette erreur en écrivant le git commit . Comment puis-je corriger cette erreur afin que je puisse télécharger avec succès. 

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

Pour le dépannage, deux choses à essayer en premier:

  • lancez git config --global gpg.program gpg2, pour vous assurer que git utilise gpg2 et non gpg
  • lancez echo "test" | gpg2 --clearsign, pour vous assurer que gpg2 lui-même fonctionne

Si tout vous convient, essayez ensuite:

  • lancez brew install pinentry pour vous assurer d'avoir un bon outil installé pour la saisie de la phrase secrète

Si, après cette installation, vous essayez à nouveau git commit et obtenez toujours l'erreur "failed to sign the data":

  • lancez gpgconf --kill gpg-agent pour tuer tout agent en cours pouvant être bloqué

Si cela indique que gpgconf n’est pas installé ou n’a pas d’option --kill, vous pourriez essayez ceci:

  1. cp ~/.gnupg ~/.gnupg-GOOD pour enregistrer une copie de votre ~/.gnupg pour revenir à plus tard si nécessaire
  2. brew install gnupg21 pour installer GnuPG 2.1

La raison pour enregistrer une copie de votre répertoire ~/.gnupg est que GnuPG 2.1 crée/modifie potentiellement certaines données clés d’une manière qui n’est pas rétrocompatible avec GnuPG 2.0 et versions antérieures, donc si vous souhaitez revenir plus tard, vous peut faire mv ~/.gnupg ~/.gnupg21 && mv ~/.gnupg-GOOD ~/.gnupg.


Sinon, certaines étapes de base à exécuter pour vérifier que votre environnement GnuPG est opérationnel sont les suivantes:

  • lancez gpg2 -K --keyid-format SHORT, pour vérifier que vous avez au moins une paire de clés

Si le résultat indique que GnuPG ne dispose pas de clé secrète, vous devez en créer une:

  • lancez gpg2 --gen-key, pour que GnuPG vous guide pas à pas dans la création d'une paire de clés

Si vous recevez un message d'erreur indiquant “ioctl inapproprié pour le périphérique” , procédez comme suit:

  • lancez export GPG_TTY=$(tty) et/ou ajoutez-le à votre ~/.bashrc ou ˜/.bash_profile 
108
sideshowbarker

Git a besoin de savoir avec quelle clé il signe.

Après avoir configuré GPG, gpg-agent et vos fichiers gpg.conf (voir ce guide ), vous devez exécuter

git config --global user.signingkey EB11C755

Évidemment, remplacez la clé publique à la fin par la vôtre. Si vous voulez que chaque commit soit signé par défaut, utilisez

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

D'une manière ou d'une autre votre git est configuré pour signer par GPG chaque commit. Signer avec GPG n'est pas nécessaire pour valider ou utiliser Push avec git. C'est probablement parce que votre mécanisme de signature gpg n'est pas encore configuré.

Si vous débutez avec git, essayez d’abord de le faire fonctionner sans la signature de GPG, puis d’ajouter la connexion plus tard si vous en avez vraiment besoin.

Vous pouvez vérifier comment votre git est configuré en ce qui concerne gpg en faisant:

git config -l | grep gpg

Qui peut produire zéro ou plusieurs lignes, y compris:

commit.gpgsign=true

Si "commit.gpgsign" est vrai, la signature gpg est activée. Désactivez-le avec:

git config --global --unset commit.gpgsign

Ensuite, essayez de relancer votre commit. Il devrait maintenant fonctionner sans signature gpg. Une fois que vous avez réussi à utiliser le git de base, essayez d’ajouter la signature gpg au mélange. 

21
Jason Thrasher

Reportez-vous aux solutions @sideshowbarker et @Xavier Ho pour résoudre le problème en procédant comme suit.

Suppose que gpg2 est installé par le brasseur,

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] [expire: 2019-06-29]

git config --global user.signingkey 0A61C6FC

Rappelé par mon collègue, besoin d’annexer 

export GPG_TTY=$(tty)

à ~/.zshrc si vous utilisez zsh, sinon ajoutez-le à ~/.bash_profile


Pour macOS,

le gpg2 est combiné avec gpg dans le brassage et la commande gpg est donc dirigée vers gpg2

brew install gpg2

infusion info gpg 

gnupg: stable 2.2.6 (en bouteille)

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

et il y a pinentry-mac pour la saisie de la phrase secrète

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

Ajouter une ligne

programme-pinentry/usr/local/bin/pinentry-mac

16
V-SHY

J'ai rencontré ce problème après la mise à niveau vers gnupg 2.x. Nous aurions vu que gpg2 référençait les clés différemment: j'avais toujours signingkey = ABC98F11 (paramètre gpg v1) dans mon ~/.gitconfig. Les identifiants de clé pour gpg2 sont plus longs. Cherchez-les avec gpg --list-secret-keys

3
carp

Peut-être que votre configuration Git a été définiegpgsign = true. Essayez de le définir sur false si vous ne voulez pas assigner vos commits. Accédez au dossier de votre référentiel et modifiez le fichier. 

nano .git/config

A partir de ça ...

[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

Pour ça...

[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

Cette erreur peut également se produire lorsque votre clé GPG a expiré. Générer une nouvelle clé et l'ajouter à Git devrait résoudre ce problème.

1
osowskit

Pour moi, cette erreur a commencé à se produire avec git tag -s sous Debian GNU/Linux lorsque je suis passé de pinentry-gnome3 à pinentry-curses (avec update-alternatives --config pinentry) pour faciliter l’accès à distance. Cela s'est produit uniquement avec git tag -s, pas avec gpg (par exemple gpg --clearsign) lui-même.

Le seul changement nécessaire pour que cela fonctionne à nouveau dans ce cas-ci consistait à ajouter export GPG_TTY=$(tty) à mes fichiers de démarrage Shell.

Je n'ai toutefois pas reçu le message d'erreur «Inapproprié ioctl pour le périphérique» mentionné comme indicateur de ce correctif dans une autre réponse à cette question.

Remarque: Etant donné que la cause de cette erreur était complètement différente de celle de ceux qui avaient suggéré export GPG_TTY=$(tty) auparavant (généralement en guise de soupçon) dans d'autres réponses à cette question, j'ai décidé que cette question nécessitait une autre réponse mentionnant que export GPG_TTY=$(tty) pouvait être la solution principale et unique nécessaire dans certains cas.

1
Axel Beckert

Vérifiez que votre clé est expirée. Une fois que vous avez corrigé la date d'expiration (inutile de créer une nouvelle clé sauf si vous le souhaitez), git fonctionnera normalement.

Une façon de réparer la clé expirée:

(Remarque: $ représente l'invite de la ligne de commande, tapez les commandes après l'invite; appuyez sur Entrée après chaque commande.)

$ gpg2 --list-keys pour trouver l'ID clé approprié (caractères après \ sur la ligne pub)

$ gpg2 --edit-key <key id> - ceci ouvre le shell gpg, avec invite changée en gpg>

gpg> expire - suivez les instructions pour définir une nouvelle date d'expiration pour la clé primaire

Ensuite, s'il y a des sous-clés qui ont expiré (sub apparaît sur la ligne), réinitialisez également leurs dates d'expiration:

gpg> key 1 - sélectionne la première sous-clé gpg> expire - suivez les instructions pour définir une nouvelle date d'expiration pour la sous-clé

Répétez cette opération pour chaque sous-clé suivante, si nécessaire.

1
leanne

Cela a fonctionné pour moi sur Ubuntu 18.04

Vérifiez votre clé gpg

gpg -K --keyid-format LONG

Si vous obtenez une réponse vide, générez une clé GPG

gpg --generate-key

relancez la première commande, vous devriez obtenir un résultat comme:

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]

définit la clé de chant git

git config --global user.singingkey 95A854E0593B3214

alors tu peux y aller! (--global est optionnel)

Alternativement, si vous ne vous dérange pas de signer avec votre clé ssh

git config commit.gpgsign false

notez que ceci n'est pas recommandé en raison d'un problème de sécurité selon cette question ici et ici

0
poon gilbert

J'avais créé une clé git avec 3 clés distinctes pour certify/sign/encrypt & la clé indiquée comme étant arrivée à expiration dans le futur (après quelques jours de travail correct):

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     ]

créé une nouvelle clé sans ajouter de sous-clés séparées pour résoudre le problème.

0
Stuart Cardall

Je l'utilise. Il prend en charge zsha et fonctionne sur le sous-système Windows pour Linux:

export GPG_TTY=$(tty)
0
Jamal Kaksouri

J'ai résolu le problème en installant brew install gpg2 puis en faisant git config --global gpg.program gpg2

0
Andres08P