O gpg falhou ao assinar os dados fatais: falha ao gravar o objeto de confirmação [Git 2.10.0]


319

Segui alguns artigos sobre os atributos bonitos na nota de lançamento do Git 2.10 . O processo de atualização do git para a 2.10.0 e as alterações para global .gitconfigresultaram da seguinte forma:

[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

Mas agora que tento assinar meus commits usando

git commit -a -S -m "message"

Eu vejo o seguinte erro -

Você precisa de uma senha para desbloquear a chave secreta

usuário: "XYZ (assinado digitalmente)"

Chave RSA de 2048 bits, ID AAAAAAAA, criada 01/01/2016

erro: gpg não conseguiu assinar os dados fatal: falha ao gravar o objeto de confirmação

Nota - Ainda posso confirmar alterações usandogit commit -a -m "message"

Existe uma maneira de superar o mesmo? Ou alguma alteração necessária nas gpgconfigurações para se dar bem com a atualização do git?


Atualização 1

Também buscando mais utilidade, seguindo Existe uma maneira de "autossignar" confirmações no Git com uma chave GPG? . Eu já configurei a chave usando

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

e, obviamente, obtendo o mesmo erro de qualquer maneira.


3
Eu enfrento um problema semelhante. Desinstalei o Git 2.8 (git-scm) no Windows. E instalado 2.10. Agora eu recebo gpg failed to sign the datatoda vez que uso -S. No 2.8, posso assinar um commit sem problemas. Não sei o que aconteceu
Illuminator

5
A adição user.signingkeycorrigiu meu problema, estranhamente.
Xavier Ho

1
@nullpointer Eu apaguei a minha resposta de lá, porque depois de olhar profundamente, percebi que era uma duplicata!
Shayan Amani

1
Por uma ironia, eu mudei de máquina para configurar as coisas novamente e acabei procurando minha própria pergunta, e nenhuma das soluções sugeridas parece suficientemente limpa para mim, para começar simplesmente.
Naman

1
Para mim correção foi: git config user.namefoi = nome usado ao criar chave PGP!
stacksonstacks

Respostas:


464

Corri para esse problema com o OSX.

Resposta original:

Parece que uma atualização de gpg (da distribuição) foi alterada para o local de gpgpara gpg1, você pode alterar o binário em que o git consulta o gpg:

git config --global gpg.program gpg1

Se você não tem gpg1: brew install gpg1.

Resposta atualizada:

Parece que o gpg1 está sendo preterido / "suavemente eliminado" , então você provavelmente deve atualizar para o gpg2, infelizmente isso envolve mais algumas etapas / um pouco de 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

A primeira parte instala o gpg2, e a última é um hack necessário para usá-lo . Para solucionar problemas, consulte esta resposta (embora seja sobre linux e não brew), ela sugere um bom teste:

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

Se este teste for bem-sucedido (nenhum erro / saída inclui assinatura PGP), você atualizou com êxito a versão mais recente do gpg.

Agora você deve poder usar a assinatura git novamente!
Vale a pena notar que você precisará ter:

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: Depois de executar uma confirmação assinada, você pode verificar se está assinado com:

git log --show-signature -1

que incluirá informações de gpg para o último commit.


7
Definir gpg.program como / usr / local / bin / gpg (no "1") o corrigiu para mim.
Iskar 22/11

5
Parece uma atualização de gnupg2com brewmexeu com links simbólicos, assim, gpgfoi removido, eu tinha ligações correção usando brew link --overwrite gnupg2.
Brice

8
hm ... não funciona. ainda dá o meu erro ao entrar no xcode.
Albert T. Wong

1
@DrBeco não é esse o local / comportamento original? Ainda tenho o mesmo problema no osx (acho que atualizei meu brew recentemente), gpg1é o executável ainda exportado.
Andy Hayden

29
killall gpg-agent && gpg-agent --daemon --use-standard-socket --pinentry-program /usr/local/bin/pinentryfinalmente, fixa-lo para mim
Dan Bechard

317

Se o gnupg2 e o gpg-agent 2.x forem utilizados, defina a variável de ambiente GPG_TTY.

export GPG_TTY=$(tty)

Consulte a documentação do GPG sobre problemas comuns .


17
Se estiver usando peixe, coloque set -x GPG_TTY (tty)no seu perfil.
fasfsfgs

@StuartCardall Qual é o objetivo do comando chown? Normalmente, ele já foi atribuído a você por um processo do sistema, quando você efetuou login ou criou o pseudo-tty. Se ele pertence a outra pessoa e você não é root, isso irá falhar. Se o grupo for outra coisa, provavelmente não importa, e os usuários normalmente não estarão no grupo tty.
poolie

@poolie - importa se você supara rootem um servidor remoto
Stuart Cardall

6
Eu adicionei a variável ~/.zshrce posso fazer confirmações novamente, agora que ela se conecta corretamente ao terminal. Obrigado por toda sua ajuda!
Alex Gurrola

Esta é também nas instruções GitHub: help.github.com/articles/telling-git-about-your-gpg-key
bonh

198

Se tudo falhar, use GIT_TRACE=1para tentar ver o que o git está realmente fazendo:

$ 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

Agora execute o comando com falha manualmente:

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

Acontece que minha chave expirou, gitnão era a culpa.


34
Ótima dica para depuração. +1
VonC 29/11

4
Isso realmente me ajudou a resolver meu próprio problema e é uma solução para todos os tipos de problemas com essa mensagem de status. 1
xHocquet

Obrigado pela depuração. Minha chave também expirou.
SGNL

2
Obrigado! Isso me levou ao meu problema. Curiosamente, meu local .git/configtinha um nameespecificado em um projeto que não correspondia ao meu email de assinatura. Isso foi suficiente para rejeitá-lo.
Kross

1
Bem, executar gpg -bsau <key>na minha máquina não executa nada. Isso deve demorar muito para ser executado? Ou isso significa que a chave está boa para ser usada? @VonC alguma ideia?
Naman

82

Eu FEITO -lo através deste curto e fácil receita:

Confirmação de assinatura automática no macOS (globalmente e com diferentes IDEs):

Obtenha seu signingkeyem desta forma .

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

Coloque o seguinte no gpg.confarquivo (editar arquivo com o nano ~/.gnupg/gpg.confcomando):

no-tty

Coloque o seguinte no gpg-agent.confarquivo (editar arquivo com o nano ~/.gnupg/gpg-agent.confcomando):

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

Atualização :

Pode ser necessário executar o killall gpg-agentcomando após editar o arquivo de configurações gpg.conf, de acordo com os comentários. Como o comando auto-explicativo diz, esse comando encerrará o agente GPG (Gnu Privacy Guard).


2
Você também pode explicar o que esses comandos estão fazendo? Isso ajudará na compreensão.
A Droid

7
Eu também tive que executar um killall gpg-agentapós definir os arquivos de configuração, então funcionou!
28819 Pascal Ludwig

Como sabemos que podemos confiar nas pessoas por trás pinentry-mac? Não digo que não podemos, mas a organização do GPGTools é apoiada por uma equipe muito pequena e o repositório tem apenas 5 colaboradores versus o uso, o brew install gnupgque alavanca o trabalho do gnupg.org .
sunknudsen

Caso isso ajude outras pessoas, meu problema era que eu tinha um user.signingkeyconjunto local inválido , que eu não havia notado na minha configuração de sourcetree, nem nas minhas configurações globais (porque não pensei em olhar para a configuração local git config --local --get user.signingkey). e global ( git config --global --get user.signingkey) são iguais ou, melhor ainda, desativam o local se for inválido ( git config --local --unset user.signingkey)
Glenn 'devalias' 25/11/19

no OSX (10.13.06), ele fornece o seguinte erro, bash: pinentry-program: command not found
cgl

59

Pode ajudar a matar o processo gpg-agentque pode ficar com os dados antigos. Então, o novo gpg-agentiniciado pedia senha.


2
Isso fez por mim.
Danyim

12
Use gpg-agent --daemonpara iniciá-lo
FooBar

1
eu tive que reiniciar gpg-agent bem
GnrlBzik

8
Para matar o processo no macOS:killall gpg-agent
até

1
no ubuntugpgconf --kill gpg-agent
Adam

38

Siga o URL abaixo para configurar a confirmação assinada https://help.github.com/en/articles/telling-git-about-your-signing-key

se ainda conseguir o gpg falhar ao assinar os dados fatais: falha ao gravar o objeto de confirmação

isso não é problema com o git, isso é com o GPG, siga as etapas abaixo

1gpg --version

  1. echo "test" | gpg --clearsign

se estiver mostrando:

gpg: signing failed: Inappropriate ioctl for device
gpg: [stdin]: clear-sign failed: Inappropriate ioctl for device
  1. então use export GPG_TTY=$(tty)

4. tente novamente echo "test" | gpg --clearsign em qual assinatura PGP é obtida.

  1. git config -l | grep gpg

gpg.program = gpg commit.gpgsign = true

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


1
essa foi a solução para mim! Muito obrigado!
precisa saber é o seguinte

Excelente explicação de como descobrir se esse é o problema.
Philippe Signoret

Foi isso que fez por mim. Muito obrigado!
Allan Guwatudde

export GPG_TTY=$(tty)foi o truque. Adicionado isso ao meu .zshrcarquivo
Shane Stillwell 28/03

22

Para quem está enfrentando esse problema em máquinas MacOS , tente o seguinte:

  1. brew uninstall gpg
  2. brew install gpg2
  3. brew install pinentry-mac (se necessário)
  4. gpg --full-generate-key Crie uma chave usando um algoritmo.
  5. Obtenha a chave gerada executando: gpg --list-keys
  6. Coloque a chave aqui 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 você deseja exportar sua chave para o GitHub, em seguida: gpg --armor --export <key> e adicione essa chave ao GitHub nas chaves GPG: https://github.com/settings/keys (com as linhas START e END incluídas)

Se o problema persistir:

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

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

Se o problema persistir:

Instale https://gpgtools.org e assine a tecla que você usou pressionando Sign na barra de menus: Key -> Sign

Se o problema persistir:

Ir para: o mundial .gitconfigde arquivo que no meu caso é em: /Users/gent/.gitconfig E modificar o .gitconfig arquivo (por favor, certifique-mail e nome são os mesmos com o que você criou ao gerar o Key) :

[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
Adicionando 'gpsign = true' em .gitconfig fixa-lo para mim
Pierre

18

Meus dois centavos aqui:

Ao criar e adicionar uma chave ao gpg-agent, você define algo chamado passphrase. Agora que passphraseem algum momento expira, é gpgnecessário digitá-lo novamente para desbloquear sua chave, para que você possa começar a assinar novamente.

Quando você usa qualquer outro programa que interfaces com gpg, gpgé aviso para que você digite sua senha que não aparecem (basicamente gpg-agentquando daemon não pode mostrar-lhe o diálogo de entrada na stdin).

Uma das soluções é gpg --sign a_file.txtinserir a senha que você inseriu ao criar sua chave e tudo ficará bem ( gpg-agentdeve assinar automaticamente)

Veja esta resposta sobre como definir tempos limite mais longos para sua senha, para que você não precise fazer isso o tempo todo.

Ou você pode remover completamente a senha com ssh-keygen -p

Edit: Faça um man gpg-agentpara ler algumas coisas sobre como fazer com que o acima aconteça automaticamente e adicione as linhas:

GPG_TTY=$(tty)
export GPG_TTY

no seu .bashrc se você estiver usando o bash (esta é a resposta correta, mas eu também estou mantendo minha linha de pensamento acima)


Obrigado @ george-daramouskas, este foi o meu problema.
Nic Barker

10

Atualização em outubro de 2016: a edição 871 mencionou "A assinatura parou de funcionar no Git 2.9.3"

O Git para Windows 2.10.1, lançado há dois dias (4 de outubro de 2016), corrigiu a assinatura do GPG interativo de confirmações e tags.

a recente mudança do gpg-sign no git (que não apresenta problemas no Linux) expõe um problema na maneira como, no Windows, o não-MSYS2-git interage com o MSYS2-gpg.


Resposta original:

Lendo " 7.4 Git Tools - Signing Your Work ", presumo que você tenha " user.signingkey" sua configuração definida.

A última grande refatoração (anterior ao Git 2.10) em torno do gpg estava no commit 2f47eae2a , aqui a mensagem de erro foi movida paragpg-interface.c

Um log nesse arquivo revela a recente alteração no commit af2b21e (Git 2.10)

O gpg2 já usa o formato longo por padrão, mas a maioria das distribuições ainda parece ter "gpg" como a versão 1.x mais antiga devido a motivos de compatibilidade. E versões anteriores do gpg mostram apenas o ID curto de 32 bits, o que é bastante inseguro.

Isso realmente não importa para a verificação propriamente dita: se a verificação for aprovada, a assinatura pgp será válida.
Mas se você ainda não possui a chave e deseja buscá-la, ou deseja verificar exatamente qual chave foi usada para verificação e deseja verificar, devemos especificar a chave com mais precisão.

Portanto, verifique como você especificou sua user.signingkeyconfiguração e a versão do gpg que você está usando (gpg1 ou gpg2), para ver se isso afeta a mensagem de erro.

Também há confirmação 0581b54, que altera a condição da gpg failed to sign the datamensagem de erro (em complemento à confirmação 0d2b664 ):

Atualmente, não lemos do stderr. No entanto, vamos querer em um patch futuro, de modo que este também prepara-nos lá (e, nesse caso, gpg faz gravação antes de ler toda a entrada, embora novamente, é improvável que um uid chave vai encher-se um tampão de tubo).

A confirmação 4322353 mostra que o gpg agora usa um arquivo temporário, portanto, pode haver problemas corretos em torno disso.

Vamos converter para o uso de um objeto tempfile, que lida com os casos difíceis para nós, e adicionar a chamada de limpeza ausente.


Eu tenho meu user.signingkeyconjunto de configurações. Também usando gpg (GnuPG) 2.0.3.
Naman

@nullpointer Eu editei minha resposta. Você pode verificar se o problema persiste com o Gti For Windows 2.10.1.
VonC

desculpe pela atualização tardia, trabalhando no MacOSX e não no Windows, então não foi possível verificar isso.
Naman 16/10

10

O rastreamento git foi muito revelador para a minha situação ...

   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

Eu precisava gerar uma chave inicial de acordo com o formato gitverificado. É melhor copiar o valor passado -bsauacima nos logs como está e usar abaixo.

Então se torna,

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

Então funcionou.

Espero que ajude.


Isso funcionou para mim e git tracefoi realmente útil.
Philip oghenerobo Balogun

1
companheiro ... você não consegue imaginar quantas horas gastei tentando resolver isso até chegar à sua resposta ... era o nome da chave o tempo todo .. obrigado! obrigado! obrigado!
giomanda

8

Usando o cygwin, mudei recentemente para gpg2. Então tive o mesmo problema ao assinar com o git após a configuração git config gpg.program gpg2.

Tente echo "test" | gpg2 --clearsignver se o gpg2 está funcionando. Eu achei a solução mais fácil de definir git config gpg.program gpg, porque isso funciona. Mas você também terá um erro melhor dessa maneira - por exemplo, que você precisa instalar o pinentry.


Na verdade, em algumas distros do Linux, você pode acabar com o mesmo problema. O Git sempre usa gpg, não gpg2. Veja também: stackoverflow.com/questions/34766123/…
rugk 8/18

Isso revelou para mim o erro gpg: signing failed: Inappropriate ioctl for deviceque pode ser resolvido export GPG_TTY=$(tty). Fonte: github.com/keybase/keybase-issues/issues/2798
swiknaba

8

No OS X, usando gnupg2via brew, eu apenas tinha que matar o agente gpg , às vezes acontece:

pkill -9 gpg-agent

E defina a envvariável, se necessário:

export GPG_TTY=$(tty)

Consulte também os problemas comuns de GPG e esta resposta aqui também.


2
Isso funcionou para mim também. Eu criei um novo alias alias fix-gpg='pkill -9 gpg-agent && export GPG_TTY=$(tty)'.
oalders

1
Isso funciona bem, obrigado. Nem precisou definir a variável env posteriormente.
Nick Rameau

8

Eu já vi respostas semelhantes, mas nada exatamente como o que funcionou para mim. No Linux, eu tive que matar e reiniciar o meu gpg-agentcom:

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

Isso fez o truque para mim. Parece que você precisa ter user.signingkeydefinido sua chave privada também pelo que outros comentários estão dizendo.

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


6

Eu recebi esse erro no Ubuntu 18.04 e minha chave expirou .

Para ver isso, executei isso e confirmou que minhas chaves expiraram:

gpg --list-keys

Para corrigir isso, executei (usando o ID exibido no comando anterior):

gpg --edit-key <ID>

A partir daí, eu estendi a expiração do key 0e key 1seguir as instruções que se resumia a digitação key 0em seguida, expiree seguir as instruções. Então repetindo para key 1.

Depois, para testar isso, executei:

echo test | gpg --clearsign

E antes da correção, falhava com o erro:

gpg: nenhuma chave secreta padrão: nenhuma chave secreta
gpg: [stdin]: falha na limpeza de sinal: nenhuma chave secreta

Mas após a correção, o mesmo comando assinou com êxito a mensagem, então eu sabia que as coisas estavam funcionando novamente!


Confirmar isso corrigiu um problema ao importar uma chave válida do Mac OSX Catalina para o CentOS7. Lutou com essa fera por mais de duas horas tentando descobrir por que ela continuava pedindo uma senha, entre outras coisas. Curiosamente, ele já estava definido para nunca expirar, e eu o configurei para ainda nunca expirar.
Cody B

5

Eu tive o mesmo problema. Fico feliz em informar que o problema não reside, git 2.10.0mas sim gnupg 1.4.21.

Desclassificar temporariamente o gnupg para 1.4.20 corrigiu o problema para mim.

Se você estiver usando o homebrew e atualizou seus pacotes como eu fiz, provavelmente poderá executar apenas brew switch gnupg 1.4.20para reverter.


3

Verifique se seu e-mail foi definido corretamente.

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

1
Esta é a única solução que funcionou para mim, foi útil para seguir o método correto de gerar uma chave GPG via github
Naz

1
No meu caso, o problema era que eu estava usando um email da empresa em um repositório específico, para o qual não havia a chave PGP gerada.
Rubick

3

Se o email associado ao uid da sua chave GPG for diferente do email que você está usando no git, você precisará adicionar outro ID de usuário à sua chave OU usar uma chave que corresponda exatamente.

Você pode adicionar outro UID usando:

$ gpg --edit-key

Veja para /superuser/293184/one-gnupg-pgp-key-pair-two-emails


1
Foi isso para mim. Cristo, como não há uma mensagem de erro mais informativa do que "falha ao assinar dados".
Alec

3

Devo ter atualizado acidentalmente o gpg de alguma forma, porque o comprei depois de tentar testar se o gpg funciona:

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.

Correndo gpgconf --kill allconsertou para mim.

Espero que isso ajude alguém.


2

Eu tive um problema semelhante com as fontes Git mais recentes (2.12.2) criadas juntamente com as fontes mais recentes de todas as suas dependências (Zlib, Bzip, cURL, PCRE, ReadLine, IDN2, iConv, Unistring, etc.).

Acontece que libreadlineestava dando problemas ao GnuPG:

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

E, é claro, tentar obter informações úteis do Git com -vvvfalha, então a falha foi um mistério.

Para resolver a falha do PGP devido ao ReadLine, siga as instruções em Não é possível atualizar ou usar o gerenciador de pacotes - erro de gpg :

No terminal:

ls /usr/local/lib

havia um monte de bibliotecas readline lá (libreadline.so.BLAH-BLAH), então eu:

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

2

As respostas acima são ótimas, mas elas não funcionaram para mim. O que resolveu meu problema foi exportar o público e o segredo chaves .

listar as chaves da máquina de onde estamos exportando

$ 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

exportar as chaves

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

vá para a máquina que estamos importando e importando

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

bingo bongo, pronto!

referência: https://www.debuntu.org/how-to-importexport-gpg-key-pair/

ps. Minhas chaves foram originalmente criadas no bootcamp windows 7 e eu as exportei para o meu mac air (mesma máquina física, diferente virtualmente)


2

Estou no Ubuntu 18.04 e recebi o mesmo erro, fiquei preocupado por semanas também. Finalmente percebi que o gpg2 não está apontando para nada. Então simplesmente corra

git config --global gpg.program gpg

E tada, funciona como charme.

Confirmação assinada

Seus commits agora terão a tag verificada com eles.


2

Eu me deparei com esse erro não por causa de qualquer problema de configuração, mas porque minha chave expirou. A maneira mais fácil de estender sua validade no OSX é abrir o aplicativo GPG Keychain (se você o tiver instalado) e solicitará automaticamente que você o estenda. Dois cliques e pronto. Espero que isso ajude outros Googlers :)


2

Isso começou a acontecer repentinamente para mim no Ubuntu, não tenho certeza se alguma atualização recente fez isso, mas nenhum dos problemas existentes era aplicável a mim (eu havia GPG_TTYdefinido, tentei matar o agente etc.). O gpgcomando independente estava falhando com este erro:

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

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

Eu tentei correr gpgcom a --debug-allopção e notei a saída abaixo:

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

O texto acima indica que há algum problema com o pinentryprograma. O Gpg normalmente é executado pinentry-cursespara mim, então eu mudei para pinentry-tty(eu tinha aptitude installprimeiro) e o erro foi embora (embora eu não consiga mais a entrada de senha em tela cheia, mas não gosto disso de qualquer maneira). Para fazer essa alteração, eu tive que adicionar a linha pinentry-program /usr/bin/pinentry-ttypara ~/.gnupg/gpg-agent.confmatar o agente com gpgconf --kill gpg-agent(ele é reiniciado na próxima vez).


1

Nenhuma das respostas acima parecia corresponder ao meu problema. Meu gpgbinário ( /usr/local/bin/gpg -> /usr/local/MacGPG2/bin/gpg2) foi instalado como parte do GPG Suite , e não pelo brew.

No entanto, senti que o conselho se resumia a: "use o gpgbinário que for o mais recente disponível no brew". Então eu tentei:

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

Eu verifiquei que eu tinha mudado corretamente o gpgsobre a minha $PATHpara apontar para o novo executável de bebida:

🍔 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 eu também disse explicitamente ao git qual gpgbinário usar:

git config --global gpg.program gpg

Bem, talvez isso não seja completamente estanque, pois é sensível ao caminho. Na verdade, eu não cheguei a confirmar que o git havia mudado para invocar a bebidagpg .

De qualquer forma: nada disso foi suficiente para git commit assinar com êxito meus commits novamente.


O que funcionou para mim, em última análise, foi atualizar o GPG Suite . Eu estava executando a versão 2016.7 e descobri que a atualização para 2016.10 corrigia o problema para mim.

Abri GPG Keychain.appe cliquei em "Verificar atualizações ...". Com a nova versão: confirmações assinadas funcionaram corretamente novamente.


Tentei atualizar para a versão mais recente ... que também não funcionou. tentando entrar no xcode.
Albert T. Wong


1

Muito parecido com o @birchlabs, depois de muitas escavações / pesquisas, descobri que não era GPG, mas sim GPG Suite. Eu fiz cask reinstall gpg-suitee resolveu isso para mim.


0

Se isso aconteceu aleatoriamente e funcionou perfeitamente no passado, como é o meu caso, tente sair ( cmd+shift+q) e entrar novamente. Trabalhou para mim


0

No meu caso, nenhuma das soluções mencionadas em outra resposta funcionou. Descobri que o problema era específico de um repositório. A exclusão e a clonagem do repositório novamente resolveram o problema.


0

Um tipo estranho, mas verifique se o seu terminal é grande o suficiente! Você pode dizer se é muito pequeno executando echo test | gpg --clearsign- ele fornecerá uma mensagem de erro bastante óbvia para você saber. Se não for grande o suficiente, seu agente GPG não poderá exibir sua pequena caixa de ncurses.

Este não se aplicará se você usar um agente da GUI ou algo que não use ncurses.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.