Domanda C'è un modo per saltare la digitazione della password quando si utilizza https: // su GitHub?


Di recente sono passato alla sincronizzazione dei miei repository su https: // su GitHub (a causa di problemi con il firewall), e ogni volta richiede una password. Un tempo avevo che avevo un SSH certificato, ed è stato sufficiente. C'è un modo per bypassare la password nel mio caso (utilizzando http / https)?


1621
2018-03-17 17:47


origine


risposte:


Con Git versione 1.7.9 e successive

Da Git 1.7.9 (rilasciato a fine gennaio 2012), esiste un meccanismo pulito in Git per evitare di dover digitare la password per tutto il tempo per HTTP / HTTPS, chiamato aiutanti di credenziali. (Grazie a dazonic per sottolineare questa nuova funzionalità nei commenti qui sotto.)

Con Git 1.7.9 o versioni successive, puoi semplicemente utilizzare uno dei seguenti helper delle credenziali:

git config --global credential.helper cache

... che dice a Git di mantenere la tua password memorizzata nella cache per (di default) 15 minuti. È possibile impostare un timeout più lungo con:

git config --global credential.helper "cache --timeout=3600"

(Questo esempio è stato suggerito nel GitHub help page per Linux.) È inoltre possibile memorizzare le credenziali in modo permanente se lo si desidera, vedere le altre risposte di seguito.

L'aiuto di GitHub suggerisce anche che se sei su Mac OS X e usato homebrew per installare Git, puoi utilizzare il keystore nativo di Mac OS X con:

git config --global credential.helper osxkeychain

Per Windows, c'è un assistente chiamato Git Credential Manager per Windows o wincred in msysgit.

git config --global credential.helper wincred # obsolete

Con Git per Windows 2.7.3+ (Marzo 2016):

git config --global credential.helper manager

Per Linux, puoi uso gnome-keyring(o altra implementazione di portachiavi come KWallet).

Con le versioni Git precedenti alla 1.7.9

Con le versioni di Git precedenti alla 1.7.9, questa opzione più sicura non è disponibile e dovrai modificare l'URL che hai origin usi remoti per includere la password in questo modo:

https://you:password@github.com/you/example.git

... in altre parole con :password dopo il nome utente e prima del @.

Puoi impostare un nuovo URL per il tuo origin remoto con:

git config remote.origin.url https://you:password@github.com/you/example.git

Assicurati di usarlo https e dovresti essere consapevole che se lo fai, la tua password GitHub verrà archiviata in chiaro nel tuo .git directory, che è ovviamente indesiderabile.

Con qualsiasi versione Git (beh, dalla versione 0.99)

Un approccio alternativo consiste nel mettere il tuo nome utente e password nel tuo ~/.netrc file, anche se, come per mantenere la password nell'URL remoto, ciò significa che la password verrà memorizzata sul disco in testo normale e quindi è meno sicura e non raccomandata. Tuttavia, se si desidera adottare questo approccio, aggiungere la seguente riga al proprio ~/.netrc:

machine <hostname> login <username> password <password>

... sostituzione <hostname> con il nome host del server e <username> e <password> con il tuo nome utente e password. Ricorda inoltre di impostare autorizzazioni restrittive per il file system su quel file:

chmod 600 ~/.netrc

Nota che su Windows, questo file dovrebbe essere chiamato _netrce potresti aver bisogno di definire la variabile di ambiente% HOME% - per maggiori dettagli vedi:


2133
2018-03-17 17:54



Puoi anche fare in modo che Git memorizzi le tue credenziali in modo permanente utilizzando quanto segue:

git config credential.helper store

Nota: mentre questo è conveniente, Git memorizzerà le tue credenziali in testo in chiaro un file locale (.git-credentials) nella directory del progetto (vedi sotto per la directory "home"). Se non ti piace, elimina questo file e passa a utilizzare il opzione di cache.

Se vuoi che Git riprenda a chiedere credenziali ogni volta che ne ha bisogno connettersi al repository remoto, è possibile eseguire questo comando:

git config --unset credential.helper

Per memorizzare le password in .git-credentials nel tuo %HOME% directory in contrapposizione alla directory del progetto: usa il --global bandiera

git config --global credential.helper store

638
2017-09-03 01:14



TLDR; Usa un file netrc crittografato con Git 1.8.3+.

Salvataggio di una password per un repository Git L'URL HTTPS è possibile con a ~/.netrc (Unix) o %HOME%/_netrc (notare la _) Su Windows.

Ma: Quel file memorizzerebbe la tua password in testo normale.

Soluzione: Crittografare il file con GPG (GNU Privacy Guard)e fare in modo che Git decodifichi ogni volta che ha bisogno di una password (per push/pull/fetch/clone funzionamento).


Nota: con Git 2.18 (Q2 2018), ora è possibile personalizzare il GPG utilizzato per decifrare il codice crittografato .netrc file.

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

git-credential-netrc: accetta gpg opzione

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


Istruzioni dettagliate per Windows

Con Windows:

(Git ha un gpg.exe nella sua distribuzione, ma utilizzando un'installazione completa di GPG include a gpg-agent.exe, che memorizzerà la passphrase associata alla tua chiave GPG.)

  • Installare gpg4Win Lite, l'interfaccia minima della riga di comando gnupg (prendi il piu recente gpg4win-vanilla-2.X.Y-betaZZ.exe) e completare il PERCORSO con la directory di installazione di GPG:

    set PATH=%PATH%:C:\path\to\gpg
    copy C:\path\to\gpg\gpg2.exe C:\path\to\gpg\gpg.exe
    

(Notare la 'copy'comando: Git avrà bisogno di uno script Bash per eseguire il comando'gpg'. Da gpg4win-vanilla-2 Viene con gpg2.exe, devi duplicarlo.)

  • Crea o importa una chiave GPG e fidati di essa:

    gpgp --import aKey
    # or
    gpg --gen-key
    

(Assicurati di inserire una passphrase su quella chiave.)

  • Fidati di quella chiave

  • Installa lo script di supporto delle credenziali in una directory all'interno del tuo %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
    

(Sì, questo è uno script Bash, ma funzionerà su Windows poiché verrà chiamato da Git.)

  • Crea un file _netrc in testo chiaro

    machine a_server.corp.com
    login a_login
    password a_password
    protocol https
    
    machine a_server2.corp.com
    login a_login2
    password a_password2
    protocol https
    

(Non dimenticare il 'protocol' parte: 'http' o 'https'a seconda dell'URL che userai.)

  • Cripta quel file:

    gpg -e -r a_recipient _netrc
    

(Ora puoi Elimina il _netrc file, mantenendo solo il _netrc.gpg crittografato.)

  • Usa quel file crittografato:

    git config --local credential.helper "netrc -f C:/path/to/_netrc.gpg -v"
    

(Notare la '/': C:\path\to... non funzionerebbe affatto.) (Puoi usare in un primo momento -v -d per vedere cosa sta succedendo.)

D'ora in poi, qualsiasi comando Git che usi un URL HTTP (S) che richiede l'autenticazione lo decodificherà _netrc.gpgfile e utilizzare il login / password associati al server che si sta contattando. La prima volta, GPG ti chiederà la passphrase della tua chiave GPG, per decifrare il file. Le altre volte, l'agente gpg lanciato automaticamente dalla prima chiamata GPG fornirai quella passphrase per te.

In questo modo, puoi memorizzare parecchi URL / login / password in un file e averli memorizzati sul disco crittografati.
Trovo più conveniente di un helper "cache", in cui è necessario ricordare e digitare (una volta per sessione) una password diversa per ciascuno dei servizi remoti, affinché detta password sia memorizzata nella cache.


85
2017-08-21 15:48



Esiste un modo semplice e obsoleto di archiviare le credenziali dell'utente in un URL HTTPS:

https://user:password@github.com/...

È possibile modificare l'URL con git remote set-url <remote-repo> <URL>

L'ovvio lato negativo di questo approccio è che è necessario memorizzare la password in formato testo. Puoi ancora inserire il nome utente (https://user@github.com/...) che almeno ti farà risparmiare la metà della seccatura.

Potresti preferire passare a SSH o usare il software client GitHub.


32
2018-01-06 16:43



Utilizzare un negozio di credenziali.

Per git 2.11+ su OSX e linux, usa l'archivio delle credenziali integrato di git:

git config --global credential.helper libsecret

Per msysgit 1.7.9+ acceso finestre:

git config --global credential.helper wincred

Per Git 1.7.9+ su OS X usare:

git config --global credential.helper osxkeychain

30
2017-09-09 03:57



Puoi semplicemente usare

git config credential.helper store

Quando inserisci la password la prossima volta con pull o push, verrà memorizzato .git-credentials come testo semplice (un po 'non sicuro, ma basta metterlo nella cartella protetta)

E questo è tutto, come dichiarato in questa pagina:

https://git-scm.com/docs/git-credential-store


30
2017-09-21 13:03



Probabilmente sono un po 'lento, ma non mi è stato subito chiaro che avevo bisogno di scaricare prima l'helper! Ho trovato il download di credential.helper su Atlassian's Autenticazione permanente con repository Git, spero che sia d'aiuto.

Citazione:

Seguire questi passaggi se si desidera utilizzare Git con memorizzazione delle credenziali nella cache su OSX:

Scarica il binario git-credential-osxkeychain.

Eseguire il comando seguente per assicurarsi che il binario sia eseguibile:

chmod a+x git-credential-osxkeychain

Mettilo nella directory / usr / local / bin.

Esegui il comando qui sotto:

git config --global credential.helper osxkeychain

18
2017-10-05 05:31



In una configurazione GNU / Linux, un ~ / .netrc funziona abbastanza bene:

$ cat ~/.netrc
machine github.com login lot105 password howsyafather

Potrebbe dipendere da quali librerie di rete Git sta usando HTTPS trasporto.


18
2017-12-05 13:28