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 usegpg2
y nogpg
-
ejecutar
echo "test" | gpg2 --clearsign
echo "test" | gpg2 --clearsign
, para asegurarse de quegpg2
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:
-
cp ~/.gnupg ~/.gnupg-GOOD
para guardar una copia de su~/.gnupg
para volver a más tarde si es necesario -
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 logpg2 --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