Come posso fornire un nome utente e una password quando eseguo "git clone git@remote.git"?


846

So come fornire un nome utente e una password a una richiesta HTTPS come questa:

git clone https://username:password@remote

Ma vorrei sapere come fornire un nome utente e una password al telecomando in questo modo:

git clone git@remote.git

Ho provato così:

git clone username:password@git@remote.git
git clone git@username:password@remote.git
git clone git@remote.git@username:password

Ma non hanno funzionato.


4
Non puoi. "Git" prima di "@" è già un nome utente. Da dove hai preso l'URL del repository (git@remote.get)? Da dove hai avuto l'idea che devi fornire un nome utente e una password diversi?
Ken Thomases,

3
L'URL del mio repository proviene da heroku "git@heroku.com: zxy-helloworld.git". E uso emacs shell per clonare e spingere. Se la shell richiede la password, emacs si bloccherà. Questo è un problema noto con emacs su Windows: gnu.org/software/emacs/windows/…
coordinate

Cosa succede se il nome utente è un'e-mail? come lo digiti? myemail @ gmail.com @ example.com ?
Kyon Perez,

Risposte:


1318

Basato sul commento di Michael Scharf:

Puoi tralasciare la password in modo che non venga registrata nel file della cronologia di Bash:

git clone https://username@github.com/username/repository.git

Ti chiederà la password.

In alternativa, è possibile utilizzare:

git clone https://username:password@github.com/username/repository.git

In questo modo ha funzionato per me da un repository GitHub.


5
non deve essere lo stesso a proposito. Se il tuo collega ha creato il repository git e stai effettuando l'accesso come un altro account, non saranno gli stessi.
Holgac,

49
Non è consigliabile inserire la password nell'URL per questo file salvato su .git / config. Non è sicuro, è meglio usare la chiave ssh
zetanova,

55
@MrDuk nessun problema, scappare (come% 40 iirc).
Benjamin Gruenbaum,

57
È possibile lasciare la password git clone https://username@github.com/username/repository.git. git te lo chiederà e non verrà salvato in .git / config né nella tua storia bash
Michael_Scharf

37
puoi anche digitare 'spazio' all'inizio della riga in modo che Linux non memorizzi il comando nella storia
Nicolas Zozol,

213

Il user@host:path/to/repoformato dice a Git di usare ssh per accedere hostcon username user. Da git help clone:

Una sintassi alternativa simile a scp può anche essere usata con il protocollo ssh:

[user@]host.xz:path/to/repo.git/

La parte prima del @ è il nome utente e il metodo di autenticazione (password, chiave pubblica, ecc.) È determinato da ssh, non da Git. Git non ha modo di passare una password a ssh, perché ssh potrebbe anche non utilizzare una password a seconda della configurazione del server remoto.

Uso ssh-agent per evitare di digitare password in qualsiasi momento

Se non si desidera digitare sempre la password ssh, la soluzione tipica è generare una coppia di chiavi pubblica / privata , inserire la chiave pubblica nel ~/.ssh/authorized_keysfile sul server remoto e caricare la chiave privata in ssh-agent. Vedi anche Configurare Git su SSH per effettuare il login una volta , la pagina di aiuto di GitHub sulle passphrase di chiavi ssh , la documentazione ssh di gitolite e la documentazione delle chiavi ssh di Heroku .

Scegliere tra più account su GitHub (o Heroku o ...)

Se hai più account in un posto come GitHub o Heroku, avrai più chiavi ssh (almeno uno per account). Per selezionare l'account con cui si desidera accedere, è necessario indicare a ssh quale chiave privata utilizzare .

Ad esempio, supponiamo di avere due account GitHub: fooe bar. La tua chiave ssh per fooè ~/.ssh/foo_github_ide la tua chiave ssh per barè ~/.ssh/bar_github_id. Vuoi accedere git@github.com:foo/foo.gitcon il tuo fooaccount e git@github.com:bar/bar.gitcon il tuo baraccount. Aggiungeresti quanto segue al tuo ~/.ssh/config:

Host gh-foo
    Hostname github.com
    User git
    IdentityFile ~/.ssh/foo_github_id
Host gh-bar
    Hostname github.com
    User git
    IdentityFile ~/.ssh/bar_github_id

Quindi clonerai i due repository come segue:

git clone gh-foo:foo/foo.git  # logs in with account foo
git clone gh-bar:bar/bar.git  # logs in with account bar

Evitare del tutto ssh

Alcuni servizi forniscono l'accesso HTTP in alternativa a ssh:

  • GitHub:

    https://username:password@github.com/username/repository.git
    
  • Gitorious:

    https://username:password@gitorious.org/project/repository.git
    
  • Heroku: vedi questo articolo di supporto .

ATTENZIONE : l'aggiunta della password all'URL del clone farà sì che Git memorizzi la password in chiaro .git/config. Per archiviare in modo sicuro la password quando si utilizza HTTP, utilizzare un supporto credenziali. Per esempio:

git config --global credential.helper cache
git config --global credential.https://github.com.username foo
git clone https://github.com/foo/repository.git

Quanto sopra farà sì che Git richieda la password una volta ogni 15 minuti (per impostazione predefinita). Vederegit help credentials per i dettagli.


Questa è la migliore spiegazione di come git funziona con SSH. La mia comprensione è che quando si specifica git@githost.com: path / to / repo.git, si dice effettivamente a git che l'utente è git stesso e che dovrebbe andare a prendere le proprie credenziali (chiave pubblica) dall'agente ssh per il Ospita "githost.com".
Anael

39

Nei commenti della risposta di @ Bassetassen , @plosco ha affermato che puoi usaregit clone https://<token>@github.com/username/repository.git almeno per clonare da GitHub. Ho pensato di ampliare il modo di farlo, nel caso in cui qualcuno trovi questa risposta come ho fatto mentre cercavo di automatizzare la clonazione.

GitHub ha una guida molto utile su come farlo, ma non copre cosa fare se si desidera includere tutto in una riga per scopi di automazione. Avverte che l' aggiunta del token all'URL del clone lo memorizzerà in testo normale in .git/config . Questo è ovviamente un rischio per la sicurezza per quasi tutti i casi d'uso, ma dal momento che ho intenzione di eliminare il repository e revocare il token quando ho finito, non mi interessa.

1. Creare un token

GitHub ha un'intera guida qui su come ottenere un token, ma ecco il TL; DR.

  1. Vai su Impostazioni> Impostazioni sviluppatore> Token di accesso personali ( ecco un link diretto )
  2. Fai clic su "Genera un nuovo token" e inserisci nuovamente la password. ( ecco un altro link diretto )
  3. Impostare una descrizione / nome per esso, controllare l'autorizzazione "repo" e premere il pulsante "Genera token" nella parte inferiore della pagina.
  4. Copia il tuo nuovo token prima di lasciare la pagina

2. Clonare il Repo

Uguale il comando @plosco ha dato, git clone https://<token>@github.com/<username>/<repository>.git, basta sostituire <token>, <username>e<repository> con qualunque sia il vostro informazioni è.

Se vuoi clonarlo in una cartella specifica, inserisci l'indirizzo della cartella alla fine in questo modo:, git clone https://<token>@github.com/<username>/<repository.git> <folder>dov'è <folder>, hai indovinato, la cartella in cui clonarlo! Ovviamente si può utilizzare ., .., ~, ecc qui come si può altrove.

3. Non lasciare traccia

Non tutto ciò può essere necessario, a seconda di quanto sia sensibile ciò che stai facendo.

  • Probabilmente non vuoi lasciare quel token in giro se non hai intenzione di usarlo per un po 'di tempo, quindi torna alla pagina dei token e premi il pulsante Elimina accanto ad esso.
  • Se non è necessario nuovamente il repository, eliminarlo rm -rf <folder> .
  • Se è necessario nuovamente il repository, ma non è necessario automatizzarlo di nuovo, è possibile rimuovere il telecomando facendo git remote remove origino semplicemente rimuovere il token eseguendogit remote set-url origin https://github.com/<username>/<repository.git> .
  • Cancella la cronologia bash per assicurarti che il token non rimanga registrato lì. Ci sono molti modi per farlo, vedi questa domanda e questa domanda . Tuttavia, potrebbe essere più semplice anteporre tutti i comandi precedenti con uno spazio per impedire che vengano memorizzati.

Nota che non sono un professionista, quindi quanto sopra potrebbe non essere sicuro, nel senso che nessuna traccia sarebbe lasciata per qualsiasi tipo di lavoro forense.


1
https://<token>@github.comnon è stato accettato con il mio portale, ho dovuto usarehttps://oauth2:<token>@github.com
MushyPeas il

25

Sebbene ci siano molte risposte, mi trovo ad affrontare il problema ripetuto quando nome utente o password contengono caratteri speciali.

L'URL codifica il nome utente e la password per git, quindi lo utilizza come parte dell'URL stesso (quando non vi sono problemi di sicurezza).

Ad esempio, valore codificato URL del nome utente

'utente + 1' è l'utente% 2B1

e valore codificato URL della password

'Welcome @ 1234' è Welcome% 401234

Quindi l'URL del clone di GIT sarebbe simile a,

git clone https://user%2B1:Welcome%401234@actual-git-url-for-the-repo funziona perfettamente, mentre,

git clone https: // user + 1: Welcome @ 1234 @ actual-git-url-for-the-repo ti dà 403 errori

Spero che sia di aiuto.

Per ogni evenienza, vuoi codificare l'URL online: https://www.urlencoder.org/


13

Ho risolto questo problema nel modo seguente:

inserisci qui la descrizione dell'immagine


11
mai una buona idea digitare la password nella riga di comando. Sapevi che il tuo sistema potrebbe memorizzare la cronologia della riga di comando in un file? (Es: Linux ha un file nascosto chiamato .bash_history)
Augusto

Corretta. Ogni volta che lo faccio, o qualcosa del genere, che a volte può essere molto conveniente, elimino sempre il comando che ho usato dalla cronologia (storia -d).
Francesco Marchetti-Stasi,

4
@ FrancescoMarchetti-Stasi non è necessario eliminare il comando, basta usare uno spazio all'inizio del comando e non verrà mai memorizzato nella cronologia.
Ishtiyaq Husain,

Sì, l'ho imparato solo un paio di mesi fa, dopo quasi 30 anni sui sistemi Unix ... peccato per me :)
Francesco Marchetti-Stasi

9

Su Windows , i seguenti passaggi dovrebbero riattivare la finestra di login di GitHub durante l' git cloneing:

  • Cerca menu di avvio per "Credential Manager"
  • Seleziona "Credenziali di Windows"
  • Elimina tutte le credenziali relative a Git o GitHub

risultato



5
git config --global core.askpass

Esegui questo prima di clonare allo stesso modo, dovrebbe essere risolto!


3
Ho provato quello, ancora non lo chiedo.
Maarten Kieft,

L'impostazione della configurazione globale non è mai una buona idea in quanto potrebbe rovinare altri cloni.
Martin

1

Questa è un'ottima domanda di Stack Overflow e le risposte sono state molto istruttive, in modo da poter risolvere un fastidioso problema che ho riscontrato di recente.

L'organizzazione per cui lavoro utilizza il Atlassian's BitBucketprodotto (non Github), essenzialmente la loro versione di GitHub in modo che i repository possano essere completamente protetti in sede. Stavo riscontrando un problema simile a @coordinate, in quanto la mia password era richiesta per un nuovo repository che ho verificato. Le mie credenziali erano state salvate a livello globale per tuttiBitBucket progetti, quindi non sono sicuro di cosa abbia causato la perdita di credenziali.

In breve, sono stato in grado di immettere il seguente comando GIT (fornendo solo il mio nome utente), che ha quindi richiesto al Credential Manager di Git di richiedere la password, che sono stato quindi in grado di salvare.

git clone https://user@code.domain.org/git/[organization]/[team]/[repository.git]

NOTA: i sotto-percorsi della directory tra parentesi si riferiscono semplicemente a riferimenti interni e varieranno per te!


0

Se si sta utilizzando http/httpse si sta cercando di AUTOMATIZZARE COMPLETAMENTE il processo senza richiedere alcun input o richiesta dell'utente (ad esempio: all'interno di una pipeline CI / CD), è possibile utilizzare il seguente approccio sfruttandogit credential.helper

GIT_CREDS_PATH="/my/random/path/to/a/git/creds/file"
# Or you may choose to not specify GIT_CREDS_PATH at all.
# See https://git-scm.com/docs/git-credential-store#FILES for the defaults used

git config --global credential.helper "store --file ${GIT_CREDS_PATH}"
echo "https://alice:${ALICE_GITHUB_PASSWORD}@github.com" > ${GIT_CREDS_PATH}

dove puoi scegliere di impostare la ALICE_GITHUB_PASSWORDvariabile d'ambiente da un precedente comando shell o dalla tua configurazione della pipeline ecc.

Ricorda che git-credential-helper basato su "store" memorizza password e valori in testo semplice. Quindi assicurati che il tuo token / password abbia autorizzazioni molto limitate.


Ora usa semplicemente https: //alice@github.com/my_repo.git ovunque il tuo sistema automatizzato debba recuperare il repository - utilizzerà le credenziali per alicein github.comcome store da git-credential-helper.

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.