Git: cómo usar el archivo .netrc en Windows para guardar el usuario y la contraseña

172

¿Es posible usar un archivo .netrc en Windows cuando estoy usando Git para clonar un repositorio remoto con HTTP y contraseña de usuario?

Bernd Klaus
fuente

Respuestas:

203

¿Es posible usar un .netrcarchivo en Windows?

Si, debes:

  • definir variable de entorno %HOME%(pre-Git 2.0, ya no es necesario con Git 2.0+)
  • poner un _netrcarchivo en%HOME%

Si está utilizando Windows 7/10, en una CMDsesión, escriba:

setx HOME %USERPROFILE%

y %HOME%se establecerá en ' C:\Users\"username"'.
Ve a esa carpeta ( cd %HOME%) y crea un archivo llamado ' _netrc'

Nota: Nuevamente, para Windows, necesita un _netrcarchivo ' ', no un .netrcarchivo ' '.

Su contenido es bastante estándar (Reemplace el <examples>con sus valores):

machine <hostname1>
login <login1>
password <password1>
machine <hostname2>
login <login2>
password <password2>

Lucas menciona en los comentarios:

Utilizando la última versión de msysgit en Windows 7, no necesitaba configurar la HOMEvariable de entorno. El _netrcarchivo solo hizo el truco.

Esto es de hecho lo que mencioné en " Intentando" install"github, .sshdir no allí ":
git-cmd.batincluido en msysgit establece la %HOME%variable de entorno:

@if not exist "%HOME%" @set HOME=%HOMEDRIVE%%HOMEPATH%
@if not exist "%HOME%" @set HOME=%USERPROFILE%

爱国者 cree en los comentarios que "parece que no funcionará para el protocolo http"

Sin embargo, respondí que netrces utilizado por curl, y funciona para el protocolo HTTP, como se muestra en este ejemplo (busque ' netrc' en la página):. También se utiliza con el protocolo HTTP aquí: " _netrc/ .netrcalternativa acURL ".


Una trampa común con netrcsoporte en Windows es que git omitirá su uso si una URL https de origen especifica un nombre de usuario.

Por ejemplo, si su .git/configarchivo contiene:

["origen" remoto]
     fetch = + refs / heads / *: refs / remotes / origin / *
     url = https: //[email protected]/p/my-project/

Git no resolverá sus credenciales a través de _netrc, para solucionar esto elimine su nombre de usuario, de esta manera:

["origen" remoto]
     fetch = + refs / heads / *: refs / remotes / origin / *
     url = https://code.google.com/p/my-project/

Solución alternativa: con git versión 1.7.9+ (enero de 2012): esta respuesta de Mark Longair detalla el mecanismo de caché de credenciales que también le permite no almacenar su contraseña en texto sin formato como se muestra a continuación.


Con Git 1.8.3 (abril de 2013):

Ahora puede usar un .netrc cifrado (con gpg).
En Windows: %HOME%/_netrc( _, no ' .')

Se ha agregado una nueva ayuda de credencial de solo lectura (in contrib/) para interactuar con los .netrc/.authinfoarchivos.

Ese script le permitiría usar archivos netrc cifrados con gpg , evitando el problema de tener sus credenciales almacenadas en un archivo de texto sin formato.

.gpgGPG descifrará los archivos con la extensión antes de analizarlos.
Múltiples -fargumentos están bien. Se procesan en orden, y la primera entrada coincidente encontrada se devuelve a través del protocolo auxiliar de credenciales.

Cuando no -fse le da la opción, .authinfo.gpg, .netrc.gpg, .authinfo, y .netrclos archivos en el directorio de inicio se utilizan en este orden.

Para habilitar este asistente de credenciales:

git config credential.helper '$shortname -f AUTHFILE1 -f AUTHFILE2'

(Tenga en cuenta que Git antepondrá " git-credential-" al nombre del ayudante y lo buscará en la ruta).

# and if you want lots of debugging info:
git config credential.helper '$shortname -f AUTHFILE -d'

#or to see the files opened and data found:
git config credential.helper '$shortname -f AUTHFILE -v'

Vea un ejemplo completo en " ¿Hay alguna manera de omitir la escritura de contraseñas al usarhttps:// github "


Con Git 2.18+ (junio de 2018), ahora puede personalizar el programa GPG utilizado para descifrar el .netrcarchivo 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 gpgopción

git-credential-netrcfue 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'

VonC
fuente
@Bernd: la HOMEvariable de entorno es importante porque no está definida por defecto en Windows. Puede configurar esa variable en el directorio que desee (no tiene que serlo C:\users\mylogin): por ejemplo, en el trabajo, lo configuro en mi disco remoto privado asociado con mi cuenta de Windows, lo que me permite cambiar de escritorio sin tener que perder mi .ssho _netrcconfiguración.
VonC
@Bernd: compruebe también si su repositorio de Git está en un servidor LAN o WAN (internet). Es posible que necesite definir una http.proxyen sus variables de entorno. O, por el contrario, para agregar su servidor a una no_proxyvariable, para evitar intentar acceder a un servidor LAN a través de WAN.
VonC
¿Cuál es el nombre y el valor de la variable ambiental? ¿Podría ser un poco más específico VonC
Dennis D
@DennisD: las dos variables de entorno de las que hablo en la respuesta y en los comentarios son HOME y http_proxy. HOME hará referencia a cualquier directorio que desee. http_proxy hará referencia a la dirección de proxy si tiene una.
VonC
Usando la última versión de msysgitWindows 7, no necesitaba configurar la HOMEvariable de entorno. El _netrcarchivo solo hizo el truco.
Lucas el
35

También puede instalar Git Credential Manager para Windows para guardar las contraseñas de Git en el administrador de credenciales de Windows en lugar de _netrc. Esta es una forma más segura de almacenar contraseñas.

TipoDragon
fuente
8
Gran respuesta, esta es la única respuesta que he encontrado que me permite mantener la simplicidad del nombre de usuario / contraseña (de forma segura) sin tener que lidiar con toda esa basura SSH.
Kirk Woll
@KirkWoll vea mi respuesta de actualización anterior: ahora puede almacenar sus credenciales en un .netrcarchivo cifrado . No tendrá que ingresar esas credenciales ni una sola vez durante la sesión.
VonC
11

Esto permitirá que Git se autentique en HTTPS usando .netrc:

  • El archivo debe ser nombrado _netrcy ubicado en c:\Users\<username>.
  • Deberá establecer una variable de entorno llamada HOME=%USERPROFILE%(establecer variables de entorno de todo el sistema utilizando la opción Sistema en el panel de control. Dependiendo de la versión de Windows, es posible que deba seleccionar "Opciones avanzadas").
  • La contraseña almacenada en el _netrcarchivo no puede contener espacios (citar la contraseña no funcionará).
EBlake
fuente
La mejor y más simple solución. Funcionó de maravilla con Android Studio, Source Tree y Git. Tuve que usar esto cuando Google recomendó la opción credencial SDK de Cloud SDK.helper y tuve que generar manualmente las credenciales y usarlas con el archivo net rc. En mi caso, no requería las opciones 2 y 3.
Hari
1

Estoy publicando una forma de usar _netrcpara descargar materiales del sitio www.course.com.

Si alguien va a usar el coursera-dl para descargar los materiales de clase abierta en www.coursera.com, y en el sistema operativo Windows alguien quiere usar un archivo como ".netrc" que está en el sistema operativo Unix para agregar el opción en -nlugar de -U <username> -P <password>por conveniencia. Él / ella puede hacerlo así:

  1. Verifique la ruta de inicio en el sistema operativo Windows: setx HOME %USERPROFILE%(consulte la respuesta de VonC ). Guardará la HOMEvariable de entorno como C:\Users\"username".

  2. Localice en el directorio C:\Users\"username"y cree un nombre de archivo _netrc. NOTA: NO hay ningún sufijo. el contenido es como:machine coursera-dl login <user> password <pass>

  3. Use un comando como coursera-dl -n --path PATH <course name>para descargar los materiales de la clase. Más detalles sobre las opciones de coursera-dl para esta página .

BO.LI
fuente