Come salvare nome utente e password in git [GitExtension]?


1243

Voglio usare un push e pull automaticamente in GitExtension , senza inserire il mio utente e la mia password in un prompt, ogni volta.

Quindi, come posso salvare le mie credenziali in Git?


1
È inoltre possibile l'autenticazione tramite SSH: stackoverflow.com/questions/6565357/...
Anton Tarasenko


1
@AntonTarasenko il mio gitconfig non dice nulla sul proxy, solo [user] email = email@dummy.com name = uname [credenziali] helper = store
gc7__

Risposte:


2212

Correre

git config --global credential.helper store

poi

git pull

fornire un nome utente e una password e tali dettagli verranno successivamente ricordati. Le credenziali sono archiviate in un file sul disco, con le autorizzazioni del disco "solo leggibili / scrivibili dall'utente" ma ancora in testo normale.

Se si desidera modificare la password in un secondo momento

git pull

Fallirà, poiché la password non è corretta, git quindi rimuove l'utente + password offensivi dal ~/.git-credentialsfile, quindi ora riesegui

git pull

per fornire una nuova password in modo che funzioni come prima.


6
in che modo il flag -u è importante per cambiare la password in un secondo momento?
lucidbrot,

8
per Debian / Ubuntu utilizzare libsecret stackoverflow.com/questions/36585496/...
rofrol

3
@lucidbrot scusa per la risposta in ritardo. git pull -u non funziona con l'ultima versione. Ho aggiornato la risposta. Spero che risponderà alla tua domanda.
Neetika,

51
Si noti che questo memorizzerà il nome utente e la password in un file di testo semplice in ~ / .git-credentials. Chiunque può aprirlo e leggerlo.
RoboAlex,

12
Questo non funziona Non riesce a tirare.
Urasquirrel,

350

Puoi usare il git configper abilitare l'archiviazione delle credenziali in git.

git config --global credential.helper store

Quando esegui questo comando, la prima volta che esegui il pull o il push dal repository remoto, ti verrà chiesto il nome utente e la password.

Successivamente, per le conseguenti comunicazioni con il repository remoto non è necessario fornire nome utente e password.

Il formato di archiviazione è un .git-credentialsfile, archiviato in testo normale.

Inoltre, puoi utilizzare altri helper per la git config credential.helpercache di memoria, ovvero:

git config credential.helper cache <timeout>

che richiede un facoltativo timeout parameter, determinando per quanto tempo le credenziali verranno conservate in memoria. Usando l'helper, le credenziali non toccheranno mai il disco e verranno cancellate dopo il timeout specificato. Il defaultvalore è900 seconds (15 minutes).


ATTENZIONE : Se usi questo metodo, le password del tuo account git verranno salvate in plaintextformato, ad global .gitconfig filees. In Linux sarà/home/[username]/.gitconfig

Se questo non è desiderabile per te, utilizza invece un ssh keyper i tuoi account.


3
Vorrei che tu mostrassi il file .gitconfig - il primo comando è stato sovrascritto dal secondo :(
Adam

3
Per git config credential.helper cachele password non verranno salvate in un file, memorizzate solo in memoria. Vedi: git-scm.com/docs/git-credential-cache
SA

1
Non funziona. Dà fatale: autenticazione fallita. Non chiede nemmeno la password.
Philip Rego,

2
Proprio come un addendum - la tua chiave ssh privata verrà anche memorizzata in testo normale in una posizione accessibile all'utente, quindi in sostanza la stessa superficie di attacco in entrambi i casi.
Falco,

come posso usare questo per gitlab
Anil

171

Metodo consigliato e sicuro: SSH

Crea una chiave sith Github. Vai su github.com -> Impostazioni -> Chiavi SSH e GPG -> Nuova chiave SSH. Ora salva la tua chiave privata sul tuo computer.

Quindi, se la chiave privata viene salvata come id_rsa nella directory ~ / .ssh / , la aggiungiamo per l'autenticazione in quanto tale:

ssh-add -K ~/.ssh/id_rsa


Un metodo più sicuro: memorizzazione nella cache

Possiamo usare git-credential-store per memorizzare nella cache il nostro nome utente e password per un periodo di tempo. Basta inserire quanto segue nella CLI (terminale o prompt dei comandi):

git config --global credential.helper cache

È inoltre possibile impostare il periodo di timeout (in secondi) come tale:

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


Un metodo ancora meno sicuro

Git-credential-store può anche essere usato, ma salva le password in un file di testo normale sul disco in quanto tale:

git config credential.helper store


Risposta obsoleta: rapida e insicura

Questo è un metodo non sicuro per archiviare la password in testo semplice. Se qualcuno ottiene il controllo del tuo computer, la tua password sarà esposta!

È possibile impostare il nome utente e la password in questo modo:

git config --global user.name "your username"

git config --global user.password "your password"

16
Questo non ha funzionato per me, il clone git chiede ancora il nome utente e la password
Oliver

11
non consiglio di archiviare la password in questo modo perché "git config --global -l" rivelerebbe la tua password sulla console
CCC il

1
Questo non funziona per me. È strano che dovrebbe funzionare per chiunque, poiché nelle specifiche di gitconfig non c'è spazio per "password"
Hamish Todd,

.gitconfig è il diverso file: .git-credentials situato nella cartella home contiene l'URL per repo con il tuo nome utente e la password nell'URL, proprio come git: // username: password @ server / git / repo Stai attento, È SALVATO PASSWORD DI TESTO. Usa "git config --global credential.helper cache" se non puoi usare le chiavi ssh.
skabbit

Quando ho provato ad aggiungere manualmente utente e password il file di configurazione si è rotto e ho dovuto clonare nuovamente il repository. Non provarlo ..
Letie Techera,

102

Attiva l'helper delle credenziali in modo che Git salverà la tua password in memoria per qualche tempo:

In Terminale, immettere quanto segue:

# Set git to use the credential memory cache
git config --global credential.helper cache

Per impostazione predefinita, Git memorizzerà la password nella cache per 15 minuti.

Per modificare il timeout della cache delle password predefinito, immettere quanto segue:

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

Dalla guida di GitHub


7
sei l'unico che ha suggerito la versione globale che è IMPORTANTE, perché è stata rovinata per me ogni volta che ho ri-clonato il repo
Xerus

4
Come impostare il timeout su infinito? Non voglio mai più inserire la mia password.
Avamandro

8
@Avamander sostituisce semplicemente la cacheparte con store. Così, il comando completo sarà: git config --global credential.helper store. Nota che questo memorizzerà la tua password in un file di testo aperto (senza alcuna crittografia, per così dire).
Aleksandar,

2
@Casper Che non funziona con più di un account, la password non viene recuperata dallo store in base all'e-mail come dovrebbe, invece viene presa la prima nell'elenco.
Avamandro

2
@Avamander hm .. dovrebbe essere così o potrebbe essere un bug? Qual è il valore massimo per il --timeoutparametro?
Aleksandar,

50

È possibile modificare il ~/.gitconfigfile per archiviare le proprie credenziali

sudo nano ~/.gitconfig

Che dovrebbe già avere

[user]
        email = your@email.com
        user = gitUSER

Dovresti aggiungere in fondo a questo file.

[credential]
        helper = store

Il motivo per cui consiglio questa opzione è perché è globale e se in qualsiasi momento devi rimuovere l'opzione sai dove andare e cambiarla.

UTILIZZARE SOLO QUESTA OPZIONE IN TE PERSONAL COMPUTER.

Quindi quando tiri | clone | inserisci la tua password git, in generale, la password verrà salvata nel ~/.git-credentialsformato

https://GITUSER:GITPASSWORD@DOMAIN.XXX

DOVE DOMAIN.XXX POTREBBE ESSERE GITHUB.COM | BITBUCKET.ORG | ALTRO

Vedi Documenti

Riavvia il tuo terminale.


1
Non dimenticare di riavviare git bash window. Solo quando l'ho fatto, ha funzionato per me.
sofs1,

33

Inserisci le tue credenziali nell'URL in questo modo:

https://Username: Password@github.com/myRepoDir/myRepo.git

Puoi memorizzarlo in questo modo:

git remote add myrepo https://Userna...

... esempio per usarlo :

git push myrepo master


Ora questo è per elencare gli alias url:

git remote -v

... e che il comando per eliminarne uno:

git remote rm myrepo


8
Puoi anche lasciare la tua password fuori dall'URL così Git ti chiederà la password, ma non il tuo nome utente.
canguro

È molto semplice e sicuro utilizzare SSH anziché HTTP. Quindi, potresti mantenere segreta la tua password Git e usare solo la tua chiave SSH. Informazioni su SSH su Git: help.github.com/en/enterprise/2.16/user/… git@github.com:Username/myRepo.git
Loïch

Avere la tua password nell'URL la salverà nella cronologia del tuo terminale, quindi in questo modo non è molto sicura.
Josh Correia,

Si noti che un Wiki attualmente può essere clonato solo attraverso https, non è ssh, quindi una soluzione di questo tipo può essere utile lì. Nota anche che puoi usare un oauth-token, che è leggermente più sicuro della tua password GitHub.
AstroFloyd,

31

Per l'impostazione globale, aprire il terminale (da qualsiasi posizione) eseguire quanto segue:

  git config --global user.name "your username"
  git config --global user.password "your password"

Con ciò, qualsiasi repository git locale che hai sulla tua macchina utilizzerà tali informazioni.

È possibile configurare individualmente per ciascun repo facendo:

  • aprire il terminale nella cartella repo.
  • eseguire quanto segue:

    git config user.name "your username"
    git config user.password "your password"
    

Interessa solo quella cartella (perché la tua configurazione è locale).


8
Non è pericoloso avere tali credenziali in un semplice file di configurazione visualizzabile da chiunque?
bool3max,

1
la tua domanda dovrebbe essere per un altro argomento. Qui discus su come configurare nome e password per git globale e localmente.
Tuananhcwrs,

Grazie per l'input amico
bool3max

11
Vorrei solo aggiungere che la domanda su possibili problemi di sicurezza di una risposta ha un posto qui in quanto influenza direttamente la sua qualità e potenzialmente migliaia di utenti che la implementano.
Michael Kargl,

2
non funziona per me, ha aggiunto il --localtag ma di nuovo non succede nulla
PayamBeirami il

23

È possibile utilizzare git-credential-store per memorizzare le password non crittografate sul disco, protette solo dalle autorizzazioni del file system.

Esempio

$ git config credential.helper store
$ git push http://example.com/repo.git
Username: <type your username>
Password: <type your password>

[several days later]
$ git push http://example.com/repo.git
[your credentials are used automatically]

È possibile controllare le credenziali archiviate nel file ~/.git-credentials

Per maggiori informazioni visita git-credential-store - Helper per archiviare le credenziali sul disco


17

Sarai più sicuro se usi l'autenticazione SSH rispetto all'autenticazione nome utente / password.

Se stai utilizzando un Mac, l'autenticazione client SSH è integrata nel portachiavi MacOS. Dopo aver creato una chiave SSH, digitare nel terminale:

ssh-add -K ~/.ssh/id_rsa

Ciò aggiungerà la chiave privata SSH al portachiavi MacOS. Il client git utilizzerà ssh quando si connette al server remoto. Finché hai registrato la tua chiave pubblica ssh sul server, starai bene.


1
dovrebbe essere k non K?
dez93_2000,

1
Cordiali saluti: Sto lavorando su un Mac. Detto questo, dalle informazioni "man": "-k" Quando si caricano le chiavi o si eliminano le chiavi dall'agente, elaborare solo semplici chiavi private e saltare i certificati. "-K" Quando si aggiungono identità, ogni passphrase verrà anche memorizzata nel portachiavi dell'utente. Quando si rimuovono le identità con -d, ciascuna passphrase verrà rimossa da essa.
Birol Efe

3
Non penso che questo lavoro per i repository basati su https.
zakmck,

5
Questa risposta sembra confondere le password (repository HTTPS) con le chiavi private SSH.
Steve Bennett,

2
Non sono d'accordo. Non puoi essere più sicuro dando accesso all'host SSH. Utilizzando l'autenticazione HTTP, qualcuno che ruba le credenziali avrebbe accesso solo a GitHub/GitLab. Anche i token sono progettati per avere una vita limitata.
Dimitri Kopriwa,

16

Dopo aver esaminato dozzine di post SO, blog, ecc., Ho provato tutti i metodi e questo è quello che mi è venuto in mente. Copre TUTTO.

The Cheat DevOps Git Credenziali e cheatsheet di pacchetti privati

Questi sono tutti i modi e gli strumenti con cui puoi autenticare in modo sicuro git per clonare un repository senza una richiesta di password interattiva .

  • Chiavi pubbliche SSH
    • SSH_ASKPASS
  • Token di accesso API
    • GIT_ASKPASS
    • .gitconfig inveceOf
    • .gitconfig [credenziale]
    • .git-credenziali
    • .netrc
  • Pacchetti privati ​​(gratuiti)
    • nodo / npm package.json
    • python / pip / eggs Requisiti.txt
    • gemme di rubino Gemfile
    • golang go.mod

Il proiettile d'argento

Vuoi Just Works ™? Questo è il magico proiettile d'argento.

Ottieni il tuo token di accesso (vedi la sezione nel cheatsheet se hai bisogno delle istruzioni Github o Gitea) e impostalo in una variabile di ambiente (sia per lo sviluppo locale che per la distribuzione):

MY_GIT_TOKEN=xxxxxxxxxxxxxxxx

Per Github, copia ed esegui queste righe alla lettera :

git config --global url."https://api:$MY_GIT_TOKEN@github.com/".insteadOf "https://github.com/"
git config --global url."https://ssh:$MY_GIT_TOKEN@github.com/".insteadOf "ssh://git@github.com/"
git config --global url."https://git:$MY_GIT_TOKEN@github.com/".insteadOf "git@github.com:"

Complimenti, ora qualsiasi strumento automatico che clona i repository git non sarà ostruito da una richiesta di password, sia usando https o uno stile di ssh url.

Non usi Github?

Per altre piattaforme (Gitea, Github, Bitbucket), basta cambiare l'URL. Non modificare i nomi utente (sebbene arbitrari, sono necessari per voci di configurazione distinte).

Compatibilità

Funziona localmente in MacOS, Linux, Windows (in Bash), Docker, CircleCI, Heroku, Akkeris, ecc.

Ulteriori informazioni

Vedi la sezione ".gitconfig inveceOf" del cheatheet.

Sicurezza

Vedi la sezione "Sicurezza" del cheatsheet.


2
Questo è un vero toccasana. Grazie.
annaoomph

2
Quello che stavo cercando era git config --global credential."https://somegithost.com".username MyUserName, che è nel tuo cheatsheet, ma non altrove in questo thread di risposte. Quella particolare soluzione non risponde alla domanda del PO, ma ha risposto alla mia, quindi grazie!
TheDudeAbides

1
Questo è meraviglioso !!! La migliore risposta, grazie mille.
Parsa,

12

In tal caso è necessario l'helper delle credenziali di git per dire a git di ricordare la password e il nome utente di GitHub utilizzando la seguente riga di comando:

git config --global credential.helper wincred 

e se stai usando repo usando la chiave SSH, allora hai bisogno della chiave SSH per autenticarti.


11

Nessuna delle risposte sopra ha funzionato per me. Continuavo a ricevere quanto segue ogni volta che volevo fetcho pull:

Enter passphrase for key '/Users/myusername/.ssh/id_rsa':


Per Mac

Sono stato in grado di impedirgli di chiedere la mia passphrase:

  1. Apri config eseguendo: vi ~/.ssh/config
  2. Aggiunto il seguente: UseKeychain yes
  3. Salvato ed esci: premi Esc , quindi inserisci:wq!

Per Windows

Sono stato in grado di farlo funzionare usando le informazioni in questo stackexchange: https://unix.stackexchange.com/a/12201/348665


questo perché stai usando il protocollo SSH (altre risposte usano HTTPS).
mariusm,

6

Oltre a modificare il ~/.gitconfigfile, puoi farlo se chiedi:

git config --local --edit

o

git config --global --edit

Nota per usare sempre virgolette singole :

git config --local user.name 'your username'
git config --local user.password 'your password'

o

git config --global user.name 'your username'
git config --global user.password 'your password'

Il nome utente e la password possono utilizzare alcuni caratteri che potrebbero spezzare la password se si utilizzano virgolette doppie.

--localo --globalsignifica che i parametri di configurazione sono salvati per il progetto o per l'utente os.


Controllare anche questo uno che spiega ancora di più.
prosti,

6

basta usare

git config --global credential.helper store

e fai il git pull , ti chiederà username e password, d'ora in poi non fornirà alcun prompt per username e password e memorizzerà i dettagli


4
Hai praticamente ripetuto la risposta accettata .
jsamol,

4

Memorizza nome utente e password in .git-credentials

.git-credentialsè dove vengono memorizzati il ​​nome utente e la password (token di accesso) quando si esegue git config --global credential.helper store, che è ciò che suggeriscono altre risposte, quindi digitare il nome utente e la password o il token di accesso:

https://${username_or_access_token}:${password_or_access_token}@github.com

Quindi, per salvare il nome utente e la password (token di accesso):

git config —-global credential.helper store
echo “https://${username}:${password_or_access_token}@github.com“ > ~/.git-credentials

Questo è molto utile per il robot github, ad esempio per risolvere build automatizzate Chain nello stesso repository docker avendo regole per diversi rami e quindi attivarlo spingendolopost_push hooker nell'hub docker.

Un esempio di questo può essere visto qui in StackOverflow.


Grazie, sei un salvatore della vita! Possiamo anche impostare https: // $ {access_token}: $ {access_token} @ github.com
Lucas Mendes Mota Da Fonseca

1
Il token di accesso @LucasMendesMotaDaFonseca può essere utilizzato come nome utente ???
JiaHao Xu,

3

Un modo rapido per memorizzare nella cache credenziali git:

git config credential.helper 'cache' --timeout=10800

bello e sicuro

il timeout è in secondi.


2

Dopo aver letto il thread per intero e aver sperimentato la maggior parte delle risposte a questa domanda, alla fine ho trovato la procedura che funziona per me. Voglio condividerlo nel caso in cui qualcuno abbia a che fare con un caso d'uso complesso ma ancora non voglio passare attraverso l'intero thread e le pagine man di gitcredentials , gitcredentials-store ecc., Come ho fatto io.

Di seguito trovi la procedura che ti suggerisco SE (come me) devi gestire diversi repository di diversi provider (GitLab, GitHub, Bitbucket, ecc.) Utilizzando diverse combinazioni nome utente / password. Se invece hai un solo account con cui lavorare, allora potresti fare meglio a utilizzare le soluzioni git config --global credential.helper storeo git config --global user.name "your username"ecc. Che sono state molto ben spiegate nelle risposte precedenti.

La mia soluzione:

  1. disimpegnare l'helper delle credenziali globali, nel caso in cui qualche precedente sperimentazione si frapponga :)

> git config --global --unset credentials.helper

  1. passare alla directory principale del repository e disabilitare l'helper delle credenziali locali (se necessario)

> cd /path/to/my/repo

> git config --unset credential.helper

  1. creare un file in cui archiviare le credenziali del repository

> git config credential.helper 'store --file ~/.git_repo_credentials'

Nota : questo comando crea un nuovo file chiamato ".git_repo_credentials" nella tua home directory, in cui Git memorizza le tue credenziali. Se non si specifica un nome di file, Git utilizza l'impostazione predefinita ".git_credentials". In questo caso, semplicemente eseguendo il comando seguente:

> git config credential.helper store

  1. imposta il tuo nome utente

git config credential.*.username my_user_name

Nota : l'utilizzo di "*" di solito è corretto se i repository provengono dallo stesso provider (ad esempio GitLab). Se invece i tuoi repository sono ospitati da provider diversi, ti suggerisco di impostare esplicitamente il link al provider per ogni repository, come nel seguente esempio (per GitLab):

git config credential.https://gitlab.com.username my_user_name

A questo punto se si emette un comando che richiede le proprie credenziali (ad es. git pull) Verrà richiesta la password corrispondente a "nome_utente_mio". Questo è richiesto solo una volta perché git archivia le credenziali in ".git_repo_credentials" e utilizza automaticamente gli stessi dati agli accessi successivi.


2

Dal commento di rifrol, su Linux Ubuntu, da questa risposta , ecco come in Ubuntu:

sudo apt-get install libsecret-1-0 libsecret-1-dev
cd /usr/share/doc/git/contrib/credential/libsecret
sudo make
git config --global credential.helper /usr/share/doc/git/contrib/credential/libsecret/git-credential-libsecret

Alcune altre distro forniscono il file binario in modo da non doverlo costruire.

In OS X viene in genere "costruito" con un modulo predefinito di "osxkeychain" in modo da ottenerlo gratuitamente.


2

Controlla la documentazione ufficiale di Git:

Se si utilizza il trasporto SSH per la connessione ai telecomandi, è possibile disporre di una chiave senza passphrase, che consente di trasferire i dati in modo sicuro senza digitare nome utente e password. Tuttavia, ciò non è possibile con i protocolli HTTP: ogni connessione richiede un nome utente e una password. Ciò diventa ancora più difficile per i sistemi con autenticazione a due fattori, in cui il token che si utilizza per una password viene generato casualmente e non può essere pronunciato.

Fortunatamente, Git ha un sistema di credenziali che può aiutare in questo. Git ha alcune opzioni fornite nella confezione:

  • L'impostazione predefinita non è affatto cache. Ogni connessione richiederà il nome utente e la password.

  • La modalità "cache" mantiene le credenziali in memoria per un certo periodo di tempo. Nessuna delle password viene mai archiviata sul disco e viene eliminata dalla cache dopo 15 minuti.

  • La modalità "store" salva le credenziali in un file di testo normale su disco e non scadono mai. Ciò significa che fino a quando non cambi la password per l'host Git, non dovrai mai più digitare le tue credenziali. Il rovescio della medaglia di questo approccio è che le tue password sono memorizzate in chiaro in un semplice file nella tua home directory.

  • Se stai usando un Mac, Git viene fornito con una modalità "osxkeychain", che memorizza nella cache le credenziali nel portachiavi sicuro collegato al tuo account di sistema. Questo metodo memorizza le credenziali su disco e non scadono mai, ma sono crittografate con lo stesso sistema in cui sono archiviati i certificati HTTPS e i riempimenti automatici di Safari.

  • Se stai usando Windows, puoi installare un helper chiamato "Git Credential Manager per Windows". Questo è simile all'helper "osxkeychain" descritto sopra, ma utilizza l'archivio credenziali di Windows per controllare le informazioni riservate. È disponibile all'indirizzo https://github.com/Microsoft/Git-Credential-Manager-for-Windows .

Puoi scegliere uno di questi metodi impostando un valore di configurazione Git:

$ git config --global credential.helper cache

$ git config --global credential.helper store

https://git-scm.com/book/en/v2/Git-Tools-Credential-Storage

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.