TLDR; Use un archivo netrc cifrado con Git 1.8.3+ .
Guardar una contraseña para una URL HTTPS del repositorio Git es posible con ~/.netrc
(Unix) o %HOME%/_netrc
(tenga en cuenta _
) en Windows.
Pero : ese archivo almacenaría su contraseña en texto sin formato.
Solución : cifre ese archivo con GPG (GNU Privacy Guard) y haga que Git lo descifre cada vez que necesite una contraseña (parapush
/ pull
/ fetch
/ clone
operación).
Nota: con Git 2.18 (Q2 2018), ahora puede personalizar el GPG utilizado para descifrar el .netrc
archivo cifrado .
Ver commit 786ef50 , commit f07eeed (12 de mayo de 2018) por Luis Marsano (``) .
(Fusionada por Junio C Hamano - gitster
- en commit 017b7c5 , 30 de mayo de 2018)
git-credential-netrc
: aceptar gpg
opción
git-credential-netrc
fue codificado para descifrar con ' gpg
' independientemente de la opción gpg.program.
Este es un problema en distribuciones como Debian que llaman a GnuPG moderno algo más, como ' gpg2
'
Instrucciones paso a paso para Windows
Con Windows:
(Git tiene un gpg.exe
en su distribución, pero el uso de una instalación completa de GPG incluye un gpg-agent.exe
, que memorizará su frase de contraseña asociada a su clave GPG).
Instale gpg4Win Lite
, la interfaz mínima de línea de comando gnupg (tome la más recientegpg4win-vanilla-2.X.Y-betaZZ.exe
), y complete su RUTA con el directorio de instalación GPG:
set PATH=%PATH%:C:\path\to\gpg
copy C:\path\to\gpg\gpg2.exe C:\path\to\gpg\gpg.exe
(Tenga en cuenta el copy
comando ' ': Git necesitará un script Bash para ejecutar el comando ' gpg
'. Como gpg4win-vanilla-2
viene con él gpg2.exe
, debe duplicarlo).
(Asegúrese de poner una frase de contraseña para esa clave).
Confía en esa llave
Instale el script auxiliar de credenciales en un directorio dentro de su %PATH%
:
cd c:\a\fodler\in\your\path
curl -o c:\prgs\bin\git-credential-netrc https://raw.githubusercontent.com/git/git/master/contrib/credential/netrc/git-credential-netrc.perl
(Cuidado: el script se renombra en Git 2.25.x / 2.26, ver más abajo)
(Sí, este es un script Bash, pero funcionará en Windows ya que Git lo llamará).
(No olvide la parte ' protocol
': ' http
' o ' https
' dependiendo de la URL que usará).
(Ahora puede eliminar el _netrc
archivo, manteniendo solo el _netrc.gpg
cifrado).
(Tenga en cuenta que ' /
': C:\path\to...
no funcionaría en absoluto). (Puede usarlo al principio-v -d
para ver qué está sucediendo).
De ahora en adelante, cualquier comando Git que use una URL HTTP (S) que requiera autenticación descifrará ese _netrc.gpg
archivo y usará el nombre de usuario / contraseña asociado al servidor con el que se está contactando. La primera vez, GPG le pedirá la frase de contraseña de su clave GPG para descifrar el archivo. Las otras veces, el agente gpg se lanzó automáticamente por la primera llamada GPG le proporcionará esa frase de contraseña.
De esa manera, puede memorizar varias URL / inicios de sesión / contraseñas en un archivo y almacenarlo en su disco encriptado.
Me parece más conveniente que un "ayudante de caché", donde necesita recordar y escribir (una vez por sesión) una contraseña diferente para cada uno de sus servicios remotos, para que dicha contraseña se almacene en la memoria caché.
Con Git 2.26 (Q1 2020), el asistente de credenciales de muestra para usar .netrc
se ha actualizado para que funcione de inmediato. Ver parche / discusión .
Ver commit 6579d93 , commit 1c78c78 (20 dic 2019) por Denton Liu ( Denton-L
) .
(Fusionada por Junio C Hamano - gitster
- en commit 1fd27f8 , 25 dic 2019)
Firmado por: Denton Liu
El camino shebang para el intérprete de Perl git-credential-netrc
estaba codificado.
Sin embargo, algunos usuarios pueden tenerlo ubicado en una ubicación diferente y, por lo tanto, habrían tenido que editar manualmente el script.
Agregue un .perl
prefijo al script para denotarlo como plantilla e ignore la versión generada.
Aumentar el Makefile
fin de que se genera git-credential-netrc
a partir de git-credential-netrc.perl
, al igual que otros scripts de Perl.
Las recetas de Makefile fueron robadas descaradamente contrib/mw-to-git/Makefile
.
Y:
Con 2.26 (Q1 2020), el asistente de credenciales de muestra para usar .netrc se ha actualizado para que funcione de inmediato.
Ver commit 6579d93 , commit 1c78c78 (20 dic 2019) por Denton Liu ( Denton-L
) .
(Fusionada por Junio C Hamano - gitster
- en commit 1fd27f8 , 25 dic 2019)
Firmado por: Denton Liu
Actualmente, git-credential-netrc
no funciona fuera de un repositorio git. Falla con el siguiente error:
fatal: Not a git repository: . at /usr/share/perl5/Git.pm line 214.
Sin embargo, no hay una razón real por la que deba estar dentro de un repositorio. Los ayudantes de credenciales también deberían poder funcionar bien fuera del repositorio.
Llame a la versión no propia de config()
para que git-credential-netrc
ya no sea necesario ejecutarla en un repositorio.
Jeff King ( peff
) agrega:
Supongo que está usando un cifrado con gpg netrc
(si no, probablemente debería usarlo credential-store
).
Para el acceso de contraseña de "solo lectura", encuentro que la combinación de pass
con config como esta es un poco mejor:
[credential "https://github.com"]
username = peff
helper = "!f() { test $1 = get && echo password=`pass github/oauth`; }; f"