Come evitare le specifiche del nome utente e della password ad ogni push di Git?

Sto git push mio lavoro su un repository Git remoto.

Ogni push mi chiederà di inserire username e password . Vorrei evitarlo per ogni spinta, ma come configurarlo per evitarlo?

1. Genera una chiave SSH

Linux / Mac

Aprire il terminale per creare le chiavi ssh:

 cd ~ #Your home directory ssh-keygen -t rsa #Press enter for all values 

Per Windows

(Funziona solo se il programma di commit è in grado di utilizzare certificati / chiavi private e pubbliche ssh)

  1. Usa Putty Gen per generare una chiave
  2. Esportare la chiave come chiave SSH aperta

Ecco una panoramica su mast gen per i passaggi precedenti

2. Associare la chiave SSH al repository remoto

Questo passaggio varia in base alla configurazione del telecomando.

  • Se si tratta di un repository GitHub e disponi di privilegi amministrativi, vai alle impostazioni e fai clic su “aggiungi chiave SSH”. Copia il contenuto di ~/.ssh/id_rsa.pub nel campo “Chiave”.

  • Se il tuo repository è amministrato da qualcun altro, dai all’amministratore il tuo id_rsa.pub .

  • Se il tuo repository remoto è amministrato dal tuo, puoi usare questo comando per esempio:

    scp ~/.ssh/id_rsa.pub [email protected]_IP:~/.ssh/authorized_keys/id_rsa.pub

3. Impostare l’URL remoto su un modulo che supporti SSH 1

Se hai eseguito i passaggi precedenti e ricevi ancora la richiesta della password, assicurati che il tuo URL di repo sia nel modulo

 git+ssh://[email protected]/username/reponame.git 

al contrario di

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

Per vedere il tuo URL del repository, esegui:

 git remote show origin 

Puoi cambiare l’URL con:

 git remote set-url origin git+ssh://[email protected]/username/reponame.git 

[1] Questa sezione comprende la risposta di Eric P

Autenticazione permanente con repository Git,

Eseguire il seguente comando per abilitare la memorizzazione delle credenziali nella cache.

 $ git config credential.helper store $ git push https://github.com/repo.git Username for 'https://github.com':  Password for 'https://[email protected]':  

L’uso dovrebbe specificare anche la memorizzazione nella cache ,

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

Dopo aver abilitato la memorizzazione delle credenziali nella cache, verrà memorizzato nella cache per 7200 secondi (2 ore) .

Nota: helper delle credenziali che memorizza la password non crittografata sul disco locale.

Se hai già impostato le tue chiavi SSH e stai ancora ricevendo la richiesta della password, assicurati che il tuo URL repo sia nel modulo

 git+ssh://[email protected]/username/reponame.git 

al contrario di

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

Per vedere il tuo URL del repository, esegui:

 git remote show origin 

Puoi cambiare l’URL con git remote set-url modo:

 git remote set-url origin git+ssh://[email protected]/username/reponame.git 

Basta usare --repo opzione --repo per il comando git push. Come questo:

 $ git push --repo https://name:[email protected]/name/repo.git 

Salvataggio a tempo indeterminato

Puoi usare git-credential-store via

 git config credential.helper store 

che memorizza la tua password non crittografata nel file system :

L’utilizzo di questo helper memorizzerà le tue password non crittografate su disco, protetto solo dalle autorizzazioni del filesystem. Se questo non è un compromesso di sicurezza accettabile, prova git-credential-cache o trova un helper che si integri con l’archiviazione sicura fornita dal tuo sistema operativo.

Con un timeout

Usa la git-credential-cache che, per impostazione predefinita, memorizza la password per 15 minuti.

 git config credential.helper cache 

per impostare un timeout diverso, utilizzare --timeout (qui 5 minuti)

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

Salvataggio sicuro a tempo indeterminato (OS X e Windows)

  • Se utilizzi 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 vengono crittografate con lo stesso sistema che memorizza i certificati HTTPS e gli auto-riempimenti 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 delle credenziali di Windows per controllare le informazioni sensibili. Può essere trovato su https://github.com/Microsoft/Git-Credential-Manager-for-Windows . [sottolinea il mio]

Stavo usando il link https ( https://github.com/org/repo.git ) invece del link ssh;

 [email protected]:org/repo.git 

La commutazione ha risolto il problema per me!

Collega il tuo client git al tuo negozio di credenziali del sistema operativo. Ad esempio in Windows si associa l’helper delle credenziali a wincred:

 git config --global credential.helper wincred 

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

Ho usato la risposta che Pavel ha suggerito e ha funzionato per me. La mia differenza era di farlo mentre aggiungevo il telecomando in questo modo: git remote add (alias) https://(name:password)@github.com/(the remote address).git

La mia soluzione su Windows:

  1. Fare clic con il tasto destro sulla directory per premere e selezionare “Git Bash Here”.
  2. ssh-keygen -t rsa (premi invio per tutti i valori)
  3. Controlla il terminale per: La Your public key has been saved in /c/Users//.ssh/id_rsa.pub
  4. Copia la chiave pubblica dal file specificato.
  5. Vai al tuo profilo GitHub => Impostazioni => SSH e chiavi GPG => Nuova chiave SSH => Incolla la tua chiave SSH lì => Salva

In questo caso, sul sistema operativo Windows, questo funziona per me:

 https://{Username}:{Password}@github.com/{Username}/{repo}.git 

per esempio

 git clone https://{Username}:{Password}@github.com/{Username}/{repo}.git git pull https://{Username}:{Password}@github.com/{Username}/{repo}.git git remote add origin https://{Username}:{Password}@github.com/{Username}/{repo}.git git push origin master 

Volevo solo indicare qualcosa sulla soluzione detta più volte:

 git config credential.helper store 

È ansible utilizzare qualsiasi comando che richiede una password dopo questo. Non devi spingere. (puoi anche estrarre per esempio) Dopo di ciò, non dovrai più digitare il tuo nome utente / password.

Tutto ciò deriva dal fatto che git non fornisce un’opzione nei comandi clone / pull / push / fetch per inviare le credenziali attraverso una pipe. Sebbene fornisca credential.helper, memorizza sul file system o crea un demone ecc. Spesso, le credenziali di GIT sono di livello di sistema e onere di tenerle al sicuro è nell’applicazione che richiama i comandi git. Davvero molto pericoloso.

Ecco cosa dovevo risolvere. 1. La versione di Git (git –version) deve essere maggiore o uguale a 1.8.3.

Chiacchierare

Per la clonazione, utilizzare “git clone URL” dopo aver modificato l’URL dal formato, http: // {myuser} @ {my_repo_ip_address} / {myrepo_name.git} a http: // {myuser}: {mypwd} @ {my_repo_ip_address} /{myrepo_name.git}

Quindi eliminare il repository della password come nella prossima sezione.

SPURGO

Ora, questo sarebbe andato e

  1. scritto la password in origine git remota. Digita “git remote -v” per vedere il danno. Correggere questo impostando l’URL di origine remota senza password. “git remote set_url origine http: // {myuser} @ {my_repo_ip_address} / {myrepo_name.git}”
  2. scritto la password in .git / logs nel repository. Sostituisci tutte le istanze di pwd usando un comando unix come find .git / logs -exec sed -i / {my_url_with_pwd} // g ‘{} \; Qui {my_url_with_pwd} è l’URL con password. Poiché l’URL ha barre inverse, deve essere sfuggito da due barre rovesciate. Ad esempio, per l’URL http: // kris: [email protected].0.1/proj.git -> http: \\ / \\ / kris: [email protected].0.1 \\ / proj.git

Se l’applicazione utilizza Java per emettere questi comandi, utilizzare ProcessBuilder anziché Runtime. Se è necessario utilizzare Runtime, utilizzare getRunTime (). Exec che accetta l’array String come argomenti con / bin / bash e -c come argomenti piuttosto che quello che accetta una singola stringa come argomento.

GIT FETCH / PULL / PUSH

  1. imposta la password nell’URL remoto di git come: “git origine set_url remoto http: // {myuser}: {mypwd} @ {my_repo_ip_address} / {myrepo_name.git}”
  2. Emettere il comando git fetch / push / pull. Non ti verrà quindi richiesta la password.
  3. Effettua lo spurgo come nella sezione precedente. Non perderlo.

Se il tuo PC è sicuro o non ti interessa la sicurezza della password, questo può essere ottenuto molto semplicemente. Supponendo che il repository remoto sia su GitHub e che origin sia il tuo nome locale per il repository remoto, usa questo comando

 git remote set-url --push origin https://:@github.com/ 

Il flag --push garantisce che questo cambi l’URL del repository solo per il comando git push . (La domanda posta nel post originale riguarda solo il comando git push . Richiedere un nome utente + password solo per le operazioni push è la normale configurazione per i repository pubblici su GitHub. Si noti che i repository privati su GitHub richiedono anche un nome utente + password per pull e recuperare le operazioni, quindi per un repository privato non si vorrebbe usare il --push flag …)

ATTENZIONE: questo è intrinsecamente non sicuro perché:

  1. il tuo ISP, o chiunque acceda ai tuoi accessi alla rete, può facilmente vedere la password in chiaro nell’URL;

  2. chiunque abbia accesso al tuo PC può visualizzare la tua password usando git remote show origin .

Ecco perché l’uso di una chiave SSH è la risposta accettata.

Anche una chiave SSH non è totalmente sicura . Chiunque abbia accesso al tuo PC può comunque, ad esempio, effettuare push che distruggono il tuo repository o – peggio – push impegna a fare piccole modifiche al tuo codice. (Tutti i commit forzati sono ovviamente molto visibili su GitHub.) Ma se qualcuno volesse cambiare il codice in modo surrettizio, potrebbe – --amend un commit precedente senza cambiare il messaggio di commit, e quindi forzarlo a spingere. in pratica.)

Ma rivelare la tua password è peggio . Se un utente malintenzionato viene a conoscenza del tuo nome utente + password, può fare cose come bloccarti dal tuo account, eliminare il tuo account, eliminare definitivamente il repository, ecc.


In alternativa, per semplicità e sicurezza, puoi fornire solo il tuo nome utente nell’URL, in modo che dovrai digitare la tua password ogni volta che git push ma non dovrai fornire il tuo nome utente ogni volta. (Mi piace molto questo approccio, dovendo digitare la password mi dà una pausa per pensare ogni volta che git push , quindi non posso dare una git push per sbaglio.)

 git remote set-url --push origin https://@github.com/ 

Devi configurare una chiave privata SSH, puoi rivedere questa pagina , come fare la configurazione su Mac, se sei su Linux la guida dovrebbe essere quasi la stessa, su Windows avresti bisogno di uno strumento come MSYS .

Passo 1 –

Crea chiavi SSH sul tuo sistema Linux usando il comando di sotto

 ssh-keygen -t rsa -b 4096 -C "your_email" 

Richiederà passphrase e nome file (il valore predefinito sarà ~ / .ssh / id_rsa, ~ / .ssh / id_rsa.pub)

Passo 2 –

Una volta creati i file, aggiungi la chiave pubblica id_rsa.pub alla sezione ssh dell’account github.

Passaggio 3:

Sulla tua macchina aggiungi la chiave privata id_rsa a ssh-agent usando il comando sotto

 ssh-add ~/.ssh/id_rsa 

Step 4 –

Ora aggiungi url remoto [email protected]: nome_utente / repo_name.git al tuo repository git locale usando il comando sotto.

 git remote remove origin git remote add origin [email protected]:user_name/repo_name.git 

Questo è tutto.

Appare che, almeno quando si utilizza TortoiseGIT su Windows, è ansible creare le chiavi SSH e trasferirle sul server GIT usando semplicemente:

 > ssh-keygen.exe > ssh-copy-id [username]@[GIT_server] 

Ho creato un repository vuoto in github e poi …

 git push -u origin master 

Devi impostare l’URL ssh remoto come descritto sopra.

L’esecuzione del comando seguente ha risolto il problema per me.

 git config --global credential.helper wincred 

Si prega di fare riferimento alla seguente documentazione github:

 https://help.github.com/articles/caching-your-github-password-in-git/