verified the keys gpg generation failed error data create commits and git gnupg

git - the - my gpg key



Error de git: gpg no pudo firmar los datos (14)

Consulte @sideshowbarker y @Xavier Ho, resolví mi problema siguiendo los pasos.

Supongamos que gpg2 instalado por brew,

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

git config --global user.signingkey 0A61C6FC

Recordado por mi colega, necesito agregar

export GPG_TTY=$(tty)

a ~ / .zshrc si usa zsh, de lo contrario agregue a ~ / .bash_profile

Para macOS,

el gpg2 se combina con gpg en brew y, por lo tanto, el comando gpg apunta a gpg2

brew install gpg2

brew info gpg

gnupg: estable 2.2.6 (embotellado)

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

y hay pinentry-mac para la entrada de frase de contraseña

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

Añadir línea

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

Acabo de comenzar a usar git e instalo git y gpg a través de homebrew. Por alguna razón, recibo este error cuando hago git commit . Miré tantas otras preguntas de stackoverflow con respecto a este tema y ninguna de ellas funcionó para mí. ¿Cómo puedo solucionar este error para poder cargar correctamente?

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


De alguna manera, su git está configurado para GPG firmar cada confirmación. No es necesario firmar con GPG para confirmar o enviar usando git. Es probable que esté dando el error porque su mecanismo de firma gpg aún no está configurado.

Si es nuevo en git, intente que funcione primero sin GPG al principio, luego agregue el inicio de sesión más tarde si realmente lo necesita.

Puede verificar cómo está configurado su git con respecto a gpg haciendo:

git config -l | grep gpg

Que puede producir cero o más líneas, que incluyen:

commit.gpgsign=true

Si "commit.gpgsign" es verdadero, entonces tiene la firma gpg habilitada. Desactívelo con:

git config --global --unset commit.gpgsign

Luego intente ejecutar su confirmación nuevamente. Ahora debería ejecutarse sin la firma de gpg. Después de que funcione el git básico, debería intentar agregar la firma gpg nuevamente a la mezcla.


Este error también puede ocurrir cuando su clave GPG ha caducado. Generar una nueva clave y agregarla a Git debería resolver esto.


Esto te ayudará a deshacerte de él

git config commit.gpgsign false


Experimenté este problema después de actualizar a gnupg 2.x. Se vería que gpg2 hace referencia a claves de manera diferente: todavía tenía signingkey = ABC98F11 (configuración de gpg v1) en mi ~/.gitconfig . Los identificadores clave para gpg2 son más largos. gpg --list-secret-keys con gpg --list-secret-keys


Git necesita saber con qué clave está firmando.

Después de configurar GPG, gpg-agent y sus archivos gpg.conf (consulte esta guía ), debe ejecutar

git config --global user.signingkey EB11C755

Obviamente, reemplace la clave pública al final con la suya. Si desea que cada confirmación se firme de forma predeterminada, use

git config --global commit.gpgsign true


Hice una clave git con 3 claves separadas para certify / sign / encrypt y la clave se mostró expirada en el futuro (después de trabajar bien durante unos días):

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 ]

hizo una nueva clave sin agregar subclaves separadas para resolver el problema.


Lo estoy usando. Tiene soporte para zsha y funciona en Windows Subsystem para Linux:

export GPG_TTY=$(tty)


Para mí, este error comenzó a ocurrir con git tag -s en Debian GNU / Linux cuando pinentry-gnome3 de pinentry-gnome3 a pinentry-curses (usando update-alternatives --config pinentry ) para facilitar el acceso remoto. Solo ocurrió con git tag -s , no con gpg (por ejemplo, gpg --clearsign ) en sí.

El único cambio necesario para que vuelva a funcionar en este caso fue agregar export GPG_TTY=$(tty) a mis archivos de inicio de shell.

Sin embargo, no recibí el mensaje de error "Inactivo apropiado para el dispositivo" mencionado como indicador de esta solución en otra respuesta a esta pregunta.

Nota: Dado que la causa de obtener este error fue completamente diferente a la de aquellos que sugirieron export GPG_TTY=$(tty) antes (generalmente como una sugerencia lateral) en otras respuestas a esta pregunta, decidí que esta pregunta necesita otra respuesta que mencione que export GPG_TTY=$(tty) puede ser la solución principal y la única necesaria en algunos casos.


Para solucionar problemas, hay dos cosas que primero debe probar:

  • ejecute git config --global gpg.program gpg2 , para asegurarse de que git use gpg2 y no gpg
  • ejecutar echo "test" | gpg2 --clearsign echo "test" | gpg2 --clearsign , para asegurarse de que gpg2 esté funcionando

Si todo parece estar bien, lo siguiente que debes intentar es:

  • ejecute brew install pinentry para asegurarse de tener una buena herramienta instalada para ingresar la frase de contraseña

Si después de eso, instala y vuelve a intentar git commit y aún obtiene el error " failed to sign the data ":

  • ejecute gpgconf --kill gpg-agent para eliminar cualquier agente en ejecución que pueda estar colgado

Si eso dice que gpgconf no está instalado o no tiene una opción --kill , puede intentar esto:

  1. cp ~/.gnupg ~/.gnupg-GOOD para guardar una copia de su ~/.gnupg para volver a más tarde si es necesario
  2. brew install gnupg21 para instalar GnuPG 2.1

La razón para guardar una copia de su ~/.gnupg es que GnuPG 2.1 potencialmente crea / cambia algunos datos clave de una manera que no es compatible con versiones anteriores de GnuPG 2.0 y anteriores, por lo que si desea volver más tarde, puede do mv ~/.gnupg ~/.gnupg21 && mv ~/.gnupg-GOOD ~/.gnupg .

De lo contrario, hay algunos pasos básicos para ejecutar para verificar que tenga un entorno GnuPG que funcione:

  • ejecute gpg2 -K --keyid-format SHORT , para verificar que tenga al menos un par de claves

Si la salida de eso muestra que no tiene una clave secreta para GnuPG, entonces necesita crear una:

  • ejecute gpg2 --gen-key , para que GnuPG lo gpg2 --gen-key a través de los pasos para crear un par de claves

Si recibe un mensaje de error que dice "ioctl inadecuado para el dispositivo" , haga lo siguiente:

  • ejecute export GPG_TTY=$(tty) y / o agréguelo a su ~/.bashrc o ˜/.bash_profile

Puede ser que su configuración de Git se haya configurado gpgsign = true . Intenta establecerlo en falso si no quieres asignar tus commits. Vaya a su carpeta de repositorio y cambie el archivo

nano .git / config

De esto...

[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

A esto...

[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


Verifique que su clave caduque. Una vez que arregle la fecha de vencimiento (no es necesario crear una nueva clave a menos que lo desee), git funcionará normalmente.

Una forma de arreglar la clave caducada:

(Nota: $ representa la línea de comandos, escriba los comandos después de la línea de comandos; presione Entrar después de cada comando)

$ gpg2 --list-keys para encontrar el id. de clave apropiado (caracteres después de / en la línea de pub )

$ gpg2 --edit-key <key id> - esto abre el shell gpg, con el indicador cambiado a gpg>

gpg> expire : siga las instrucciones para establecer una nueva fecha de caducidad para la clave principal

A continuación, si hay subclaves que han caducado (se muestran sub en la línea), restablezca también sus fechas de caducidad:

gpg> key 1 : selecciona la primera subclave gpg> expire : siga las instrucciones para establecer una nueva fecha de caducidad para la subclave

Repita para cada subclave posterior, según sea necesario.


brew install gpg2 el problema instalando brew install gpg2 luego haciendo git config --global gpg.program gpg2


Esto funcionó para mí en ubuntu 18.04

Comprueba tu clave gpg

gpg -K --keyid-format LONG

si obtiene una respuesta en blanco, genere una clave GPG

gpg --generate-key

vuelva a ejecutar el primer comando, debería obtener una salida como:

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]

establecer clave de canto git

git config --global user.singingkey 95A854E0593B3214

¡Entonces, ya puedes irte! (--global es opcional)

Alternativamente, si no le importa firmar con su clave ssh

git config commit.gpgsign false

tenga en cuenta que esto no se recomienda debido a un problema de seguridad de acuerdo con esta pregunta here y here