gpg no pudo firmar los datos fatales: no se pudo escribir el objeto de confirmación [Git 2.10.0]

319

Seguí algunos artículos sobre los bonitos atributos en la nota de lanzamiento de Git 2.10 . Pasando por el cual actualizó el git a 2.10.0 e hizo cambios en el .gitconfigresultado global de la siguiente manera:

[filter "lfs"]
    clean = git-lfs clean %f
    smudge = git-lfs smudge %f
    required = true
[user]
    name = xyz
    email = [email protected]
    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

Pero ahora que trato de firmar mis confirmaciones usando

git commit -a -S -m "message"

Veo el siguiente error:

Necesita una frase de contraseña para desbloquear la clave secreta para

usuario: "XYZ (firmado digitalmente)"

Clave RSA de 2048 bits, ID AAAAAAAA, creada el 2016-07-01

error: gpg no pudo firmar los datos fatales: no se pudo escribir el objeto de confirmación

Nota : todavía puedo confirmar cambios usandogit commit -a -m "message"

¿Hay alguna manera de superar lo mismo? ¿O algún cambio requerido en las gpgconfiguraciones para llevarse bien con la actualización de git?


Actualización 1

También buscando mayor utilidad, siguiendo ¿Hay alguna manera de "auto firmar" confirmaciones en Git con una clave GPG? . Ya he configurado la clave usando

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

y obviamente obtenemos el mismo error de todos modos.

Naman
fuente
3
Me enfrento a un problema similar. Desinstalé Git 2.8 (git-scm) en Windows. E instalado 2.10. Ahora me sale gpg failed to sign the datacada vez que lo uso -S. En 2.8, puedo firmar un commit sin problema. No sé que pasa.
Iluminador
55
Agregar user.signingkeysolucionó mi problema, por extraño que parezca.
Xavier Ho
1
@nullpointer Eliminé mi respuesta desde allí, porque después de mirarlo profundamente me di cuenta de que es un duplicado.
Shayan Amani
1
Una ironía, cambié mi máquina para configurar las cosas de nuevo y terminé buscando mi propia pregunta y ninguna de las soluciones sugeridas me parece lo suficientemente limpia como para comenzar simplemente.
Naman
1
Para mí, la solución fue: git config user.namewas! = Nombre utilizado al crear la clave PGP
stacksonstacks

Respuestas:

464

Me encontré con este problema con OSX.

Respuesta original:

Parece que una actualización de gpg (de brew) cambió a la ubicación de gpga gpg1, puede cambiar el binario donde git busca el gpg:

git config --global gpg.program gpg1

Si usted no tiene GPG1: brew install gpg1.

Respuesta actualizada:

Parece que gpg1 está en desuso / "fuera de uso suavemente" , por lo que probablemente debería actualizar a gpg2, desafortunadamente esto implica bastantes pasos más / un poco de tiempo:

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 primera parte instala gpg2, y la última es un hack requerido para usarlo . Para la solución de problemas, consulte esta respuesta (aunque se trata de Linux no se prepara), sugiere una buena prueba:

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

Si esta prueba es exitosa (ningún error / resultado incluye la firma PGP), ha actualizado con éxito a la última versión de GPG.

¡Ahora debería poder volver a usar la firma git!
Vale la pena señalar que necesitarás tener:

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: Después de ejecutar una confirmación firmada, puede verificar que se haya firmado con:

git log --show-signature -1

que incluirá información de gpg para la última confirmación.

Andy Hayden
fuente
77
Establecer gpg.program en / usr / local / bin / gpg (no "1") lo arregló para mí.
Iskar
55
Parece una actualización de gnupg2la brewensuciado con enlaces simbólicos por lo tanto gpgse ha retirado, que tenía enlaces fijos utilizando brew link --overwrite gnupg2.
Brice
8
hm ... no funciona. Todavía da mi error al iniciar sesión en xcode.
Albert T. Wong el
1
@DrBeco, ¿no es esa la ubicación / comportamiento original? Todavía tengo el mismo problema en osx (creo que he actualizado mi cerveza bastante recientemente), gpg1es el ejecutable aún exportado.
Andy Hayden
29
killall gpg-agent && gpg-agent --daemon --use-standard-socket --pinentry-program /usr/local/bin/pinentryfinalmente lo arregló para mí
Dan Bechard
318

Si se utilizan gnupg2 y gpg-agent 2.x, asegúrese de establecer la variable de entorno GPG_TTY.

export GPG_TTY=$(tty)

Consulte la documentación de GPG sobre problemas comunes .

Koraktor
fuente
17
Si usa pescado, ponga set -x GPG_TTY (tty)su perfil.
fasfsfgs
@StuartCardall ¿Cuál es el punto del comando chown? Por lo general, ya le habrá sido asignado por un proceso del sistema, cuando inició sesión o creó la pseudo-tty. Si es propiedad de otra persona y no eres root, fallará. Si el grupo es otra cosa, probablemente no importe, y los usuarios generalmente no estarán en el grupo tty.
Poolie
@poolie - importa si sua rooten un servidor remoto
Stuart Cardall
66
Agregué la variable ~/.zshrcy puedo realizar confirmaciones nuevamente, ahora que se conecta correctamente al terminal. ¡Gracias por toda tu ayuda!
Alex Gurrola
Esto también está en las instrucciones de GitHub: help.github.com/articles/telling-git-about-your-gpg-key
bonh
198

Si todo falla, usa GIT_TRACE=1para probar y ver qué está haciendo realmente 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

Ahora ejecute el comando de falla manualmente:

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

Resulta que mi llave expiró, gitno tenía la culpa.

Bombe
fuente
34
Buen consejo para depurar. +1
VonC
44
Esto realmente me ayudó a resolver mi propio problema, y ​​es una solución para cada tipo de problema con este mensaje de estado. +1
xHocquet
Gracias por el paseo de depuración. Mi clave también expiró.
Sgnl
2
¡Gracias! Esto me llevó a mi problema. Por extraño que parezca, mi local .git/configtenía un nameproyecto especificado en un proyecto que no coincidía con mi correo electrónico de firma. Eso fue suficiente para rechazarlo.
kross
1
Bueno, ejecutar gpg -bsau <key>en mi máquina no ejecuta nada. ¿Se supone que esto tarda demasiado en ejecutarse? ¿O eso significa que la clave está bien para ser utilizada? @VonC alguna idea?
Naman
82

Lo he hecho a través de esta receta corta y fácil :

Las confirmaciones de firma automática en macOS (globalmente y con diferentes IDE):

Consigue tu signingkeyde esta manera .

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

Ponga lo siguiente en el gpg.confarchivo (edite el archivo con el nano ~/.gnupg/gpg.confcomando):

no-tty

Ponga lo siguiente en el gpg-agent.confarchivo (edite el archivo con el nano ~/.gnupg/gpg-agent.confcomando):

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

Actualización :

Es posible que deba ejecutar el killall gpg-agentcomando después de editar el archivo de configuraciones gpg.conf, de acuerdo con los comentarios. Como dice el comando autoexplicativo, este comando terminará el agente GPG (Gnu Privacy Guard).

Shayan Amani
fuente
2
¿Puedes explicar también qué están haciendo esos comandos? Ayudará con la comprensión.
Un droide el
77
También tuve que ejecutar un killall gpg-agentdespués de configurar los archivos de configuración, ¡entonces funcionó!
Pascal Ludwig
¿Cómo sabemos que podemos confiar en las personas detrás pinentry-mac? No digo que no podamos, pero la organización GPGTools está respaldada por un equipo muy pequeño y el repositorio solo tiene 5 colaboradores en comparación con brew install gnupgel uso que aprovecha el trabajo de gnupg.org .
sunknudsen
En caso de que ayude a otros, mi problema fue que tenía un user.signingkeyconjunto local no válido , que no noté en mi configuración de árbol de origen, ni en mi configuración global (porque no pensé en mirar la configuración local) Asegúrese de que ambos sean locales ( git config --local --get user.signingkey) y global ( git config --global --get user.signingkey) son iguales, o incluso mejores, desarman el local si no es válido ( git config --local --unset user.signingkey)
Glenn 'devalias'
en OSX (10.13.06), da el siguiente error, bash: pinentry-program: comando no encontrado
cgl
59

Puede ayudar a matar el proceso gpg-agentque podría quedarse con los datos antiguos. Así que recién gpg-agentempezado pediría una contraseña.

MaximKostrikin
fuente
2
Esto lo hizo por mi.
danyim
12
Úselo gpg-agent --daemonpara comenzar
FooBar
1
También tuve que reiniciar gpg-agent
GnrlBzik
8
Para matar el proceso en macOS:killall gpg-agent
incleaf
1
en ubuntugpgconf --kill gpg-agent
Adam
38

Siga la siguiente URL para configurar la confirmación firmada https://help.github.com/en/articles/telling-git-about-your-signing-key

si todavía obteniendo gpg no se pudo firmar la información fatal: no se pudo escribir el objeto commit

esto no es problema con git, esto es con GPG, siga los pasos a continuación

1)gpg --version

  1. echo "test" | gpg --clearsign

si se muestra:

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

4. Luego intente nuevamente echo "test" | gpg --clearsign en qué firma PGP se obtiene.

  1. git config -l | grep gpg

gpg.program = gpg commit.gpgsign = true

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

Jayesh
fuente
1
¡Esta fue la solución para mí! ¡Muchas gracias!
upInCloud
Excelente recorrido sobre cómo averiguar si este es el problema.
Philippe Signoret
Esto es lo que hizo por mí. ¡Muchas gracias!
Allan Guwatudde
export GPG_TTY=$(tty)Fue el truco. Agregué eso a mi .zshrcarchivo
Shane Stillwell
22

Para cualquiera que esté enfrentando este problema en máquinas MacOS , intente esto:

  1. brew uninstall gpg
  2. brew install gpg2
  3. brew install pinentry-mac (si es necesario)
  4. gpg --full-generate-key Crea una clave usando un algoritmo.
  5. Obtenga la clave generada ejecutando: gpg --list-keys
  6. Pon la llave aquí 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. Si desea exportar su clave a GitHub, entonces: gpg --armor --export <key> y agregue esta clave a GitHub en las claves GPG: https://github.com/settings/keys (con las líneas START y END incluidas)

Si el problema persiste:

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

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

Si el problema persiste:

Instale https://gpgtools.org y firme la clave que utilizó presionando Firmar desde la barra de menú: Clave -> Firmar

Si el problema persiste:

Ir a: el mundial .gitconfigde archivos que en mi caso se encuentra en: /Users/gent/.gitconfig Y modificar el .gitconfig archivo (por favor asegúrese de correo electrónico y nombre son el mismo con el que se ha creado al generar la clave) :

[user]
	email = [email protected]
	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

Gent Berani
fuente
2
Agregar 'gpsign = true' en .gitconfig lo arregló para mí
Pierre
18

Mis dos centavos aquí:

Cuando crea y agrega una clave a gpg-agent, define algo llamado passphrase. Ahora que passphraseen algún momento caduca y gpgnecesita que lo ingrese nuevamente para desbloquear su clave y poder comenzar a firmar nuevamente.

Cuando utiliza cualquier otro programa con el que interactúa gpg, no aparece el gpgmensaje para que ingrese su frase de contraseña (básicamente cuando daemonized no puede mostrarle el diálogo de entrada engpg-agentstdin ).

Una de las soluciones es gpg --sign a_file.txtingresar la frase de contraseña que ingresó cuando creó su clave y luego todo debería estar bien ( gpg-agentdebería firmar automáticamente)

Vea esta respuesta sobre cómo establecer tiempos de espera más largos para su frase de contraseña para que no tenga que hacer esto todo el tiempo.

O puede eliminar completamente la frase de contraseña con ssh-keygen -p

Editar: haga una man gpg-agentlectura para algunas cosas sobre cómo hacer que lo anterior suceda automáticamente y agregue las líneas:

GPG_TTY=$(tty)
export GPG_TTY

en su .bashrc si está usando bash (esta es la respuesta correcta pero también mantengo mi línea de pensamiento anterior)

George Daramouskas
fuente
Gracias @ george-daramouskas, este fue mi problema.
Nic Barker
10

Actualización de octubre de 2016: el problema 871 mencionó "La firma dejó de funcionar en Git 2.9.3"

Git para Windows 2.10.1 lanzado hace dos días (4 de octubre de 2016) ha corregido la firma de GPG interactiva de confirmaciones y etiquetas.

El reciente cambio de signo gpg en git (que no presenta ningún problema en Linux) expone un problema en la forma en que, en Windows, el no-MSYS2-git interactúa con MSYS2-gpg.


Respuesta original:

Leyendo " 7.4 Herramientas Git - Firmando su trabajo ", supongo que tiene su " user.signingkey" configuración establecida.

La última gran refactorización (antes de Git 2.10) alrededor de gpg fue en commit 2f47eae2a , aquí ese mensaje de error se movió agpg-interface.c

Un registro en ese archivo revela el cambio reciente en commit af2b21e (Git 2.10)

gpg2 ya usa el formato largo por defecto, pero la mayoría de las distribuciones todavía parecen tener "gpg" como la versión 1.x anterior debido a razones de compatibilidad. Y las versiones anteriores de gpg solo muestran la ID corta de 32 bits, que es bastante insegura.

En realidad, esto no importa para la verificación en sí: si la verificación pasa, la firma pgp es buena.
Pero si todavía no tiene la clave y desea obtenerla, o si desea verificar exactamente qué clave se utilizó para la verificación y desea verificarla, debemos especificar la clave con más precisión.

Así que verifique cómo especificó su user.signingkeyconfiguración y la versión de gpg que está utilizando (gpg1 o gpg2), para ver si tienen algún efecto en el mensaje de error.

También hay commit 0581b54 que cambia la condición para el gpg failed to sign the datamensaje de error (en complemento de commit 0d2b664 ):

Actualmente no leemos nada de stderr. Sin embargo, vamos a querer en un parche futuro, por lo que también nos prepara allí (y en ese caso gpg hace escribir antes de leer toda la entrada, aunque una vez más, es poco probable que un fluido clave será llenar un búfer de canalización).

Commit 4322353 muestra que gpg ahora usa un archivo temporal, por lo que podría haber problemas correctos al respecto.

Convirtamos el uso de un objeto temporal, que maneja los casos difíciles para nosotros, y agreguemos la llamada de limpieza que falta.

VonC
fuente
Tengo mi user.signingkeyconfiguración configurada. También usando gpg (GnuPG) 2.0.3.
Naman
@nullpointer He editado mi respuesta. ¿Puede verificar si el problema persiste con Gti For Windows 2.10.1?
VonC
perdón por la actualización tardía, trabajando en MacOSX no Windows, así que no pude verificar esto
Naman
10

El rastro git fue muy revelador para mi situación ...

   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 <[email protected]>'
   error: gpg failed to sign the data
   fatal: failed to write commit object

Necesitaba generar una clave inicial por el formato que gitestaba comprobando. Es mejor copiar el valor pasado a -bsauarriba en los registros tal como está y usar a continuación.

Entonces se convierte,

   gpg --quick-generate-key "full name <[email protected]>"

Entonces funcionó.

Espero que ayude.

phyatt
fuente
Esto funcionó para mí y git tracefue realmente útil.
philip oghenerobo balogun
1
amigo ... no puedes imaginar cuántas horas pasé tratando de resolver esto hasta que llegué a tu Respuesta ... fue el nombre de la clave todo el tiempo ... ¡gracias! ¡gracias! ¡gracias!
Giomanda
8

Usando cygwin, recientemente cambié a gpg2. Luego tuve el mismo problema para firmar con git después de la configuración git config gpg.program gpg2.

Intenta echo "test" | gpg2 --clearsignver si gpg2 está funcionando. Me pareció la solución más fácil de configurar git config gpg.program gpg, porque eso funciona. Pero también obtendrá un mejor error de esta manera, por ejemplo, que necesita instalar pinentry.

lucidbrot
fuente
En realidad, en algunas distribuciones de Linux puede terminar con el mismo problema. Git siempre usa gpg, no gpg2. Ver también: stackoverflow.com/questions/34766123/...
rugk
Esto me reveló el error gpg: signing failed: Inappropriate ioctl for deviceque puede solucionarse export GPG_TTY=$(tty). Fuente: github.com/keybase/keybase-issues/issues/2798
swiknaba
8

En OS X, usando gnupg2via brew solo tuve que matar al agente gpg , a veces sucede:

pkill -9 gpg-agent

Y establezca la envvariable si es necesario:

export GPG_TTY=$(tty)

Vea los problemas comunes de GPG también y esta respuesta aquí también.

trainoasis
fuente
2
Esto funcionó para mí también. He creado un nuevo alias alias fix-gpg='pkill -9 gpg-agent && export GPG_TTY=$(tty)'.
Oalders
1
Esto funciona bien, gracias. Ni siquiera necesité establecer la variable env después.
Nick Rameau
8

He visto respuestas similares, pero nada exactamente como lo que funcionó para mí. En Linux, tuve que matar y reiniciar mi gpg-agentcon:

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

Esto hizo el truco para mí. Parece que también debe haber user.signingkeyconfigurado su clave privada por lo que dicen otros comentarios.

$ git config --global user.signingkey [your_key_hash]
Engineero
fuente
6

Recibí este error en Ubuntu 18.04 y resultó que mi clave había caducado .

Para ver esto, ejecuté esto y confirmó que mis claves habían caducado:

gpg --list-keys

Para corregir esto, ejecuté (usando la ID que se muestra en el comando anterior):

gpg --edit-key <ID>

A partir de ahí, he ampliado la expiración key 0y key 1siguiendo estas instrucciones , que se reducía a escribir key 0a continuación, expirey siguiendo las instrucciones. Luego repitiendo para key 1.

Después, para probar esto, corrí:

echo test | gpg --clearsign

Y antes de la solución, falló con el error:

gpg: sin clave secreta predeterminada: sin clave secreta
gpg: [stdin]: error de firma clara: sin clave secreta

Pero después de la corrección, el mismo comando firmó con éxito el mensaje, ¡así que supe que las cosas estaban funcionando nuevamente!

gMale
fuente
Confirmar esto solucionó un problema al importar una clave válida de Mac OSX Catalina a CentOS7. Luché con esta bestia durante más de dos horas tratando de descubrir por qué seguía pidiendo una contraseña, entre otras cosas. Por extraño que parezca, ya estaba configurado para que nunca expire, y lo configuré para que nunca expire.
Cody B
5

Tuve el mismo problema. Me complace informar que el problema no radica en git 2.10.0sino con gnupg 1.4.21.

La degradación temporal de gnupg a 1.4.20 solucionó el problema para mí.

Si está usando homebrew y actualizó sus paquetes como lo hice yo, probablemente pueda simplemente ejecutar brew switch gnupg 1.4.20para volver atrás.

Arno
fuente
3

Asegúrese de tener su correo electrónico configurado correctamente.

git config --global user.email "[email protected]"
Weston Reed
fuente
1
Esta es la única solución que funcionó para mí, fue útil para seguir el método correcto de generar una clave GPG a través de github
Naz
1
En mi caso, el problema era que estaba usando un correo electrónico de la empresa en un repositorio específico, para el cual no había generado la clave PGP.
rubick
3

Si el correo electrónico asociado al uid de su clave GPG es diferente al correo electrónico que está utilizando en git, deberá agregar otra identificación de usuario a su clave O utilizar una clave que coincida exactamente con el correo electrónico.

Puede agregar otro UID usando:

$ gpg - clave de edición

Ver para más /superuser/293184/one-gnupg-pgp-key-pair-two-emails

JavaRocky
fuente
1
Esto fue para mí. Cristo, ¿cómo no hay un mensaje de error más informativo que "no se pudo firmar los datos"
Alec
3

Debo haber actualizado accidentalmente gpg de alguna manera porque obtuve esto después de intentar probar si 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.

Correr lo gpgconf --kill allarregló para mí.

Espero que esto ayude a alguien.

Visokoo
fuente
2

Tuve un problema similar con las últimas fuentes de Git (2.12.2) creadas junto con las últimas fuentes de todas sus dependencias (Zlib, Bzip, cURL, PCRE, ReadLine, IDN2, iConv, Unistring, etc.).

Resulta que le libreadlineestaba dando problemas a GnuPG:

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

Y, por supuesto, tratar de obtener información útil de Git con -vvvfalló, por lo que el fracaso fue un misterio.

Para resolver la falla de PGP debido a ReadLine, siga las instrucciones en No se puede actualizar o usar el administrador de paquetes - error de gpg :

En terminal:

ls /usr/local/lib

había un montón de bibliotecas readline allí (libreadline.so.BLAH-BLAH) así que yo:

su
mkdir temp
mv /usr/local/lib/libreadline* temp
ldconfig
jww
fuente
2

Las respuestas anteriores son geniales, pero no me funcionaron. Lo que resolvió mi problema fue exportar tanto el público como el secreto claves .

enumerar las claves de la máquina desde donde estamos exportando

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

exportar las llaves

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

ir a la máquina que estamos importando e importar

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

bingo bongo, ya terminaste!

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

PD. Mis claves se hicieron originalmente en Windows 7 bootcamp y las exporté a mi Mac Air (la misma máquina física, virtualmente diferente)

asus
fuente
2

Estoy en Ubuntu 18.04 y recibí el mismo error, también estuve preocupado durante semanas. Finalmente me di cuenta de que gpg2 no apunta hacia nada. Así que simplemente corre

git config --global gpg.program gpg

Y tada, funciona a las mil maravillas.

Compromiso firmado

Sus confirmaciones ahora tendrán una etiqueta verificada con ellos.

Aashutosh Rathi
fuente
2

Me topé con este error no por ningún problema de configuración, sino porque mi clave había caducado. La forma más fácil de extender su validez en OSX es abrir la aplicación GPG Keychain (si la tiene instalada) y automáticamente le solicitará que la extienda. Dos clics y listo. Esperemos que esto ayude a otros Googlers :)

maxhm10
fuente
2

Esto comenzó a suceder de repente para mí en Ubuntu, no estoy seguro de si alguna actualización reciente lo hizo, pero ninguno de los problemas existentes era aplicable para mí (lo había GPG_TTYconfigurado, intenté matar al agente, etc.). El gpgcomando independiente estaba fallando con este error:

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

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

Intenté ejecutar gpgcon la --debug-allopción y noté el siguiente resultado:

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

Lo anterior indica que hay algún problema con el pinentryprograma. Gpg normalmente funciona pinentry-cursespara mí, así que lo cambié a pinentry-tty(tuve que aptitude installhacerlo primero) y el error desapareció (aunque ya no obtengo la contraseña de pantalla completa, pero de todos modos no me gusta). Para realizar este cambio, he tenido que añadir la línea pinentry-program /usr/bin/pinentry-ttya ~/.gnupg/gpg-agent.confy matar al agente gpgconf --kill gpg-agent(que se reinicia la próxima vez).

haridsv
fuente
1

Ninguna de las respuestas anteriores parecía coincidir con mi problema. Mi gpgbinario ( /usr/local/bin/gpg -> /usr/local/MacGPG2/bin/gpg2) se instaló como parte de GPG Suite , en lugar de hacerlo por preparación.

Sin embargo, sentí que el consejo se reducía a: "usar el gpgbinario que sea el último disponible en brew". Entonces intenté:

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

Verifiqué que había cambiado correctamente gpgsobre mi $PATHpara señalar el nuevo ejecutable de 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

Y también le dije explícitamente a git qué gpgbinario usar:

git config --global gpg.program gpg

Bueno, tal vez eso no sea completamente hermético, ya que es sensible al camino. En realidad, no fui tan lejos como para confirmar sin lugar a dudas que Git había cambiado a invocar la cervezagpg .

En cualquier caso: nada de esto fue suficiente para hacer git commit firmar con éxito mis confirmaciones nuevamente.


Lo que funcionó para mí en última instancia fue actualizar GPG Suite . Estaba ejecutando la versión 2016.7, y descubrí que la actualización a 2016.10 me solucionó el problema.

Abrí GPG Keychain.appy presioné "Buscar actualizaciones ...". Con la nueva versión: los commits firmados volvieron a funcionar correctamente.

Birchlabs
fuente
Intenté actualizar a la última versión ... eso tampoco funcionó. tratando de iniciar sesión en xcode.
Albert T. Wong
1

lo configuró simplemente:

brew uninstall gpg 

brew install gpg2
Anurag pareek
fuente
1

Al igual que @birchlabs, después de mucho cavar / buscar descubrí que no era GPG, sino GPG Suite. Lo hice cask reinstall gpg-suitey lo resolvió por mí.

Juan
fuente
0

Si esto sucedió al azar y ha funcionado perfectamente en el pasado, como es mi caso, intente cerrar sesión ( cmd+shift+q) y volver a iniciar sesión. Funcionó para mí

Skylar Brown
fuente
0

En mi caso, ninguna de las soluciones mencionadas en otra respuesta funcionó. Descubrí que el problema era específico de un repositorio. Eliminar y clonar el repositorio nuevamente resolvió el problema.

David Miguel
fuente
0

Un poco raro, ¡pero asegúrese de que su terminal sea lo suficientemente grande! Puede saber si es demasiado pequeño al ejecutarlo echo test | gpg --clearsign; le dará un mensaje de error bastante obvio que le informará . Si no es lo suficientemente grande, su agente GPG no puede mostrar su pequeña caja ncurses.

Este no se aplicará si usa un agente GUI o algo que no use ncurses.

Fondo de la demanda de Mónica
fuente