Git - Come utilizzare il file .netrc su Windows per salvare utente e password


172

È possibile utilizzare un file .netrc su Windows quando sto usando Git per clonare un repository remoto con HTTP e password utente?

Risposte:


203

È possibile utilizzare un .netrcfile su Windows?

Si, devi:

  • definire la variabile d'ambiente %HOME%(pre-Git 2.0, non più necessaria con Git 2.0+)
  • inserire un _netrcfile%HOME%

Se si utilizza Windows 7/10, in una CMDsessione digitare:

setx HOME %USERPROFILE%

e il %HOME%sarà impostato su ' C:\Users\"username"'.
Vai quella cartella ( cd %HOME%) e crea un file chiamato ' _netrc'

Nota: ancora una volta, per Windows, è necessario un ' _netrc' file, non un ' .netrc' file.

Il suo contenuto è abbastanza standard (Sostituisci <examples>con i tuoi valori):

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

Luca menziona nei commenti:

Usando l'ultima versione di msysgit su Windows 7, non avevo bisogno di impostare la HOMEvariabile d'ambiente. Il _netrcfile da solo ha funzionato.

Questo è davvero ciò che ho menzionato in " Cercando di" install"github, .sshdir non lì ":
git-cmd.batincluso in msysgit imposta la %HOME%variabile d'ambiente:

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

爱国者 crede nei commenti che "sembra che non funzionerà per il protocollo http"

Tuttavia, ho risposto che netrcè utilizzato da curle funziona per il protocollo HTTP, come mostrato in questo esempio (cercare ' netrc' nella pagina):. Utilizzato anche con il protocollo HTTP qui: " _netrc/ .netrcalternativa acURL ".


Una trappola comune con netrcsupporto su Windows è che git ignorerà l'utilizzo se un URL https di origine specifica un nome utente.

Ad esempio, se il tuo .git/configfile contiene:

["origine" remota]
     fetch = + refs / heads / *: refs / telecomandi / origin / *
     url = https: //bob@code.google.com/p/my-project/

Git non risolverà le tue credenziali tramite _netrc, per risolvere questo rimuovere il tuo nome utente, in questo modo:

["origine" remota]
     fetch = + refs / heads / *: refs / telecomandi / origin / *
     url = https://code.google.com/p/my-project/

Soluzione alternativa: con git versione 1.7.9+ (gennaio 2012): questa risposta di Mark Longair descrive in dettaglio il meccanismo della cache delle credenziali che consente anche di non archiviare la password in testo semplice, come mostrato di seguito.


Con Git 1.8.3 (aprile 2013):

Ora puoi usare un .netrc crittografato (con gpg).
Su Windows: %HOME%/_netrc( _, non ' .')

È stato aggiunto un nuovo helper di credenziali di sola lettura (in contrib/) per interagire con i .netrc/.authinfofile.

Quello script ti permetterebbe di usare file netrc crittografati con gpg , evitando il problema di avere le tue credenziali archiviate in un semplice file di testo.

I file con .gpgestensione verranno decifrati da GPG prima dell'analisi. Argomenti
multipli -fsono OK. Vengono elaborati in ordine e la prima voce corrispondente trovata viene restituita tramite il protocollo helper delle credenziali.

Quando nessuna -fopzione è data, .authinfo.gpg, .netrc.gpg, .authinfo, e .netrcfile nella vostra home directory sono utilizzati in questo ordine.

Per abilitare questo supporto credenziali:

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

(Nota che Git anteporrà " git-credential-" al nome dell'helper e lo cercherà nel percorso.)

# 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'

Vedi un esempio completo in " Esiste un modo per saltare la digitazione della password quando si utilizzahttps:// github "


Con Git 2.18+ (giugno 2018), ora puoi personalizzare il programma GPG utilizzato per decrittografare il .netrcfile crittografato .

Vedi commit 786ef50 , commit f07eeed (12 maggio 2018) di Luis Marsano (``) .
(Unita da Junio ​​C Hamano - gitster- in commit 017b7c5 , 30 maggio 2018)

git-credential-netrc: accetta l' gpgopzione

git-credential-netrcè stato codificato per decrittografare con " gpg" indipendentemente dall'opzione gpg.program.
Questo è un problema su distribuzioni come Debian che chiamano GnuPG moderno qualcos'altro, come ' gpg2'


@Bernd: la HOMEvariabile d'ambiente è importante, perché non è definita di default su Windows. Puoi impostare quella variabile su qualunque directory tu voglia (non deve essere C:\users\mylogin): ad esempio, al lavoro, l'ho impostata sul mio disco remoto privato associato al mio account di Windows, che mi permette di cambiare desktop senza perdere mio .ssho _netrcimpostazioni.
VonC,

@Bernd: controlla anche se il tuo repository Git è su un server LAN o WAN (internet). Potrebbe essere necessario definire una http.proxynelle variabili di ambiente. O, al contrario, per aggiungere il server a una no_proxyvariabile, per evitare di tentare di accedere a un server LAN tramite WAN.
VonC,

Qual è il nome e il valore della variabile ambientale? Potresti essere un po 'più specifico VonC
Dennis D

@DennisD: le due variabili d'ambiente di cui parlo nella risposta e nei commenti sono HOME e http_proxy. HOME farà riferimento a qualsiasi directory desiderata. http_proxy farà riferimento all'indirizzo proxy se ne hai uno.
VonC,

Utilizzando l'ultima versione di msysgitWindows 7, non avevo bisogno di impostare la HOMEvariabile d'ambiente. Il _netrcfile da solo ha funzionato.
Luca

35

È inoltre possibile installare Git Credential Manager per Windows per salvare le password Git in Gestione credenziali di Windows anziché _netrc. Questo è un modo più sicuro per archiviare le password.


8
Ottima risposta, questa è l'unica risposta che ho trovato che mi permette di mantenere la semplicità di nome utente / password (in modo sicuro) senza dover affrontare tutta quella merda di SSH.
Kirk Woll,

@KirkWoll vedi la mia risposta di aggiornamento sopra: ora puoi archiviare le tue credenziali in un .netrcfile crittografato . Non dovrai inserire tali credenziali nemmeno una volta durante la sessione.
VonC,

11

Ciò consentirà a Git di autenticarsi su HTTPS usando .netrc:

  • Il file dovrebbe essere nominato _netrce situato in c:\Users\<username>.
  • Sarà necessario impostare una variabile d'ambiente chiamata HOME=%USERPROFILE%(impostare le variabili d'ambiente a livello di sistema usando l'opzione Sistema nel pannello di controllo. A seconda della versione di Windows, potrebbe essere necessario selezionare "Opzioni avanzate").
  • La password memorizzata nel _netrcfile non può contenere spazi (la citazione della password non funzionerà).

La soluzione più semplice e migliore. Ha funzionato come per incanto con Android Studio, Source Tree e la riga di comando Git. Ho dovuto utilizzarlo quando Google ha raccomandato l'opzione credential.helper di Cloud SDK non riuscita e ha dovuto generare manualmente le credenziali e utilizzarle con il file net rc. Nel mio caso non avevo bisogno delle opzioni 2 e 3.
Hari il

1

Sto pubblicando un modo per utilizzare _netrcper scaricare materiali dal sito www.course.com.

Se qualcuno utilizzerà il file coursera-dl per scaricare i materiali di classe aperta su www.coursera.com e sul sistema operativo Windows qualcuno desidera utilizzare un file come ".netrc" che si trova nel sistema operativo simile a Unix per aggiungere il opzione -nanziché -U <username> -P <password>per comodità. Lui / lei può farlo in questo modo:

  1. Controlla il percorso principale sul sistema operativo Windows: setx HOME %USERPROFILE%( fai riferimento alla risposta di VonC ). Salverà la HOMEvariabile d'ambiente come C:\Users\"username".

  2. Individua nella directory C:\Users\"username"e crea un nome file _netrc. NOTA: NON è presente alcun suffisso. il contenuto è come:machine coursera-dl login <user> password <pass>

  3. Utilizzare un comando come coursera-dl -n --path PATH <course name>per scaricare i materiali della classe. Ulteriori dettagli sulle opzioni coursera-dl per questa pagina .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.