Come fornire username / password per git clonare in uno script, ma non archiviare le credenziali in .git / config


31

Sto clonando un repository git in uno script come questo:

git clone https://user:password@host.com/name/.git

Funziona, ma il mio nome utente e la mia password! sono ora memorizzati nell'URL di origine in .git/config.

Come posso impedirlo, ma comunque farlo in uno script (quindi non inserire manualmente la password)?


Probabilmente potresti aggiornare l'origine in seguito:git remote set-url origin https://host.com/name/.git
ceejayoz,

@ceejayoz Sì, è possibile. Grazie per l'idea. Spero ancora in una soluzione, che non memorizzi nemmeno temporaneamente le credenziali.
Nathan,

4
Sicuro: usa un'autenticazione basata su SSH con una chiave.
Ceejayoz,

2
C'è un motivo per cui usi https anziché SSH? SSH supporta le chiavi.
mzhaase,

1
@MartijnCourteaux La password viene effettivamente fornita allo script tramite una variabile di ambiente. Quindi in realtà lo faccio: nome utente clone git : $ PASSWORD @ ...
Nathan

Risposte:


20

Il metodo che uso è effettivamente utilizzare un git pullinvece di un clone. La sceneggiatura sarebbe simile a:

mkdir repo
cd repo
git init
git config user.email "email"
git config user.name "user"
git pull https://user:password@github.com/name/repo.git master

Questo non memorizzerà il tuo nome utente o password in .git/config. Tuttavia, a meno che non vengano adottati altri passaggi, il nome utente e la password in testo normale saranno visibili mentre il processo è in esecuzione da comandi che mostrano i processi correnti (ad es ps.).

Un ulteriore suggerimento che vorrei fare (se non puoi usare ssh) è di usare effettivamente un token OAuth invece del nome utente / password in chiaro poiché è leggermente più sicuro. Puoi generare un token OAuth dalle impostazioni del tuo profilo: https://github.com/settings/tokens .

Quindi usando quel token sarebbe il comando pull

git pull https://$OAUTH_TOKEN:x-oauth-basic@github.com/name/repo.git master

Senza dubbio non posso usare i token di autenticazione. Non sto usando Github ma un server privato.
Nathan,

3
Va anche notato che il nome utente e la password saranno visibili, ad esempio, psmentre il pull viene eseguito (almeno a meno che tu non abbia impedito agli utenti di vedere i processi degli altri)
derobert

Punti per l'utilizzo del giuramento. È esattamente ciò di cui avevo bisogno in produzione / messa in scena / sviluppo.
RobotHumans,

un milione grazie a te amico. ore sprecate n ore n finalmente è arrivata la tua risposta. : thumbsup
JasdeepSingh,

17

IMO la migliore soluzione sta usando un GIT_ASKPASShelper personalizzato e consegna la password come un'altra variabile d'ambiente. Quindi, ad esempio, crea un file git-askpass-helper.shcome:

#!/bin/sh
exec echo "$GIT_PASSWORD"

e quindi eseguire git clone https://username@hostname/repocon variabili di ambiente GIT_ASKPASS=/path/to/git-askpass-helper.she GIT_PASSWORD=nuclearlaunchcodes.

Ciò ha il vantaggio che la password non sarà visibile anche nell'elenco dei processi.


+1 per soluzione creativa. Questo sarebbe un po 'più sicuro della git pullsoluzione e ti permetterebbe di archiviare la password in chiaro come segreto nel tuo strumento di distribuzione automatica preferito.
FGreg,

13

Puoi inserire i tuoi crediti di connessione nel tuo ~/.netrcfile. Qualcosa sulla falsariga di:

machine host.example.net
login bart
password eatmyshorts

Assicurati solo di modificare il file su 600. Se stai usando Windows, il seguente link può essere utile: /programming/6031214/git-how-to-use-netrc-file-on- windows-to-save-user e password

Personalmente, ho la tendenza a usare le chiavi SSH per scopi di autenticazione (se sei autorizzato, ovviamente).


Bene, questo lascerebbe la mia password dentro ~ / .netrc. Anche io non lo voglio.
Nathan,

2

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

Vedi il foglio informativo sulle credenziali Git e sui 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
  • Bonus: funziona con pacchetti privati
    • nodo / npm package.json
    • python / pip / eggs Requisiti.txt
    • gemme di rubino Gemfile
    • golang go.mod

Migliori opzioni per la memorizzazione senza testo

Da ciò che viene chiesto qui o SSH Keys GIT_ASKPASSo l' git credential storeutilizzo del gestore portachiavi del sistema operativo potrebbe essere la scelta migliore.

Dato che GIT_ASKPASS è probabilmente il meno compreso dei 3, lo spiegherò qui - e gli altri sono nel cheatheet.

GIT_ASKPASS

Come creare uno GIT_ASKPASSscript:

echo 'echo $MY_GIT_TOKEN' > $HOME/.git-askpass

Come usarlo:

export MY_GIT_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
export GIT_ASKPASS=$HOME/.git-askpass
git clone https://token@code.example.com/project.git

Lo script riceve stdin sotto forma di:

Password for 'scheme://host.tld':

Lo script riceve ENV Git come:

GIT_DIR=/Users/me/project/.git
GIT_EXEC_PATH=/usr/local/Cellar/git/2.19.0_1/libexec/git-core
GIT_PREFIX=

Maggiori dettagli nel cheatsheet .

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.