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)?
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 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.
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:
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
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’opzionegpg
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
‘
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:
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.
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
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.
git config --global credential.helper osxkeychain
(è richiesto l’ osxkeychain helper
), git config --global credential.helper wincred
git config --global credential.helper cache
Relazionato:
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:
Host
, IdentityFile
per la chiave di distribuzione, forse UserKnownHostsFile
e forse l’ User
(anche se penso che non ti serva). ssh -F /path/to/your/config $*
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:
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
sutrue
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 drivergit
, 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)