it-swarm-eu.dev

Git Push richiede nome utente e password

Ho clonato un repository git dal mio account Github al mio PC.

Voglio lavorare con il mio PC e laptop, ma con un account Github.

Quando provo a premere o tirare da Github usando il mio PC, richiede nome utente e password, ma non quando si utilizza il laptop!

Non voglio digitare il mio nome utente e password ogni volta che interagisco con Origin. Cosa mi manca qui?

1224
TooCooL

Un errore comune è la clonazione utilizzando il valore predefinito (HTTPS) anziché SSH. Puoi correggerlo andando nel tuo repository, facendo clic su "Clona o scarica", quindi facendo clic sul pulsante "Usa SSH" sopra il campo URL e aggiornando l'URL del tuo telecomando Origin come segue:

git remote set-url Origin [email protected]:username/repo.git

Questo è documentato su GitHub: Commutazione degli URL remoti da HTTPS a SSH .

1730
Tekkub

Autenticazione permanente con repository Git,

Esegui il seguente comando per abilitare caching delle credenziali :

$ git config credential.helper store
$ git Push https://github.com/owner/repo.git

Username for 'https://github.com': <USERNAME>
Password for 'https://[email protected]': <PASSWORD>

L'uso dovrebbe anche specificare caching expire ,

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

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

265
Jay Patel

Ho appena incontrato lo stesso problema e la soluzione più semplice che ho trovato è stata quella di usare l'URL SSH invece di quello HTTPS:

ssh://[email protected]/username/repo.git

E non questo:

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

Ora puoi validare con just the_SSH Key invece di username e password.

127

Oltre a passare a SSH, puoi continuare a utilizzare HTTPS, se non ti dispiace inserire la tua password in testo chiaro. Metti questo nel tuo ~/.netrc e non chiederà il tuo nome utente/password (almeno su Linux e Mac):

machine github.com
       login <user>
       password <password>

Addition (vedi il 2 ° commento di VonC): su Windows il nome del file è %HOME%\_netrc.

Leggi anche il primo commento di VonC nel caso tu voglia criptare.

Un'altra aggiunta (vedi il commento di user137717) che puoi usare se hai git 1.7.10 o più recente .

Memorizza la tua password github in git usando un helper di credenziali :

Se stai clonando i repository GitHub usando HTTPS, puoi utilizzare un aiutante delle credenziali per dire a Git di ricordare il tuo nome utente e password GitHub ogni volta che parla con GitHub.

Funziona anche su Linux, Mac e Windows.

114
rintcius

Per i non addetti che sono confusi dalle risposte precedenti, puoi fare:

git remote -v

che risponderà a qualcosa del genere

Origin  https://[email protected]/yourname/yourrepo.git (fetch)
Origin  https://[email protected]/yourname/yourrepo.git (Push)

allora puoi eseguire il comando che molti altri hanno suggerito, ma ora conosci yourname e yourrepo dall'alto, quindi puoi semplicemente tagliare e incollare yourname/yourrepo.git da sopra in

git remote set-url Origin [email protected]:yourname/yourrepo.git
77
Davide

Se stai usando ssh e la tua chiave privata è crittografata con una passphrase, allorati verrà comunque richiesto di inserire la passphrase/password per la chiave privata quando esegui operazioni di rete con Gitlike Push, pull e fetch.

Utilizzare ssh-agent per salvare le credenziali della passphrase/password della chiave privata

Se si desidera evitare di dover inserire la passphrase ogni volta, è possibile utilizzare ssh-agent per memorizzare le credenziali della passphrase della chiave privata una volta per sessione terminale, come spiegato in la mia risposta a Impossibile aprire una connessione al proprio agente di autenticazione :

$ eval `ssh-agent -s`
$ ssh-add

In un msysgit Bash di Windows, è necessario valutare l'output di ssh-agent, ma non sono sicuro se sia necessario fare lo stesso in altri ambienti di sviluppo e sistemi operativi.

ssh-add cerca una chiave privata nella tua cartella .ssh chiamata id_rsa, che è il nome predefinito, ma puoi passare un percorso file a una chiave con un nome diverso.

Uccidere l'agente

Quando hai terminato la sessione del terminale, puoi chiudere ssh-agent con il kill flag -k:

$ ssh-agent -k

Come spiegato nel ssh-agent manual :

-k

Elimina l'agente corrente (dato dalla variabile di ambiente SSH_AGENT_PID).

Timeout opzionale

Inoltre, può prendere un parametro di timeout opzionale in questo modo:

$ ssh-add -t <timeout>

dove <timeout> è del formato <n>h per <n> hours, <n>m per <n> minuti e così via.

Secondo il ssh-agent manual :

-t life

Impostare un valore predefinito per la durata massima delle identità aggiunte all'agente. La durata può essere specificata in secondi o in un formato temporale specificato in sshd_config (5) . Una durata specificata per un'identità con ssh-add (1) sovrascrive questo valore. Senza questa opzione il valore predefinito massimo la vita è per sempre.

Vedi questa pagina per più formati di tempo .

Avviso di sicurezza per gli utenti Cygwin

Gli utenti di Cygwin devono essere a conoscenza di un potenziale rischio per la sicurezza con l'utilizzo di ssh-agent in Cygwin :

le persone dovrebbero essere consapevoli dei potenziali pericoli di ssh-agent sotto cygwin [1], anche se con un netstat locale e con i port remoti non sembra che la porta specificata in/tmp/ssh-foo sia accessibile a chiunque ...?

[1]: http://www.cygwin.com/ml/cygwin/2001-01/msg00063.html

E al link citato :

tuttavia, si noti che i socket di dominio unix di cygwin sono FUNDAMENTALLY INSECURE e quindi io fortemente SCOROURAGE utilizzo di ssh-agent sotto cygwin.

quando si esegue ssh-agent sotto cygwin, viene creato il socket AF_UNIX nella directory /tmp/ssh-$USERNAME/. sotto cygwin AF_UNIX i socket vengono emulati tramite gli zoccoli AF_INET. puoi facilmente vedere che se guarderai il file /tmp/ssh-$USERNAME/agent-socket-* tramite il blocco note. vedrai qualcosa di simile

!<socket >2080

quindi esegui netstat -a e sorprendi! hai qualche programma in ascolto sulla porta 2080. è ssh-agent. quando ssh riceve la richiesta RSA dal server, fa riferimento a /tmp/ssh-$USERNAME/agent-socket-* corrispondente (sotto cygwin, nel nostro caso, ciò significa che aprirà la connessione a localhost:2080) e chiede a ssh-agent di elaborare la sfida RSA con la chiave privata che ha, e quindi semplicemente passa la risposta ricevuta da ssh-agent al server.

sotto Unix, tale scenario funziona senza problemi, poiché il kernel unix controlla le autorizzazioni quando il programma tenta di accedere al socket AF_UNIX. Per i socket AF_INET, tuttavia, le connessioni sono anonime (leggi "insicure"). Immagina di avere cygwin ssh-agent in esecuzione. hacker malintenzionato può portscan your box, individuare open port utilizzato da ssh-agent, aprire la connessione al server ssh, ricevere la richiesta RSA da esso, inviarlo al tuo ssh-agent tramite porta aperta che ha trovato, ricevere risposta RSA, inviarlo a ssh server e voilà, ha eseguito correttamente l'accesso al tuo server come te.

52
user456814

Fonte: Impostazione Git

Il seguente comando salverà la tua password in memoria per qualche tempo.
(Per git 1.7.10 o più recente.)

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

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

Quando si utilizza https per git pull e Push, basta configurare remote.Origin.url per il proprio progetto, per evitare l'immissione del nome utente (o/e della password) ogni volta che si spinge.

Come configurare remote.Origin.url:

 Formato URL: 
 Https: // {nome utente: password @} github.com/ {proprietario}/{repo} 
 
 Parametri nell'URL: 
 * nome utente 
 facoltativo, il nome utente da utilizzare quando è necessaria l'autenticazione, 
 se specificato, non è necessario immettere nuovamente il nome utente quando è necessario l'autenticazione, 
 non utilizzare l'e-mail, utilizzare il tuo nome utente che non ha "@", altrimenti l'url non può essere analizzato correttamente, 
 * password 
 opzionale, la password da utilizzare quando è necessaria l'autenticazione, 
 se specificato, no è necessario inserire nuovamente la password quando è necessario l'autenticazione, 
 tip: 
 questo valore è memorizzato come testo normale, quindi per motivi di sicurezza, non specificare questo parametro, 
 * 
 
 es. 
 git config remote.Origin.url https: //[email protected]/eric/myproject 
 

@Update - using ssh

Penso che l'uso del protocollo ssh sia una soluzione migliore rispetto a https, anche se la fase di installazione è un po 'più complessa.

Passi grezzi:

  • Crea chiavi ssh usando il comando, ad esempio ssh-keygen su linux, su windows msysgit fornisce comandi simili.
  • Mantieni la chiave privata sul computer locale nella posizione corretta, ad esempio ~/.ssh. E aggiungilo all'agente ssh tramite il comando ssh-add.
  • Carica la chiave pubblica su git server.
  • Cambia remote.Origin.url del repository git nello stile ssh, ad esempio [email protected]:myaccount/myrepo.git
  • Quindi, quando premi o Spingi, non è necessario inserire mai il nome utente o la password.

Suggerimenti:

  • Se la chiave ssh ha una passphrase, per impostazione predefinita è necessario inserirla al primo utilizzo della chiave dopo ogni riavvio della macchina.

@Update - Passa dal protocollo https al protocollo ssh.

Basta cambiare remote.Origin.url sarà sufficiente, oppure puoi modificare repo_home/.git/config direttamente per cambiare il valore (ad esempio usando vi su linux).

Di solito aggiungo una linea per ogni protocollo e ne commento uno usando #.

per esempio

 [remoto "Origine"] 
 url = [email protected]: myaccount/myrepo.git 
 # url = https: //[email protected]/myaccount/myrepo .git 
 fetch = + refs/heads/*: refs/remotes/Origin /*
30
Eric Wang

Puoi memorizzare nella cache la tua password GitHub in Git:

Basta seguire le istruzioni dal github's documentazione ufficiale .

Dopo aver seguito le istruzioni dal link sopra, dovresti essere in grado di spingere/tirare verso/dal repository senza digitare il tuo username/password ogni volta.

15

Ciò che ha funzionato per me è stato modificare .git/config e usarlo

[remote "Origin"]
        url = https://<login>:<password>@gitlab.com(...).git

Inutile dire che questo è un modo insicuro di memorizzare la password, ma ci sono ambienti/casi in cui questo potrebbe non essere un problema.

8
WoJ

Ecco un'altra opzione:

Invece di scrivere

git Push Origin HEAD

Potresti scrivere:

git Push https://user:[email protected]/path HEAD

Ovviamente con la maggior parte delle shell questo porterà alla memorizzazione della password nella cronologia, quindi tienilo a mente.

7
Lacho Tomov

Aggiornamento per HTTPS:

Github ha lanciato un nuovo programma per Windows che memorizza le tue credenziali quando utilizzi HTTPS:

Usare:

Scarica il programma da qui

Una volta eseguito il programma, verrà modificato il tuo file .gitconfig. Ricontrolla se ha corretto il .gitconfig corretto nel caso in cui ne hai diversi. Se non ha modificato quello corretto, aggiungi quanto segue al tuo .gitconfig

[credential]
    helper = !'C:\\Path\\To\\Your\\Downloaded\\File\\git-credential-winstore.exe'

NOTA l'interruzione di riga dopo [credential]. È richiesto.

Apri il tuo client della riga di comando e prova git Push Origin master una volta. Se ti chiede una password, inseriscila e sei a posto. Password salvata!

4
Varun Achar

Fondamentalmente hai due opzioni.

Se si utilizza lo stesso utente su entrambe le macchine, è necessario copiare la chiave .pub sul PC, in modo che Github sappia che si è lo stesso utente.

Se hai creato un nuovo file .pub per il tuo PC e desideri trattare le macchine come utenti diversi, devi registrare il nuovo file .pub sul sito web di github.

Se ciò non funziona, potrebbe essere dovuto al fatto che ssh non è configurato correttamente e che ssh non riesce a trovare la posizione delle chiavi. Provare

ssh -vv [email protected]

Per ottenere maggiori informazioni sul perché SSH fallisce.

4
ralphtheninja

Per gli utenti di windows git, dopo aver eseguito git config --global credential.helper store, se richiede ancora la password, è meglio controllare dove è scritta la configurazione. usando questo comando

git config --list --show-Origin

Nel mio caso, modifica manualmente il file di configurazione 'C:\Programmi\Git\mingw64\etc\gitconfig', aggiungendo il seguente testo, funziona.

[credential] helper = store

2
Liang

Ho avuto lo stesso problema.

quindi cambia il file .git/config dal mio progetto

url = https://github.com/<your-user-here>/<your-repo-here>

a

url = [email protected]:<your-user-here>/<your-repo-here>

e aggiungi la chiave pubblica ssh al profilo git che si trova nelle impostazioni.

per la chiave pubblica ssh

cat ~/.ssh/id_rsa.pub
2
shrikant

Questo è ciò che ha funzionato per me:

git remote set-url Origin https://[email protected]/username/reponame.git

Esempio:

git remote set-url Origin https://[email protected]/jsmith/master.git
1
user5854766

È necessario eseguire 2 passaggi -

1) git remote remove Origin
2) git remote add Origin [email protected]:NuggetAI/nugget.git

Nota che git url è un url ssh e non un url https. Quale puoi selezionare da qui.

 enter image description here

1
sapy

Aggiornare direttamente il tuo file git config: (se non vuoi memorizzare comandi di fantasia)

Apri il tuo file .git/config nel tuo editor di testo preferito. Sarà nella cartella che hai clonato o nel repository che hai eseguito git init in. Entra in quel repository. .git è una cartella nascosta, premendo ctrl + h dovrebbe mostrare la cartella nascosta, (ls -a nel terminale).

Ecco un esempio del file .git/config, copia e incolla queste righe e assicurati di aggiornare tali righe con le tue informazioni git.

[user]
        name = Tux
        email = [email protected]
        username = happy_feet

[remote "Origin"]
        url = https://github.com/happy_feet/my_code.git
        fetch = +refs/heads/*:refs/remotes/Origin/*

Cambia la parte dell'URL con il seguente formato per SSH

url = [email protected]:happy_feet/my_code.git

(i formati sopra non cambiano con vari server remoti git come github o bitbucket, è lo stesso se stai usando git per il controllo della versione):

Nota: Il modo SSH di connettersi a un repository git remoto richiede l'aggiunta della chiave SSH pubblica al server Git remoto (come github o bitbucket, cercare la pagina delle impostazioni per le chiavi SSH)

Per sapere come generare le chiavi SSH, consultare:https://confluence.atlassian.com/bitbucketserver/creating-ssh-keys-776639788.html

1
Survesh Jones

Se la chiave ssh o .netrc non ha funzionato per te allora un'altra soluzione semplice ma meno sicura che potrebbe funzionare per te è git-credential-store - Helper per memorizzare le credenziali sul disco

git config --global credential.helper store

Per impostazione predefinita le credenziali verranno salvate in ~/.git-credentials. Sarà creato e scritto a.

Si prega di notare che l'utilizzo di questo helper memorizzerà le password non crittografate su disco, protetto solo dalle autorizzazioni del filesystem. Se questo potrebbe non essere un compromesso di sicurezza accettabile.

0
rumman0786

Come molti utenti hanno detto, basta cambiare l'URL del git repository da https a SSH.

Se non hai generato una chiave SSH nella tua macchina, allora dovrai farlo.

Proprio come un'informazione aggiuntiva, dopo aver apportato questa modifica ho comunque ricevuto lo stesso errore: Autorizzazione negata.

Nel mio caso, il problema era che stavo usando la shell di Windows per eseguire il comando ngh; poiché questo comando dovrebbe aprire un prompt per richiedere la frase SSH e la shell di Windows non apre questo tipo di prompt, l'autenticazione ha avuto esito negativo.

Quindi, ho appena dovuto aprire git Shell ed eseguire il comando ngh lì, inserire la frase SSH nel prompt ogni volta che lo chiedeva e "voilà" ... Ha funzionato perfettamente!

0
Thisisalexis

Se stai usando git (es. Git bash) sotto Windows (e se non vuoi passare da https a ssh)

potresti anche usare https://github.com/Microsoft/Git-Credential-Manager-for-Windows

Questa applicazione manterrà nome utente e password per te ...

0
boly38