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. In passato avevo un certificato SSH , ed era abbastanza. C’è un modo per bypassare la password nel mio caso (utilizzando http / https)?

Con Git versione 1.7.9 e successive

Da Git 1.7.9 (rilasciato alla fine di gennaio 2012), esiste un meccanismo pulito in Git per evitare di dover digitare la password per tutto il tempo per HTTP / HTTPS, chiamato help delle credenziali . (Grazie a dazonic per aver segnalato questa nuova funzione 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. È ansible impostare un timeout più lungo con:

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

(Questo esempio è stato suggerito nella pagina di aiuto di GitHub per Linux .) È anche ansible 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 utilizzi Homebrew per installare Git, puoi utilizzare il keystore nativo di Mac OS X con:

 git config --global credential.helper osxkeychain 

Per Windows, c’è un helper 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, è ansible utilizzare gnome-keyring (o altra implementazione di keyring 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 utilizzato dal tuo telecomando di origin per includere la password in questo modo:

 https://you:[email protected]/you/example.git 

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

Puoi impostare un nuovo URL per il tuo telecomando di origin con:

 git config remote.origin.url https://you:[email protected]/you/example.git 

Assicurati di utilizzare https e dovresti sapere che se lo fai, la tua password GitHub verrà archiviata in chiaro nella tua directory .git , che è ovviamente indesiderabile.

Con qualsiasi versione Git (beh, dalla versione 0.99)

Un approccio alternativo è quello di inserire il nome utente e la password nel file ~/.netrc , sebbene, come nel caso di mantenere la password nell’URL remoto, ciò significa che la password verrà memorizzata sul disco in testo semplice e quindi meno sicura e non consigliato. Tuttavia, se vuoi seguire questo approccio, aggiungi la seguente riga al tuo ~/.netrc :

 machine  login  password  

… sostituendo con il nome host del server e e con 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 _netrc , e potresti aver bisogno di definire la variabile d’ambiente% HOME% – per maggiori dettagli vedi:

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

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 credenziali in chiaro in 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 usare l’opzione cache.

Se vuoi che Git riprenda a chiedere credenziali ogni volta che deve connettersi al repository remoto, puoi eseguire questo comando:

 git config --unset credential.helper 

Per memorizzare le password in .git-credentials nella tua directory %HOME% rispetto alla directory del progetto: usa la flag --global

 git config --global credential.helper store 

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

Salvataggio di una password per un repository Git L’URL HTTPS è ansible con un ~/.netrc (Unix) o %HOME%/_netrc (si noti il _ ) su Windows.

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

Soluzione : crittografate il file con GPG (GNU Privacy Guard) e fate decodificare Git ogni volta che necessita di una password (per operazioni push / pull / fetch / clone ).


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

Vedi 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 l’opzione gpg

git-credential-netrc era hardcoded per decifrare con ‘ gpg ‘ indipendentemente dall’opzione gpg.program.
Questo è un problema su distribuzioni come Debian che chiamano qualcos’altro GnuPG, come ‘ gpg2


Istruzioni dettagliate per Windows

Con Windows:

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

  • Installa gpg4Win Lite , l’interfaccia minima della riga di comando gnupg (prendi il più recente gpg4win-vanilla-2.XY-betaZZ.exe ) e completa il PATH 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 

(Nota il comando ‘ copy ‘: Git avrà bisogno di uno script Bash per eseguire il comando ‘ gpg ‘. Poiché gpg4win-vanilla-2 viene fornito 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 helper delle credenziali in una directory all’interno di %PATH% :

     cd c:\a\fodler\in\your\path curl -oc:\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 la parte ” protocol “: ” http ” o ” https ” a seconda dell’URL che userai).

  • Cripta quel file:

     gpg -e -r a_recipient _netrc 

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

  • Usa quel file crittografato:

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

(Nota: ‘ / ‘: C:\path\to... non funzionerebbe affatto.) (Puoi usare al primo -v -d per vedere cosa sta succedendo).

D’ora in poi, qualsiasi comando Git che utilizza un URL HTTP (S) che richiede l’autenticazione decodificherà il file _netrc.gpg e utilizzerà il login / password associato al server che stai 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 fornirà quella passphrase per te.

In questo modo, è ansible memorizzare diversi URL / login / password in un unico file e memorizzarlo sul disco crittografato.
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.

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

 https://user:[email protected]/... 

Puoi cambiare l’URL con git remote set-url

L’ovvio lato negativo di questo approccio è che è necessario memorizzare la password in formato testo. Puoi sempre inserire il nome utente ( https://[email protected]/... ) che ti farà risparmiare almeno metà del problema.

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

Utilizzare un negozio di credenziali.

Per git 2.11+ su OSX e Linux , utilizzare l’archivio di credenziali integrato di git :

 git config --global credential.helper libsecret 

Per msysgit 1.7.9+ su Windows :

 git config --global credential.helper wincred 

Per Git 1.7.9+ su OS X usare:

 git config --global credential.helper osxkeychain 

Puoi semplicemente usare

 git config credential.helper store 

Quando inserisci la password la prossima volta con pull o push, verrà memorizzato in .git-credentials come testo normale (un po ‘non sicuro, ma semplicemente messo nella cartella protetta)

E questo è tutto, come dichiarato in questa pagina:

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

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, che si autentica in modo permanente con i 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 

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 per il trasporto HTTPS .

Inserisci semplicemente le credenziali di accesso come parte dell’URL:

 git remote rm origin git remote add origin https://username:[email protected]/path/to/repo.git 

Per Windows è ansible utilizzare il plugin Git Credential Manager (GCM). Attualmente è gestito da Microsoft. La cosa bella è che salva la password nell’archivio credenziali di Windows, non come testo normale.

C’è un programma di installazione nella pagina delle versioni del progetto. Questo installerà anche la versione ufficiale di git-for-windows con il gestore delle credenziali integrato. Permette l’autenticazione a 2 fattori per github (e altri server). E ha un’interfaccia grafica per l’accesso iniziale.

Per utenti cygwin (o utenti che già utilizzano git-for-windows ufficiale), si potrebbe preferire l’installazione manuale. Scarica il pacchetto zip dalla pagina dei rilasci . Estrai il pacchetto, quindi esegui install.cmd . Questo verrà installato nella tua cartella ~/bin . (Assicurati che la tua directory ~/bin si trovi nel tuo PERCORSO.) Quindi la configuri usando questo comando:

 git config --global credential.helper manager 

Git eseguirà quindi git-credential-manager.exe durante l’autenticazione su qualsiasi server.

Se non vuoi memorizzare la tua password in chiaro come Mark ha detto, puoi usare un URL github diverso per il recupero piuttosto che per spingere. Nel tuo file di configurazione, sotto [remote "origin"] :

 url = git://github.com/you/projectName.git pushurl = [email protected]:you/projectName.git 

Richiederà comunque una password quando si preme, ma non quando si recupera, almeno per i progetti open source.

È ansible utilizzare i supporti delle credenziali.

 git config --global credential.helper 'cache --timeout=x' 

dove x è il numero di secondi.

OAuth

Puoi creare il tuo token API personale ( OAuth ) e utilizzarlo nello stesso modo in cui utilizzeresti le tue normali credenziali (in: /settings/tokens ). Per esempio:

 git remote add fork https://[email protected]/foo/bar git push fork 

.netrc

Un altro metodo è quello di configurare il tuo utente / password in ~/.netrc ( _netrc su Windows), ad es

 machine github.com login USERNAME password PASSWORD 

Per https:

 machine github.com login USERNAME password PASSWORD protocol https 

un aiutante di credenziali

Per memorizzare nella cache la tua password GitHub in Git quando utilizzi HTTPS, puoi utilizzare un aiutante delle credenziali per comunicare a Git di ricordare il tuo nome utente e la password GitHub ogni volta che dialoga con GitHub.

  • Mac: git config --global credential.helper osxkeychain (è richiesto l’ osxkeychain helper ),
  • Windows: git config --global credential.helper wincred
  • Linux e altro: git config --global credential.helper cache

Relazionato:

  • Come conservare la tua password https GitHub su Linux in un portachiavi del terminale?
  • Come faccio a garantire che Git non mi chieda il nome utente e la password GitHub?
  • Configura i client Git, come GitHub per Windows, per non chiedere l’autenticazione
  • Trasferimento di un repository locale a un repository GitHub con autenticazione a doppio fattore

Dopo aver clonato un repo , puoi modificare repo/.git/config e aggiungere alcuni config come qui sotto:

 [user] name = you_name password = you_password [credential] helper = store 

Quindi non ti verrà chiesto di nuovo username e password .

È necessario utilizzare un token di autenticazione al posto della password dell’account. Vai alle impostazioni / applicazioni GitHub e poi crea un token di accesso personale. Il token può essere utilizzato allo stesso modo di una password.

Il token ha lo scopo di consentire agli utenti di non utilizzare la password dell’account per il lavoro del progetto. Utilizzare la password solo quando si eseguono operazioni di amministrazione, come creare nuovi token o revocare vecchi token.


Invece di un token o una password che concede a un utente l’accesso completo a un account GitHub, è ansible utilizzare una chiave di implementazione specifica del progetto per concedere l’accesso a un singolo repository di progetto. Un progetto Git può essere configurato per utilizzare questa chiave diversa nei seguenti passaggi quando è ancora ansible accedere ad altri account o progetti Git con le normali credenziali:

  1. Scrivi un file di configurazione SSH che contiene l’ Host , IdentityFile per la chiave di distribuzione, forse UserKnownHostsFile e forse l’ User (anche se penso che non ti serva).
  2. Scrivi uno script di shell wrapper SSH che virtualmente è ssh -F /path/to/your/config $*
  3. GIT_SSH=/path/to/your/wrapper davanti al tuo normale comando Git. Qui git remote (origin) deve utilizzare il formato [email protected]:user/project.git .

So che questa non è una soluzione sicura, ma a volte serve solo una soluzione semplice, senza installare altro. E poiché helper = store non ha funzionato per me, ho creato un aiutante fittizio:

Crea uno script e mettilo nella cartella bin degli utenti, qui chiamato credfake , questo script fornirà il tuo nome utente e la tua password:

 #!/bin/bash while read line do echo "$line" done < "/dev/stdin" echo username=mahuser echo password=MahSecret12345 

renderlo eseguibile:

 chmod u+x /home/mahuser/bin/credfake 

quindi configuralo in git:

 git config --global credential.helper /home/mahuser/bin/credfake 

(o usalo senza --global per il solo repository)

e - voilá - git userà questa user + password.

È meglio usare le credenziali per la sicurezza, ma puoi tenerlo per un po ‘di tempo usando la cache

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

Le credenziali verranno salvate per 3600 secondi.

Le cose sono un po ‘diverse se usi l’ autenticazione a due fattori come sono io. Dal momento che non ho trovato una buona risposta altrove, ne inserirò una qui in modo che forse la trovo più tardi.

Se si utilizza l’autenticazione a due fattori, la specifica di nome utente / password non funzionerà nemmeno – si ottiene l’accesso negato. Ma puoi utilizzare un token di accesso all’applicazione e utilizzare l’helper delle credenziali di Git per memorizzarlo per te. Ecco i link pertinenti:

  • Impostazione della riga di comando per lavorare con l’autenticazione a 2 fattori (cercare la sezione “Come funziona per Git da riga di comando?”)
  • Memorizzazione nella cache delle credenziali

E non ricordo dove ho visto questo, ma quando ti viene richiesto il tuo nome utente – è lì che tieni il token di accesso all’applicazione. Quindi lascia la password vuota. Ha funzionato sul mio Mac.

Ho ricevuto la mia risposta da gitcredentials (7) Pagina manuale . Per il mio caso, non ho cache delle credenziali nella mia installazione di Windows; Uso il negozio di credenziali.

Dopo aver usato credential-store, il nome utente / password sono memorizzati nel file [cartella utente] /. Git-credentials. Per rimuovere il nome utente / password, basta eliminare il contenuto del file.

Questo funziona per me sto usando Windows 10

 git config --global credential.helper wincred 

La documentazione del compositore menziona che puoi impedire che usi l’API GitHub, in modo che si comporti come git clone :

Se si imposta la chiave no-api su true su un repository GitHub, clonerà il repository come farebbe con qualsiasi altro repository Git invece di utilizzare l’API GitHub. Ma diversamente dall’utilizzo diretto del driver git , il compositore tenterà comunque di utilizzare i file zip di GitHub.

Quindi la sezione sarebbe simile a questa:

 "repositories": [ { "type": "vcs", "no-api": true, "url": "https://github.com/your/repo" } ], 

Tieni presente che l’API è lì per un motivo. Quindi questo dovrebbe essere un metodo di ultima istanza per quanto riguarda l’aumento del carico su github.com.

Inoltre, si modifica il file bashrc e si aggiunge uno script. Questo richiederebbe la tua password quando avvii git una volta e poi la ricorderai fino alla disconnessione.

 SSH_ENV=$HOME/.ssh/environment # start the ssh-agent function start_agent {    echo "Initializing new SSH agent..."    # spawn ssh-agent    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"    echo succeeded    chmod 600 "${SSH_ENV}"    . "${SSH_ENV}" > /dev/null    /usr/bin/ssh-add } if [ -f "${SSH_ENV}" ]; then    . "${SSH_ENV}" > /dev/null  ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {      start_agent;  } else    start_agent; fi 

Di solito hai un URL remoto qualcosa come questo,

 git remote -v origin https://gitlab.com/username/Repo.git (fetch) origin https://gitlab.com/username/Repo.git (push) 

se vuoi saltare username e password mentre usi git push, prova questo

  git remote set-url origin https://username:[email protected]/username/Repo.git 

Ho appena aggiunto lo stesso url (con i dettagli dell’utente inclusa la password) all’origine.

NOTA: non funziona se il nome utente è un ID e-mail.

 git remote -v origin https://username:[email protected]/username/Repo.git (fetch) origin https://username:[email protected]/username/Repo.git (push)