gpg non è riuscito a firmare i dati in modo fatale: impossibile scrivere l'oggetto commit [Git 2.10.0]


319

Ho seguito alcuni articoli sugli attributi più belli della nota di rilascio di Git 2.10 . Passando attraverso il quale è stato aggiornato git a 2.10.0 e apportato modifiche al .gitconfigrisultato globale come segue:

[filter "lfs"]
    clean = git-lfs clean %f
    smudge = git-lfs smudge %f
    required = true
[user]
    name = xyz
    email = abc.def@gmail.com
    signingkey = AAAAAAA
[core]
    excludesfile = /Users/xyz/.gitignore_global
    editor = 'subl' --wait
[difftool "sourcetree"]
    cmd = opendiff \"$LOCAL\" \"$REMOTE\"
    path = 
[mergetool "sourcetree"]
    cmd = /Applications/SourceTree.app/Contents/Resources/opendiff-w.sh \"$LOCAL\" \"$REMOTE\" -ancestor \"$BASE\" -merge \"$MERGED\"
    trustExitCode = true
[alias]
    lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative
[color "diff"]
    old = red strike
    new = green italic

Ma ora che provo a firmare i miei commit con

git commit -a -S -m "message"

Vedo il seguente errore -

È necessaria una passphrase per sbloccare la chiave segreta

utente: "XYZ (firma digitale)"

Chiave RSA a 2048 bit, ID AAAAAAAA, creata 01/07/2016

errore: gpg non è riuscito a firmare i dati fatale: impossibile scrivere l'oggetto commit

Nota : posso ancora eseguire il commit delle modifiche utilizzandogit commit -a -m "message"

C'è un modo per superare lo stesso? O qualsiasi modifica richiesta in gpgconfigs per andare d'accordo con l'aggiornamento di git?


Aggiornamento 1

Anche alla ricerca di ulteriore utilità, seguendo C'è un modo per "autosign" si impegna in Git con una chiave GPG? . Ho già configurato la chiave usando

git config --global user.signingkey ED5CDE14(with my key) 
git config --global commit.gpgsign true

e ovviamente ottenendo lo stesso errore comunque.


3
Devo affrontare un problema simile. Ho disinstallato Git 2.8 (git-scm) su Windows. E installato 2.10. Ora ricevo gpg failed to sign the dataogni volta che uso -S. In 2.8, posso firmare un commit senza problemi. Non so cosa accada.
Illuminatore

5
L'aggiunta ha user.signingkeyrisolto il mio problema, stranamente.
Xavier Ho

1
@nullpointer Ho cancellato la mia risposta da lì, perché dopo aver dato un'occhiata profonda mi sono reso conto che è un duplicato!
Shayan Amani,

1
Per ironia della sorte, avevo cambiato la mia macchina per sistemare le cose da capo e alla fine ho cercato la mia domanda e nessuna delle soluzioni suggerite mi sembra abbastanza chiara per iniziare semplicemente.
Naman,

1
Per me la correzione era: git config user.nameera! = Nome usato durante la creazione della chiave PGP
stacksonstacks

Risposte:


464

Ho riscontrato questo problema con OSX.

Risposta originale:

Sembra che un aggiornamento di gpg (di brew) sia cambiato nella posizione di gpgto gpg1, puoi cambiare il binario dove git cerca il gpg:

git config --global gpg.program gpg1

Se non si dispone di gpg1: brew install gpg1.

Risposta aggiornata:

Sembra che gpg1 sia deprecato / "delicatamente spinto fuori uso" , quindi probabilmente dovresti effettivamente aggiornare a gpg2, sfortunatamente questo comporta un paio di passaggi / un po 'di tempo:

brew upgrade gnupg  # This has a make step which takes a while
brew link --overwrite gnupg
brew install pinentry-mac
echo "pinentry-program /usr/local/bin/pinentry-mac" >> ~/.gnupg/gpg-agent.conf
killall gpg-agent

La prima parte installa gpg2, e quest'ultima è un trucco necessario per usarlo . Per la risoluzione dei problemi, vedi questa risposta (anche se si tratta di Linux non brew), suggerisce un buon test:

echo "test" | gpg --clearsign  # on linux it's gpg2 but brew stays as gpg

Se questo test ha esito positivo (nessun errore / output include la firma PGP), è stato aggiornato correttamente all'ultima versione di gpg.

Ora dovresti essere in grado di utilizzare nuovamente la firma git!
Vale la pena notare che dovrai avere:

git config --global gpg.program gpg  # perhaps you had this already? On linux maybe gpg2
git config --global commit.gpgsign true  # if you want to sign every commit

Nota: dopo aver eseguito un commit firmato, è possibile verificarlo firmato con:

git log --show-signature -1

che includerà le informazioni gpg per l'ultimo commit.


7
L'impostazione di gpg.program su / usr / local / bin / gpg (no "1") l'ha risolto per me.
Iskar,

5
Sembra che sia stato rimosso un aggiornamento di gnupg2con i collegamenti brewsimbolici, quindi gpgho usato i collegamenti fissi brew link --overwrite gnupg2.
Brice,

8
hm ... non funziona. dà ancora il mio errore con l'accesso a xcode.
Albert T. Wong,

1
@DrBeco non è la posizione / il comportamento originale? Ho ancora lo stesso problema su osx (penso di aver aggiornato la mia birra abbastanza recentemente), gpg1è l'eseguibile ancora esportato.
Andy Hayden,

29
killall gpg-agent && gpg-agent --daemon --use-standard-socket --pinentry-program /usr/local/bin/pinentryfinalmente risolto il problema per me
Dan Bechard,

317

Se vengono utilizzati gnupg2 e gpg-agent 2.x, assicurarsi di impostare la variabile di ambiente GPG_TTY.

export GPG_TTY=$(tty)

Vedi la documentazione di GPG sui problemi comuni .


17
Se usi il pesce, inserisci set -x GPG_TTY (tty)il tuo profilo.
fasfsfgs,

@StuartCardall Qual è il punto del comando chown? In genere ti sarà già stato assegnato da un processo di sistema, quando hai effettuato l'accesso o creato la pseudo-tty. Se è di proprietà di qualcun altro e non sei root, fallirà. Se il gruppo è qualcos'altro, probabilmente non ha importanza e gli utenti di solito non saranno nel gruppo tty.
poolie,

@poolie - è importante se si sua rootsu un server remoto
Stuart Cardall

6
Ho aggiunto la variabile a ~/.zshrce posso effettuare nuovamente il commit, ora che si collega correttamente al terminale. Grazie per tutto il vostro aiuto!
Alex Gurrola,

Questo è anche nelle istruzioni di GitHub: help.github.com/articles/telling-git-about-your-gpg-key
bonh

198

Se tutto fallisce, usa GIT_TRACE=1per provare a vedere cosa sta facendo effettivamente Git:

$ GIT_TRACE=1 git commit -m "Add page that always requires a logged-in user"
20:52:58.902766 git.c:328               trace: built-in: git 'commit' '-vvv' '-m' 'Add page that always requires a logged-in user'
20:52:58.918467 run-command.c:626       trace: run_command: 'gpg' '--status-fd=2' '-bsau' '23810377252EF4C2'
error: gpg failed to sign the data
fatal: failed to write commit object

Ora esegui manualmente il comando non riuscito:

$ gpg -bsau 23810377252EF4C2
gpg: skipped "23810377252EF4C2": Unusable secret key
gpg: signing failed: Unusable secret key

Risulta, la mia chiave era scaduta, gitnon era da biasimare.


34
Bel consiglio per il debug. +1
VonC,

4
Questo in realtà mi ha aiutato a risolvere il mio problema ed è una soluzione per ogni tipo di problema con questo messaggio di stato. +1
xHocquet

Grazie per il debugging. Anche la mia chiave era scaduta.
Sgnl,

2
Grazie! Questo mi ha portato al mio problema. Stranamente il mio locale .git/configaveva un nameprogetto specificato che non corrispondeva alla mia e-mail di firma. Questo è stato sufficiente per rifiutarlo.
Kross,

1
Bene, l'esecuzione gpg -bsau <key>sul mio computer non esegue nulla. Supponiamo che ciò richieda troppo tempo per essere eseguito? O significa che la chiave va bene da usare? @VonC qualche approfondimento?
Naman,

82

Ho FATTO attraverso questa breve e semplice ricetta:

Auto-sign si impegna su macOS (a livello globale e con IDE diversi):

Ottieni il tuo signingkeyin questo modo .

brew install gnupg gnupg2 pinentry-mac
git config --global user.signingkey <YOUR_SIGNING_KEY>
git config --global commit.gpgsign true
git config --global gpg.program gpg

Inserisci quanto segue nel gpg.conffile (modifica il file con il nano ~/.gnupg/gpg.confcomando):

no-tty

Inserisci quanto segue nel gpg-agent.conffile (modifica il file con il nano ~/.gnupg/gpg-agent.confcomando):

pinentry-program /usr/local/bin/pinentry-mac

Aggiornamento :

Potrebbe essere necessario eseguire il killall gpg-agentcomando dopo aver modificato il file di configurazione gpg.conf, in base ai commenti. Come dice il comando autoesplicativo, questo comando interromperà l'agente GPG (Gnu Privacy Guard).


2
Puoi anche spiegare cosa stanno facendo quei comandi? Aiuterà con la comprensione.
Un droide il

7
Ho anche dovuto eseguire un killall gpg-agentdopo aver impostato i file di configurazione, quindi ha funzionato!
Pascal Ludwig

Come facciamo a sapere che possiamo fidarci delle persone dietro pinentry-mac? Non dico che non possiamo, ma l'organizzazione GPGTools è un backup da parte di un team molto piccolo e il repository ha solo 5 collaboratori rispetto all'uso brew install gnupgche sfrutta il lavoro di gnupg.org .
Sunknudsen,

Nel caso in cui aiuti gli altri, il mio problema era che avevo un user.signingkeyset locale non valido , che non avevo notato nella mia configurazione sourcetree, né le mie impostazioni globali (perché non pensavo di guardare la configurazione locale) Garantire sia local ( git config --local --get user.signingkey) e global ( git config --global --get user.signingkey) sono uguali o, meglio ancora, disinseriscono quello locale se non è valido ( git config --local --unset user.signingkey)
Glenn 'devalias'

su OSX (10.13.06), fornisce il seguente errore, bash: programma pinentry: comando non trovato
cgl

59

Può aiutare a uccidere il processo gpg-agentche potrebbe essere bloccato con vecchi dati. Quindi il nuovo gpg-agentiniziato richiederebbe la password.


2
Questo è stato per me.
Danyim,

12
Usa gpg-agent --daemonper avviarlo
FooBar il

1
ho dovuto riavviare anche gpg-agent
GnrlBzik il

8
Per killall gpg-agent
terminare

1
su Ubuntugpgconf --kill gpg-agent
Adam,

38

Segui l'URL seguente per impostare il commit firmato https://help.github.com/en/articles/telling-git-about-your-signing-key

se ottenere ancora gpg non è riuscito a firmare i dati fatali: impossibile scrivere l'oggetto commit

questo non è un problema con git, questo è con GPG seguire i passaggi seguenti

1.gpg --version

  1. echo "test" | gpg --clearsign

se sta mostrando:

gpg: signing failed: Inappropriate ioctl for device
gpg: [stdin]: clear-sign failed: Inappropriate ioctl for device
  1. quindi utilizzare export GPG_TTY=$(tty)

4.quindi prova nuovamente echo "test" | gpg --clearsign a ottenere la firma PGP.

  1. git config -l | grep gpg

gpg.program = gpg commit.gpgsign = true

6.Apply git commit -S -m "commitMsz"


1
questa è stata la soluzione per me! Molte grazie!
upInCloud

Eccellente guida su come capire se questo è il problema.
Philippe Signoret,

Questo è quello che ha fatto per me. Molte grazie!
Allan Guwatudde,

export GPG_TTY=$(tty)era il trucco. Aggiunto questo al mio .zshrcfile
Shane Stillwell il

22

A chiunque si trovi ad affrontare questo problema su macchine MacOS , prova questo:

  1. brew uninstall gpg
  2. brew install gpg2
  3. brew install pinentry-mac (se necessario)
  4. gpg --full-generate-key Crea una chiave usando un algoritmo.
  5. Ottieni la chiave generata eseguendo: gpg --list-keys
  6. Imposta la chiave qui git config --global user.signingkey <Key from your list>
  7. git config --global gpg.program /usr/local/bin/gpg
  8. git config --global commit.gpgsign true
  9. Se vuoi esportare la tua chiave su GitHub, allora: gpg --armor --export <key> e aggiungi questa chiave a GitHub alle chiavi GPG: https://github.com/settings/keys (con la linea START e END inclusa)

Se il problema persiste:

test -r ~/.bash_profile && echo 'export GPG_TTY=$(tty)' >> ~/.bash_profile

echo 'export GPG_TTY=$(tty)' >> ~/.profile

Se il problema persiste:

Installa https://gpgtools.org e firma la chiave che hai usato premendo Sign dalla barra dei menu: Key -> Sign

Se il problema persiste:

Vai a: il tuo globale .gitconfigdel file che nel mio caso e ': /Users/gent/.gitconfig e modificare il .gitconfig di file (si prega di assicurarsi email e nome sono gli stessi, con quello che si è creato durante la generazione della chiave) :

[user]
	email = gent@youremail.com
	name = Gent
	signingkey = <YOURKEY>
[gpg]
	program = /usr/local/bin/gpg
[commit]
	gpsign = true
	gpgsign = true
[filter "lfs"]
	process = git-lfs filter-process
	required = true
	clean = git-lfs clean -- %f
	smudge = git-lfs smudge -- %f
[credential]
	helper = osxkeychain


2
L'aggiunta di 'gpsign = true' in .gitconfig l'ha risolto per me
Pierre

18

I miei due centesimi qui:

Quando crei e aggiungi una chiave a gpg-agent, definisci qualcosa chiamato passphrase. Ora che passphrasea un certo punto scade e gpgdevi immetterlo di nuovo per sbloccare la chiave in modo da poter ricominciare a firmare.

Quando si utilizza qualsiasi altro programma che si interfaccia con gpg, gpgla richiesta di inserire la passphrase non viene visualizzata (fondamentalmente gpg-agentquando daemonized non può mostrare la finestra di input instdin ).

Una delle soluzioni è gpg --sign a_file.txtquindi inserire la passphrase che hai inserito quando hai creato la chiave e quindi tutto dovrebbe andare bene ( gpg-agentdovrebbe firmare automaticamente)

Vedi questa risposta su come impostare timeout più lunghi per la tua passphrase in modo da non doverlo fare sempre.

Oppure puoi rimuovere completamente la passphrase con ssh-keygen -p

Modifica: fai una man gpg-agentlettura di alcune cose su come fare accadere automaticamente quanto sopra e aggiungi le righe:

GPG_TTY=$(tty)
export GPG_TTY

sul tuo .bashrc se stai usando bash (questa è la risposta corretta ma sto anche tenendo il mio treno di pensieri sopra)


Grazie @ george-daramouskas, questo era il mio problema.
Nic Barker,

10

Aggiornamento ottobre 2016: il numero 871 menzionava "La firma ha smesso di funzionare in Git 2.9.3"

Git per Windows 2.10.1 rilasciato due giorni fa (4 ottobre 2016) ha corretto la firma GPG interattiva di commit e tag.

la recente modifica di gpg-sign in git (che non introduce alcun problema su Linux) espone un problema nel modo in cui, su Windows, non-MSYS2-git interagisce con MSYS2-gpg.


Risposta originale:

Leggendo " 7.4 Git Tools - Firma il tuo lavoro ", presumo tu abbia il tuo "user.signingkey " set di configurazione.

L'ultimo grande refactoring (prima di Git 2.10) attorno a gpg era in commit 2f47eae2a , qui quel messaggio di errore è stato spostato ingpg-interface.c

Un log su quel file rivela la recente modifica di commit af2b21e (Git 2.10)

gpg2 utilizza già il formato lungo per impostazione predefinita, ma la maggior parte delle distribuzioni sembra che "gpg" sia la versione 1.x precedente per motivi di compatibilità. E le versioni precedenti di gpg mostrano solo l'ID breve a 32 bit, che è abbastanza insicuro.

Questo in realtà non ha importanza per la verifica stessa: se la verifica viene superata, la firma pgp è buona.
Ma se in realtà non hai ancora la chiave e vuoi recuperarla o vuoi controllare esattamente quale chiave è stata utilizzata per la verifica e vuoi controllarla, dovremmo specificare la chiave con maggiore precisione.

Quindi controlla come hai specificato la tua user.signingkeyconfigurazione e la versione di gpg che stai usando (gpg1 o gpg2), per vedere se quelli hanno qualche effetto sul messaggio di errore.

Esiste anche il commit 0581b54 che modifica la condizione per il gpg failed to sign the datamessaggio di errore (in aggiunta al commit 0d2b664 ):

Al momento non leggiamo affatto da Stderr. Tuttavia, ci vuole in una patch futura, quindi questo prepara anche noi lì (e in quel caso gpg fa scrittura prima di leggere tutto l'input, anche se ancora una volta, è improbabile che un UID chiave si riempirà un buffer pipe).

Commit 4322353 mostra che gpg ora utilizza un file temporaneo, quindi potrebbero esserci problemi giusti.

Passiamo all'utilizzo di un oggetto tempfile, che gestisce i casi difficili per noi e aggiungiamo la chiamata di pulizia mancante.


Ho il mio user.signingkeyset di configurazione. Anche usando gpg (GnuPG) 2.0.3.
Naman,

@nullpointer Ho modificato la mia risposta. Puoi verificare se il problema persiste con Gti per Windows 2.10.1.
VonC,

scusate il ritardo nell'aggiornamento, lavorando su MacOSX non su Windows, quindi non posso verificarlo.
Naman,

10

La traccia git è stata molto rivelatrice per la mia situazione ...

   GIT_TRACE=1 git commit -m "a commit message"
   13:45:39.940081 git.c:344               trace: built-in: git commit -m 'a commit message'
   13:45:39.977999 run-command.c:640       trace: run_command: gpg --status-fd=2 -bsau 'full name <your-email@domain.com>'
   error: gpg failed to sign the data
   fatal: failed to write commit object

Avevo bisogno di generare una chiave iniziale per il formato che gitstava verificando. È meglio copiare il valore passato -bsausopra nei registri così com'è e utilizzare di seguito.

Quindi diventa,

   gpg --quick-generate-key "full name <your-email@domain.com>"

Quindi ha funzionato.

Spero che aiuti.


Questo ha funzionato per me ed è git tracestato davvero utile.
Philip Oghenerobo Balogun,

1
amico ... non puoi immaginare quante ore ho trascorso cercando di risolvere questo problema fino a quando non ho raggiunto la tua risposta ... è stata la denominazione della chiave da sempre ... grazie! grazie! grazie!
giomanda,

8

Usando cygwin, di recente sono passato a gpg2. Quindi ho avuto lo stesso problema per la firma con git dopo l'impostazione git config gpg.program gpg2.

Prova echo "test" | gpg2 --clearsigna vedere se gpg2 funziona. Ho trovato la soluzione più semplice da impostare git config gpg.program gpg, perché funziona. Ma otterrai anche un errore migliore in questo modo, ad esempio che devi installare pinentry.


In realtà, su alcune distro Linux potresti avere lo stesso problema. Git usa sempre gpg, non gpg2. Vedi anche: stackoverflow.com/questions/34766123/...
rugk

Ciò ha rivelato per me l'errore gpg: signing failed: Inappropriate ioctl for deviceche può essere risolto da export GPG_TTY=$(tty). Fonte: github.com/keybase/keybase-issues/issues/2798
swiknaba

8

Su OS X, usando gnupg2via brew ho dovuto semplicemente uccidere l'agente gpg , a volte succede:

pkill -9 gpg-agent

E imposta la envvariabile se necessario:

export GPG_TTY=$(tty)

Vedi anche problemi comuni di GPG e anche questa risposta qui.


2
Questo ha funzionato anche per me. Ho creato un nuovo alias alias fix-gpg='pkill -9 gpg-agent && export GPG_TTY=$(tty)'.
Oalders,

1
Funziona bene, grazie. Non è nemmeno necessario impostare successivamente la variabile env.
Nick Rameau,

8

Ho visto risposte simili, ma niente esattamente come quello che ha funzionato per me. Su Linux, ho dovuto uccidere e riavviare il mio gpg-agentcon:

$ pkill gpg-agent
$ gpg-agent --daemon
$ git commit ...

Questo ha fatto il trucco per me. Sembra che tu debba aver user.signingkeyimpostato la tua chiave privata anche da quello che dicono altri commenti.

$ git config --global user.signingkey [your_key_hash]


6

Ho riscontrato questo errore su Ubuntu 18.04 e si è scoperto che la mia chiave era scaduta .

Per vedere questo, ho eseguito questo e ha confermato che le mie chiavi erano scadute:

gpg --list-keys

Per correggere ciò, ho eseguito (utilizzando l'ID visualizzato nel comando precedente):

gpg --edit-key <ID>

Da lì, ho esteso la scadenza di key 0e key 1seguendo queste istruzioni che si sono ridotte a digitare key 0poi expiree seguendo le istruzioni. Quindi ripetere perkey 1 .

Successivamente, per provare questo, ho eseguito:

echo test | gpg --clearsign

E prima della correzione, non è riuscito con l'errore:

gpg: nessuna chiave segreta predefinita: nessuna chiave segreta
gpg: [stdin]: clear-sign fallito: nessuna chiave segreta

Ma dopo la correzione, lo stesso comando ha firmato con successo il messaggio, quindi sapevo che le cose funzionavano di nuovo!


La conferma di questo ha risolto un problema durante l'importazione di una chiave valida da Mac OSX Catalina a CentOS7. Ho combattuto con questa bestia per oltre due ore cercando di capire perché continuava a chiedere una password tra le altre cose. Stranamente, era già impostato per non scadere mai e l'ho impostato per non scadere mai.
Cody B,

5

Ho riscontrato lo stesso problema. Sono felice di segnalare che il problema non riguarda git 2.10.0ma con gnupg 1.4.21.

Il downgrade temporaneo di gnupg alla 1.4.20 ha risolto il problema per me.

Se stai usando homebrew e hai aggiornato i tuoi pacchetti come ho fatto io, probabilmente puoi semplicemente correre brew switch gnupg 1.4.20per tornare indietro.


3

Assicurati di avere l'e-mail impostata correttamente.

git config --global user.email "user@example.com"

1
Questa è l'unica soluzione che ha funzionato per me, è stato utile seguire il metodo corretto di generazione di una chiave GPG tramite github
Naz,

1
Nel mio caso il problema era che stavo usando una e-mail aziendale in un repository specifico, per il quale non avevo generato la chiave PGP.
Rubick,

3

Se l'e-mail associata all'uid della tua chiave GPG è diversa dall'e-mail che stai utilizzando in git, dovrai aggiungere un altro ID utente alla tua chiave O usare una chiave che corrisponda esattamente all'e-mail.

È possibile aggiungere un altro UID utilizzando:

$ gpg --edit-key

Consulta mo /superuser/293184/one-gnupg-pgp-key-pair-two-emails


1
Questo è stato per me. Cristo, come mai non esiste un messaggio di errore più informativo di "mancata firma dei dati".
Alec,

3

Devo aver accidentalmente aggiornato gpg in qualche modo perché ho ottenuto questo dopo aver provato a provare se gpg funziona:

gpg: WARNING: server 'gpg-agent' is older than us (2.1.21 < 2.2.10)
gpg: Note: Outdated servers may lack important security fixes.
gpg: Note: Use the command "gpgconf --kill all" to restart them.

La corsa l'ha gpgconf --kill allriparato per me.

Spero che questo aiuti qualcuno.


2

Ho avuto un problema simile con le ultime fonti Git (2.12.2) costruite insieme alle ultime fonti di tutte le sue dipendenze (Zlib, Bzip, cURL, PCRE, ReadLine, IDN2, iConv, Unistring, ecc.).

Si scopre che libreadlinestava dando problemi a GnuPG:

$ gpg --version
gpg: symbol lookup error: /usr/local/lib/libreadline.so.7: undefined symbol: UP

E, naturalmente, cercare di ottenere informazioni utili da Git con -vvvfallito, quindi il fallimento è stato un mistero.

Per risolvere l'errore PGP dovuto a ReadLine, segui le istruzioni in Impossibile aggiornare o utilizzare il gestore pacchetti - errore gpg :

Nel terminal:

ls /usr/local/lib

c'erano un sacco di librerie readline (libreadline.so.BLAH-BLAH) quindi io:

su
mkdir temp
mv /usr/local/lib/libreadline* temp
ldconfig

2

Le risposte sopra sono fantastiche ma non hanno funzionato per me. Ciò che ha risolto il mio problema è stato l'esportazione sia del pubblico che del segreto chiavi .

elenca le chiavi dalla macchina da cui stiamo esportando

$ gpg --list-keys
/home/user/.gnupg/pubring.gpg
--------------------------------
pub 1024D/ABCDFE01 2008-04-13
uid firstname lastname (description) <email@example.com>
sub 2048g/DEFABC01 2008-04-13

esporta le chiavi

$ gpg --output mygpgkey_pub.gpg --armor --export ABCDFE01
$ gpg --output mygpgkey_sec.gpg --armor --export-secret-key ABCDFE01

vai alla macchina che stiamo importando e importiamo

$ gpg --import ~/mygpgkey_pub.gpg
$ gpg --allow-secret-key-import --import ~/mygpgkey_sec.gpg

bingo bongo, il gioco è fatto!

riferimento: https://www.debuntu.org/how-to-importexport-gpg-key-pair/

ps. Le mie chiavi sono state originariamente create su Bootcamp Windows 7 e le ho esportate sul mio Mac Air (stessa macchina fisica, diversa praticamente)


2

Sono su Ubuntu 18.04 e ho avuto lo stesso errore, ero preoccupato anche per settimane. Alla fine ho capito che gpg2 non punta a nulla. Quindi corri semplicemente

git config --global gpg.program gpg

E tada, funziona come un fascino.

Commesso firmato

I tuoi commit ora avranno un tag verificato con loro.


2

Mi sono imbattuto in questo errore non a causa di problemi di configurazione, ma perché la mia chiave era scaduta. Il modo più semplice per estenderne la validità su OSX è aprire l'app GPG Keychain (se installata) e ti chiederà automaticamente di estenderla. Due clic e il gioco è fatto. Spero che questo aiuti i compagni Googler :)


2

Questo ha cominciato ad accadere all'improvviso per me su Ubuntu, non sono sicuro se qualche recente aggiornamento lo abbia fatto, ma nessuno dei problemi esistenti era applicabile per me (avevo GPG_TTYimpostato, ho provato a uccidere l'agente ecc.). Il gpgcomando standalone non è riuscito con questo errore:

$ echo "test" | gpg --clearsign
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

test
gpg: signing failed: Operation cancelled
gpg: [stdin]: clear-sign failed: Operation cancelled

Ho provato a correre gpgcon l' --debug-allopzione e ho notato l'output di seguito:

gpg: DBG: chan_3 <- INQUIRE PINENTRY_LAUNCHED 27472 gnome3 1.1.0 /dev/pts/6 screen-256color -
gpg: DBG: chan_3 -> END
gpg: DBG: chan_3 <- ERR 83886179 Operation cancelled <Pinentry>
gpg: signing failed: Operation cancelled

Quanto sopra indica che c'è qualche problema con il pinentryprogramma. Gpg normalmente funziona pinentry-cursesper me, quindi l'ho cambiato in pinentry-tty(prima dovevo aptitude installfarlo) e l'errore è andato via (anche se non riesco più a inserire la password a schermo intero, ma non mi piace comunque). Per effettuare questa modifica, ho dovuto aggiungere la linea pinentry-program /usr/bin/pinentry-ttyper ~/.gnupg/gpg-agent.confe uccidere l'agente con gpgconf --kill gpg-agent(essa viene riavviato la prossima volta).


1

Nessuna delle risposte precedenti sembrava corrispondere al mio problema. Il mio gpgbinario ( /usr/local/bin/gpg -> /usr/local/MacGPG2/bin/gpg2) è stato installato come parte di GPG Suite , piuttosto che da brew.

Tuttavia, ho sentito che il consiglio si riduceva a "usare qualsiasi gpgbinario sia l'ultimo disponibile sulla birra". Quindi ho provato:

brew update
brew upgrade git
brew install gpg

# the following are suggestions from brew's Caveats, to make `/usr/local/bin/gpg`
# point to the brew binary:
rm '/usr/local/bin/gpg'
brew link --overwrite gnupg2

Ho verificato di aver correttamente modificato il file gpgon $PATHto my to the new eseguable from brew:

🍔 which gpg
/usr/local/bin/gpg
🍔 ls -l /usr/local/bin/gpg
lrwxr-xr-x  1 burger  admin  33 Feb 13 13:22 /usr/local/bin/gpg -> ../Cellar/gnupg2/2.0.30_3/bin/gpg

E ho anche detto esplicitamente a git quale gpgbinario usare:

git config --global gpg.program gpg

Beh, forse non è completamente a tenuta stagna, in quanto sensibile al percorso. In realtà non sono arrivato al punto di confermare senza dubbio che Git era passato a invocare la birra gpg.

In ogni caso: nulla di tutto ciò è stato sufficiente per fare git commitfirmare nuovamente con successo i miei commit.


La cosa che ha funzionato per me alla fine è stato aggiornare GPG Suite . Stavo eseguendo la versione 2016.7 e ho scoperto che l'aggiornamento a 2016.10 ha risolto il problema per me.

Ho aperto GPG Keychain.appe ho premuto "Controlla aggiornamenti ...". Con la nuova versione: i commit firmati hanno funzionato di nuovo correttamente.


Ho provato ad aggiornare all'ultima versione ... che non ha funzionato neanche. cercando di accedere a xcode.
Albert T. Wong,


1

Molto simile a @birchlabs, dopo molte ricerche / scavi ho scoperto che non era GPG, ma piuttosto GPG Suite. L'ho fatto cask reinstall gpg-suitee lo ha risolto per me.


0

Se questo è appena accaduto in modo casuale e ha funzionato perfettamente in passato, come nel mio caso, prova a disconnetterti ( cmd+shift+q) e ad accedere nuovamente. Ha funzionato per me


0

Nel mio caso, nessuna delle soluzioni menzionate nelle altre risposte ha funzionato. Ho scoperto che il problema era specifico di un repository. L'eliminazione e la clonazione del repository hanno nuovamente risolto il problema.


0

Un po 'strano, ma assicurati che il tuo terminale sia abbastanza grande! Puoi sapere se è troppo piccolo eseguendo echo test | gpg --clearsign: ti darà un messaggio di errore abbastanza ovvio che ti informerà. Se non è abbastanza grande, il tuo agente GPG non può visualizzare la sua piccola scatola di ncurses.

Questo non si applica se si utilizza un agente GUI o qualcosa che non utilizza ncurses.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.