Je clone un dépôt git dans un script comme celui-ci:
git clone https://user:[email protected]/name/.git
Cela fonctionne, mais mon nom d'utilisateur et mon mot de passe! sont désormais stockés dans l'URL d'origine dans .git/config
.
Comment puis-je empêcher cela, mais toujours le faire dans un script (donc pas de saisie manuelle de mot de passe)?
La méthode que j'utilise consiste à utiliser un git pull
Au lieu d'un clone. Le script ressemblerait à:
mkdir repo
cd repo
git init
git config user.email "email"
git config user.name "user"
git pull https://user:[email protected]/name/repo.git master
Cela ne stockera pas votre nom d'utilisateur ou votre mot de passe dans .git/config
. Cependant, à moins que d'autres étapes ne soient prises, le nom d'utilisateur et le mot de passe en texte brut seront visibles pendant que le processus s'exécute à partir de commandes qui montrent les processus en cours (par exemple ps
).
Comme indiqué dans les commentaires, puisque cette méthode utilise HTTPS vous devez encoder l'URL de tout caractère spécial qui peut également apparaître dans votre mot de passe.
Une autre suggestion que je ferais (si vous ne pouvez pas utiliser ssh) est d'utiliser un jeton OAuth au lieu d'un nom d'utilisateur/mot de passe en clair car il est légèrement plus sécurisé. Vous pouvez générer un jeton OAuth à partir des paramètres de votre profil: https://github.com/settings/tokens .
Ensuite, en utilisant ce jeton, la commande pull serait
git pull https://$OAUTH_TOKEN:[email protected]/name/repo.git master
OMI, la meilleure solution consiste à utiliser un assistant GIT_ASKPASS
Personnalisé et à fournir le mot de passe comme une autre variable d'environnement. Ainsi, par exemple, créez un fichier git-askpass-helper.sh
Comme:
#!/bin/sh
exec echo "$GIT_PASSWORD"
puis exécutez git clone https://username@hostname/repo
avec les variables d'environnement GIT_ASKPASS=/path/to/git-askpass-helper.sh
et GIT_PASSWORD=nuclearlaunchcodes
.
Cela a l'avantage que le mot de passe ne sera pas également visible dans la liste des processus.
Vous pouvez saisir vos identifiants de connexion dans votre ~/.netrc
fichier. Quelque chose dans le sens de:
machine Host.example.net
login bart
password eatmyshorts
Assurez-vous simplement de chmoder ce fichier à 600. Si vous utilisez Windows, le lien suivant peut être utile: https://stackoverflow.com/questions/6031214/git-how-to-use-netrc- fichier-sur-windows-pour-sauvegarder-utilisateur-et-mot de passe
Personnellement, j'ai tendance à utiliser les clés SSH à des fins d'authentification (si vous êtes autorisé, bien sûr).
Après avoir parcouru des dizaines de SO publications, blogs, etc., j'ai essayé tous méthode, et c'est ce que j'ai trouvé. Il couvre TOUT.
Ce sont tous les moyens et outils par lesquels vous pouvez authentifier git en toute sécurité pour cloner un référentiel sans invite de mot de passe interactif .
D'après ce qui est demandé ici, soit les clés SSH, GIT_ASKPASS
, ou git credential store
l'utilisation du gestionnaire de trousseau OS pourrait être le meilleur choix.
Étant donné que GIT_ASKPASS est probablement le moins bien compris des 3, je vais le détailler ici - et les autres sont dans la feuille de triche.
Comment créer un GIT_ASKPASS
script:
echo 'echo $MY_GIT_TOKEN' > $HOME/.git-askpass
Comment l'utiliser:
export MY_GIT_TOKEN=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
export GIT_ASKPASS=$HOME/.git-askpass
git clone https://[email protected]/project.git
Le script reçoit stdin sous la forme de:
Password for 'scheme://Host.tld':
Le script reçoit des Git ENV tels que:
GIT_DIR=/Users/me/project/.git
GIT_EXEC_PATH=/usr/local/Cellar/git/2.19.0_1/libexec/git-core
GIT_PREFIX=
Plus de détails dans le cheatsheet .