Git continua a chiedermi una password


665

Sto usando Git da un po 'di tempo, ma le costanti richieste di password stanno iniziando a spingermi verso il muro.

Sto usando Mac OS X e GitHub e ho impostato Git e le mie chiavi SSH come indicato nella pagina di configurazione di GitHub .

Ho anche aggiunto la chiave SSH github al mio portachiavi Mac OS X, come menzionato nella pagina delle passphrase della chiave SSH di GitHub . La mia chiave pubblica è registrata con Git.

Tuttavia, ogni volta che provo a estrarre Git, devo inserire il mio nome utente e la mia password. C'è qualcosa di diverso da una chiave SSH che devo impostare per questo?


1
Domanda sciocca, ma hai verificato che la chiave SSH funziona quando usi semplicemente ssh sulla macchina con git?
Kurt Stutsman,

4
Intendi qualcosa come ssh -T git@github.com? Sì, funziona benissimo (se un po 'lento).
Catherine,


Per https url, puoi usare (con git1.8.3 +) un aiuto credenziali git ' netrc'. Vedi un esempio completo qui .
VonC,

Sono un utente Windows e ho riscontrato problemi con la richiesta di password anche dopo aver aggiunto la mia chiave pubblica al file authorized_keys del server. Quello che realmente era il problema era che non tenevo le mie chiavi pubbliche / private nella cartella .ssh della cartella c: \ program files \ git. Se qualcuno si trova ad affrontare questo problema, copia le chiavi in ​​questa cartella e prova a spingere / tirare.
Raja Amer Khan,

Risposte:


797

Penso che potresti avere l'URL del repository Git errato.

Apri .git/confige trova la sezione [remota "origine"]. Assicurati di utilizzare quello SSH:

ssh://git@github.com/username/repo.git

Puoi vedere l'URL SSH nella pagina principale del tuo repository se fai clic su Clona o scarica e scegli ssh .

E NON il httpso gituno:

https://github.com/username/repo.git
git://github.com/username/repo.git

Ora puoi convalidare solo con la chiave SSH anziché il nome utente e la password.

Se Git si lamenta di ciò 'origin' has already been added, apri il .configfile e modifica la url = "..."parte dopo [remote origin]comeurl = ssh://github/username/repo.git


Lo stesso vale per altri servizi. Assicurati che l'indirizzo assomigli a:protocol://something@url

Ad esempio .git/configper Azure DevOps:

[remote "origin"]
    url = https://mystore@dev.azure.com/mystore/myproject/
    fetch = +refs/heads/*:refs/remotes/origin/*

4
Questo potrebbe essere. Quando chiamo git remote -v ottengo: origin github.com/Foo/Bar.git (recupero) origin github.com/Foo/Bar.git (push) mentre per lavorare con SSH sembra che dovrebbe essere: origin git @ github.com: Foo / Bar.git (fetch) origine git@github.com: Foo / Bar.git (push) Ciò può essere dovuto al fatto che inizialmente ho verificato il mio progetto usando l'applicazione Mac di GitHub ( mac.github.com ). Qualche idea su come posso ripararlo?
Catherine,

8
Correggi l'URL nel file .git / config, usa git-remote per ripararlo o elimina il tuo repository locale e clonalo nuovamente con l'URL corretto.
static_rtti,

91
Giusto per spiegarlo (se ne avevo bisogno): apri .git / config e nel [remote "origin"]set di sezioni url = ssh://git@github.com/username/Repo.git. Questo ha funzionato per me.
Greg K,

13
Strano, la soluzione di @ GregK non ha funzionato per me, ma url = git@github.com:organization/Repo.githa funzionato. +1 per avermi condotto lungo la strada giusta! Successo!
jmort253,

3
Non posso sottolineare abbastanza quanto sia importante CLONE usando ssh: // git @ github / [username] / [ripeti il ​​nome] .git è che vuoi usare una chiave per accedere a GIT non devi digitare il tuo nome utente e password ogni volta . Ho trovato che l'unico modo per risolverlo era rimuovere il repository locale e clonare di nuovo $ git clone ssh: // git @ github / [username] / [reponame] .git
Gene Myers

555

Configurazione di credential.helper

Su OS X (ora macOS), eseguilo nel Terminale :

git config --global credential.helper osxkeychain

Consente a Git di utilizzare il file Keychain.app per memorizzare nome utente e password e recuperare la passphrase sulla chiave SSH privata dal portachiavi.

Per Windows utilizzare:

git config --global credential.helper wincred

Risoluzione dei problemi

Se l'helper delle credenziali Git è configurato correttamente macOS salva la passphrase nel portachiavi. A volte la connessione tra SSH e le passphrase archiviate nel portachiavi può interrompersi. Esegui ssh-add -Ko ssh-add ~/.ssh/id_rsaper aggiungere di nuovo la chiave al portachiavi.

macOS v10.12 (Sierra) diventa ssh

Per macOS v10.12 (Sierra), ssh-add -Kdeve essere eseguito dopo ogni riavvio. Per evitarlo, crealo ~/.ssh/configcon questo contenuto.

Host *
   AddKeysToAgent yes
   UseKeychain yes
   IdentityFile ~/.ssh/id_rsa

Dalla ssh_config manpagina del 10.12.2:

UseKeychain

Su macOS, specifica se il sistema deve cercare passphrase nel portachiavi dell'utente quando tenta di utilizzare una chiave particolare. Quando la passphrase viene fornita dall'utente, questa opzione specifica anche se la passphrase deve essere archiviata nel portachiavi una volta verificato che sia corretto. L'argomento deve essere "sì" o "no". L'impostazione predefinita è "no".

Apple ha aggiunto Technote 2449 che spiega cosa è successo.

Prima di macOS Sierra, sshpresentava una finestra di dialogo che chiedeva la passphrase e offriva l'opzione di memorizzarla nel portachiavi. Questa UI è stata deprecata qualche tempo fa ed è stata rimossa.


30
Questo è di gran lunga il modo migliore per farlo poiché l'applicazione Github per OSX (forse anche Windows) utilizza il percorso https per i repository git per impostazione predefinita. C'è anche una buona ragione per usare https piuttosto che ssh / git poiché molte reti aziendali consentono il traffico sulla porta 80 e 443 solo per motivi di sicurezza.
codehugger,

2
È necessario git 1.7.10 o successivo per utilizzare l'helper delle credenziali.
jbandi,

3
+1 per la soluzione keychain.app. Questo è FANTASTICO per me perché il server git del mio datore di lavoro supporta solo http servito tramite apache e scoraggia fortemente usando il .netrcmetodo file che mette la tua password in chiaro.
Josh

3
Nota, ho ricevuto l'errore 'credential-osxkeychain' is not a git command.poiché non avevo installato l'helper delle credenziali. Ho seguito le istruzioni qui per installarlo: help.github.com/articles/set-up-git#password-caching
Hugh

2
Grazie per l'aggiornamento Sierra, ho appena aggiornato e non sono riuscito a capire perché Github continuava a chiedere pw quando ho aggiunto il git config --global credential.helper osxkeychainfile The config nella mia .sshdirectory mi ha risolto.
pixel 67

139

Questo è successo a me quando sono passato a macOS v10.12 (Sierra). Sembra che l'agente SSH sia stato cancellato al momento dell'aggiornamento.

$ ssh-add -L
The agent has no identities.

Semplicemente in esecuzione ssh-addho trovato la mia identità esistente. Ho inserito la password ed è stato bello tornarci.


9
+1 interrotto dall'aggiornamento Sierra. Nota che la password è la password per la chiave SSH e non per la password dell'utente Mac.
mbonness

1
Fare ssh-add funziona ma sembra ripristinato chiudendo la finestra Terminale. Forse questa è una nuova "caratteristica".
joshd,

Heads up - questo è successo di nuovo con un altro aggiornamento Sierra (10.12.2) ma si applica la stessa correzione.
Brian,

Qualcuno sa come non ripristinarlo dopo la chiusura del Terminale?
Nickjwallin,

1
Avevo appena aggiornato il mio macbook pro al 10.12.2 e mi ha rotto il cervello. L'uso di ssh-add ha funzionato totalmente per me. Grazie @amcc!
jimmyplaysdrums,

68

Utilizzare questo: sostituire github.com con il nome host appropriato

git remote set-url origin git@github.com:user/repo.git

Ho già impostato questo durante la visualizzazione git remote -v. Tuttavia, mi viene ancora richiesta la password.
IgorGanapolsky,

Lo stesso, ho impostato come suggerito, ma ricevo ancora la richiesta di password, come posso impedirlo?
cyber8200,

@IgorGanapolsky: hai mai trovato una soluzione per te?
cyber8200,

1
Questo funziona correttamente. Questo è strano che l'URL remoto con git@**non richiede credenziali e l'URL con lo https@**fa :). Così ho trovato questo documento .
Sujit Kumar Singh,

54

Come altri hanno già detto, è possibile installare un helper della cache delle password. Per lo più volevo solo pubblicare il link per altre piattaforme e non solo per Mac. Sto eseguendo un server Linux e questo è stato utile: memorizzazione nella cache della password GitHub in Git

Per Mac:

git credential-osxkeychain

Finestre:

git config --global credential.helper wincred

Linux:

git config --global credential.helper cache
git config --global credential.helper 'cache --timeout=3600'
# Set the cache to timeout after 1 hour (setting is in seconds)

5
Ho dovuto scorrere fino alla terza risposta per vedere le istruzioni di Linux, queste dovrebbero essere nella risposta principale poiché si tratta di un problema comunemente indicato.
KoldBane,

22

Cerca anche chi ti sta chiedendo la passphrase. È Git o il tuo agente SSH?

Nel mio caso, ogni volta che lo facevo git pullmi chiedeva:

Enter passphrase for key '/work/username/.ssh/id_rsa':

Quindi ho pensato che fosse Git a chiedere una passphrase. Quindi ho continuato a cercare soluzioni, solo per rendermi conto in seguito che il mio agente SSH aveva chiuso. Che può essere risolto usando eval $(ssh-agent)e ssh-addcome indicato qui.

Inoltre sto incollando di seguito un piccolo frammento che puoi aggiungere al tuo ~/.bashrcfile (o equivalente) per assicurarti che il tuo agente SSH sia avviato al tuo login.

In ogni caso questo è stato un errore piuttosto sciocco che ho fatto, ma pubblicarlo qui, nel caso in cui aiuti qualcuno a risparmiare un po 'di tempo abbaiando sull'albero sbagliato, come ho fatto io.

# 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


Abbastanza sicuro che ti manca una riga nel codice sopra - secondo stackoverflow.com/a/18915067/277023 devi avereSSH_ENV="$HOME/.ssh/environment"
kellyfj

20
git config credential.helper store

Nota: sebbene sia conveniente, Git memorizzerà le tue credenziali in chiaro in un file locale (.git-credentials) nella directory del tuo progetto (vedi sotto per la directory "home"). Se non ti piace, elimina questo file e passa all'opzione cache.

Se vuoi che Git riprenda a chiederti le 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 directory% HOME% rispetto alla directory del progetto: utilizzare il flag --global

git config --global credential.helper store

9

Guida a Git su Windows e GitHub usando SSH per spingere / tirare: una guida illustrata a Git su Windows

  1. Scarica e installa PuTTY
  2. Imposta la variabile di ambiente 'GIT_SSH' = 'path \ to \ plink.exe' (nella cartella putty installata) - molto importante !!!
  3. Riavvia Esplora risorse per rendere effettive le variabili di ambiente (impossibile solo riavviare il prompt dei comandi)
  4. Esegui puttygen.exe per generare una nuova chiave, copia la chiave pubblica sul sito GitHub
  5. Salva questa nuova chiave privata in un posto sicuro sul disco (preferibilmente non su Dropbox )
  6. Esegui putty.exe e collega SSH a github.co
  7. Passa rapidamente alla cartella di avvio eseguendo "shell: startup".
  8. Crea la tua chiave privata di avvio con Windows tramite concorso. Creare un collegamento nella cartella Avvio con la sintassi "percorso \ a \ pageant.exe" "percorso \ a \ chiave privata"
  9. Non è necessario impostare l'impostazione 'puttykeyfile' all'interno di .git / config dei nostri repository
  10. È molto importante che venga utilizzato l '"URL clone SSH" di GitHub e non HTTPS.

Nessuno dovrebbe più usare lo stucco. Ora puoi fare tutto con le utilità integrate di Windows 10. Lascia che lo stucco sia solo stucco.
Ian Smith

9

In Windows per Git 1.7.9+, eseguire il comando seguente al prompt dei comandi per aprire il file di configurazione in un editor di testo:

    git config --global --edit

Quindi nel file, aggiungi il seguente blocco se non presente o modificalo di conseguenza:

    [credential "https://giturl.com"]
        username = <user id>
         helper = wincred

Salva e chiudi il file. Dovrai fornire le credenziali solo una volta dopo la modifica di cui sopra.


funziona perfettamente, mi hai salvato le ore, ora posso concentrarmi sul mio lavoro, grazie mille fratello.
Mohammed Sufian,

9

Utilizzare il comando seguente per aumentare il periodo di timeout in modo da poter digitare nuovamente la password per un po '

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

L'ho usato per Bitbucket e GitHub funziona per entrambi. L'unica cosa che devi fare 3600è in pochi secondi. Aumentalo nella misura che desideri. L'ho cambiato in 259200circa 30 giorni. In questo modo reinserisco la mia password per circa 30 giorni circa.


1
Ok, ho scoperto che questo non persiste dopo un riavvio, quindi è ancora necessario inserire la password dopo un riavvio, indipendentemente dal timeout ...
Ben Winding

Questo è un bel modo di fare nella cache :) Almeno mi ha fatto risparmiare tempo. Grazie
ChikuMiku il

@BenWinding perché memorizza le credenziali in memoria.
z3dd,

5

Immagino che tu abbia risolto il tuo problema, ma non vedo qui la soluzione che mi ha aiutato, quindi eccolo qui.

Digitare il terminale:

echo "" > ~/.ssh/known_hosts

Questo svuoterà il tuo known_hostsfile e dovrai aggiungere tutti gli host a cui hai utilizzato e a cui ti sei connesso, ma ha risolto il problema.


1
cat /dev/null > ~/.ssh/known_hostsfarà lo stesso.
Tin Man,

5
> ~/.ssh/known_hostsè ancora più breve :)
Collin Allen,

rm ~ / .ssh / known_hosts dovrebbe fare anche il lavoro. Vorrei sconsigliare questo però.
orkoden,

3
Se è necessario rimuovere un host da ~ / .ssh / known_hosts, esiste un modo meno efficace di cancellare il file. ~ / .ssh / known_hosts è solo un file di testo e se riesci a trovare gli host offensivi nel file, puoi semplicemente eliminare le loro righe. Potrebbe essere necessario eseguire il backup del file prima di modificarlo. Se hai solo poche voci nel file, cancellarlo potrebbe non essere una cattiva idea. Lavoro su molti server, quindi il mio ~ / .ssh / known_hosts contiene centinaia di voci e non sono ancora pronto per eliminarle tutte per rimuovere alcune voci.
Tim Stewart,

3
@papan Questo non impedisce a git di chiedermi la mia password!
IgorGanapolsky,

5

Penso che la risposta fornita da static_rtti sia in qualche modo confusa. Non so se questo era disponibile prima, ma gli strumenti Git ora forniscono l'archiviazione delle credenziali.

Modalità cache

$ git config --global credential.helper cache

Utilizzare la modalità "cache" per conservare le credenziali in memoria per un determinato periodo di tempo. Nessuna delle password viene mai archiviata sul disco e viene eliminata dalla cache dopo 15 minuti.

Modalità Store

$ git config --global credential.helper 'store --file ~/.my-credentials'

Utilizzare la modalità "store" per salvare le credenziali in un file di testo normale su disco e non scadono mai.

Personalmente ho usato la modalità store . Ho cancellato il mio repository, l'ho clonato e poi ho dovuto inserire le mie credenziali una volta.

Riferimento: 7.14 Git Tools - Credential Storage


Per Windows credential.helper cacheNON funziona. Dovrebbe essere git config --global credential.helper wincred.
Paulo Merson,

La memorizzazione ha funzionato e ora mi consente di eseguire il commit delle mie modifiche senza richiedere sempre una password, sei un vero toccasana!
g4ost,

In Linux questo ha fatto il lavoro per me git config --local credential.helper store. Nel mio caso, sono su HTTPS, in questo modo
digito

3

La risposta di orkoden sull'uso del portachiavi con Git nel tuo terminale è stata incompleta e genera errori. Questo è ciò che devi fare per salvare il nome utente e la password che inserisci nel terminale nel tuo portachiavi:

curl http://github-media-downloads.s3.amazonaws.com/osx/git-credential-osxkeychain -o git-credential-osxkeychain
sudo mv git-credential-osxkeychain /usr/local/bin
sudo chmod u+x /usr/local/bin/git-credential-osxkeychain

Quindi entra

git config --global credential.helper osxkeychain

Se hai già fatto la parte con la configurazione di Git prima del robocco, non c'è problema; funzionerà.


1
E se fossi su Linux.
IgorGanapolsky,

3

Come detto static_rtti sopra, cambia

https://github.com/username/repo.git
git://github.com/username/repo.git

per

ssh://git@github.com/username/repo.git

Io stesso ho cambiato il httpsfile .git / config in ssh, ma non funzionava ancora. Poi ho visto che devi passare github.coma git@github.com. Un buon modo per ottenere l'URL corretto è quello di andare alla pagina del progetto e fare clic su questo:

Cambia HTTPS in SSH per ottenere l'URL giusto

Quindi aggiungi questo URL al file di configurazione.


Ho già questo nel mio file di configurazione di configurazione cos'altro dovrei controllare?
cyber8200,

L'hai cambiato anche su github.com?
Cheesus Crust

3

Nel sottosistema Windows per Linux (WSL) questa era l'unica soluzione che ho trovato funzionare:

eval `Ssh-agent` ; ssh-add ~/.ssh/id_rsa

Si è verificato un problema con l'agente ssh non registrato correttamente in WSL.


Sono stato un whlie, ma questo è ciò che ha risolto il mio problema.
Nam Kim,

3

Se vuoi impedire a Git di chiedere sempre le credenziali di accesso al tuo repository GitHub, puoi farlo facilmente.

Utilizzo di SSH anziché HTTPS

Puoi aggiornare il telecomando di origine utilizzando SSH anziché HTTPS "

git remote set-url origin git@github.com:username/your-repo.git

Configura Git per memorizzare la password e il nome utente

Ecco come puoi fare in modo che Git memorizzi il nome utente e la password:

git config --global credential.helper store

Quindi, salva il nome utente e la password per una sessione:

git config --global credential.helper cache

2

Sono d'accordo con "codehugger" e usando le istruzioni di "orkoden" ha funzionato per me - su NetBeans 7.3 - quando fai clic con il pulsante destro del mouse sul file e selezioni il menu di scelta rapida - push - si apre una finestra "push to remote" - ce ne sono due opzioni qui:

  1. origin:https://github.com/myaccount/myproject.git/

  2. https://github.com/myaccount/myproject.git/

Come puoi vedere, la differenza è il parametro di origine nell'URL - non vuoi scegliere questa opzione (1) che vuoi controllare l'opzione (2), e per me funziona bene.


2

Passaggio 1: verifica la configurazione corrente

cat .git/config

Otterrete:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
    precomposeunicode = true
[remote "origin"]
    url = https://github.com/path_to_your_git.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[user]
    name = your_username
    email = your_email
[branch "master-staging"]
    remote = origin
    merge = refs/heads/master-staging

Passaggio 2: rimuovere l'origine remota

git remote rm origin

Passaggio 3: aggiungere nuovamente l'origine remota con nome utente e password

git remote add origin https://your_git_username:your_git_password@github.com/path_to_your_git.git

Dopo aver aggiunto di nuovo l'origine remota, devi anche allineare i tuoi rami remoti e locali - qualcosa del genere: git branch --set-upstream master origin/master
Richard Bown,

2

Se Git ti richiede un nome utente e una password ogni volta che tenti di interagire con GitHub, probabilmente stai usando l'URL del clone HTTPS per il tuo repository.

L'uso di un URL remoto HTTPS presenta alcuni vantaggi: è più facile da configurare rispetto a SSH e di solito funziona attraverso firewall e proxy rigidi. Tuttavia, ti chiede anche di inserire le tue credenziali GitHub ogni volta che esegui il pull o il push di un repository.

Puoi configurare Git per memorizzare la tua password. Per Windows :

git config --global credential.helper wincred

2

Con macOS Cataline 10.15, il metodo di memorizzazione nella cache del portachiavi non funzionava per me. E volevo usare https://nonssh

Ecco cosa ha funzionato per me:

git remote rm origin

git remote add origin https://your_git_username:your_git_password@github.com/path_to_your_git.git

Questo dovrebbe funzionare anche su GitLab

Assicurati che il nome utente contenga un indirizzo e-mail, per rimuovere la @emailparte o visualizzerai un erroreURL using bad/illegal format or missing URL .

Spero che sia di aiuto!


1
Questa è l'unica soluzione che ha funzionato per me. tuo_git_username era fondamentale. In realtà non era necessario inserire: your_git_password. A questo punto, sebbene richiedesse ancora una "passphrase", ora accetterebbe la password dell'account.
Kbulgrien,

1

Esistono diversi tipi di autenticazioni a seconda della configurazione. Eccone alcuni:

  1. git credential-osxkeychain.

    Se la tua credenziale non è valida, rimuovila come segue:

      git credential-osxkeychain erase
    

    o:

      printf "protocol=https\nhost=github.com\n" | git credential-osxkeychain erase
    

    Quindi Git non ti chiederà di nuovo l'autorizzazione per il portachiavi. Quindi configurarlo di nuovo.

    Vedi: Aggiornamento delle credenziali dal portachiavi OS X su GitHub

  2. La tua chiave SSH RSA.

    Per questo, devi confrontare la tua chiave SSH con ciò che hai aggiunto, controlla con ssh-add -L/ ssh-add -lse stai usando l'identità giusta.

  3. La tua autenticazione HTTPS (se stai usando httpsinvece del sshprotocollo).

    Utilizzare ~/.netrc( %HOME%/_netrcsu Windows) per fornire le proprie credenziali, ad es

      machine stash1.mycompany.com
      login myusername
      password mypassword
    

Ulteriori informazioni: Sincronizzazione con GitHub in Stack Overflow.


1

Prima di poter utilizzare la chiave con GitHub, seguire questo passaggio nell'esercitazione, Test della connessione SSH :

$ ssh -T git@github.com
# Attempts to ssh to GitHub



0

Soluzione Microsoft Stack (Windows e Azure DevOps)

Per prima cosa apri il .git/configfile per assicurarti che l'indirizzo assomigli a:

protocol://something@url

Ad esempio .git / config per Azure DevOps:

[remote "origin"]
    url = https://mystore@dev.azure.com/mystore/myproject/
    fetch = +refs/heads/*:refs/remotes/origin/*

Se il problema persiste, apri Gestione credenziali di Windows , fai clic sulla cassetta di sicurezza denominata Credenziali di Windows e rimuovi tutte le credenziali relative a git.

Ora la prossima volta che accedi a git, non sparirà più.


0

Se hai impostato l'agente SSH, puoi anche aggiungerlo al tuo ~/.gitconfigper forzare git a usare SSH per tutti i repository GitHub anziché HTTPS:

[url "ssh://git@github.com/"]
    insteadOf = git://github.com/
    insteadOf = https://github.com/

(Se lavori principalmente con repository pubblici, puoi anche utilizzare pushInsteadOfinvece di insteadOf, poiché la lettura da un repository pubblico può essere eseguita senza autenticazione).

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.