61 votes

Comment donner un nom d'utilisateur/mot de passe à un clone git dans un script, mais ne pas stocker les informations d'identification dans .git/config.

Je clone un dépôt git dans un script comme ceci :

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

Cela fonctionne, mais mon nom d'utilisateur et mon mot de passe sont maintenant stockés dans l'url d'origine dans le fichier .git/config .

Comment puis-je empêcher cela, tout en le faisant dans un script (donc sans saisie manuelle du mot de passe) ?

35voto

Josh Points 123

La méthode que j'utilise est d'utiliser réellement une 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:password@github.com/name/repo.git master

Votre nom d'utilisateur et votre mot de passe ne seront pas conservés dans le dossier de la Commission européenne. .git/config . Cependant, à moins que d'autres mesures ne soient prises, le nom d'utilisateur et le mot de passe en clair seront visibles pendant l'exécution du processus à partir des commandes qui affichent les processus en cours (par ex. ps ).

Comme indiqué dans les commentaires, puisque cette méthode utilise HTTPS vous devez coder l'URL de tous les caractères spéciaux qui peuvent é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 texte clair, car c'est légèrement plus sûr. Vous pouvez générer un jeton OAuth à partir des paramètres de votre profil : https://github.com/settings/tokens .

En utilisant ce jeton, la commande pull serait la suivante

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

30voto

user26405 Points 21

La meilleure solution, selon moi, consiste à utiliser un GIT_ASKPASS et livrer 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"

et ensuite exécuter git clone https://username@hostname/repo avec des variables d'environnement GIT_ASKPASS=/path/to/git-askpass-helper.sh y GIT_PASSWORD=nuclearlaunchcodes .

Cela présente l'avantage que le mot de passe ne sera pas non plus visible dans la liste des processus.

22voto

Stephen Connolly Points 103

Après avoir passé en revue douzaines de postes de SO, de blogs, etc., j'ai essayé chaque et voici ce que j'ai obtenu. Ça couvre TOUT.

Voir Feuille de route sur les informations d'identification et les paquets privés de Git

Ce sont toutes les manières et les outils par lesquels vous pouvez authentifier de manière sécurisée git pour cloner un dépôt. sans demande interactive de mot de passe .

  • Clés publiques SSH
    • SSH_ASKPASS
  • Jetons d'accès à l'API
    • GIT_ASKPASS
    • .gitconfig au lieu de
    • .gitconfig [informations d'identification].
    • .git-credentials
    • .netrc
  • Bonus : fonctionne avec les forfaits privés
    • node / npm package.json
    • Python / pip / eggs exigences.txt
    • ruby gems Fichier de gemmes
    • golang go.mod

Meilleures options pour un stockage sans texte en clair

D'après ce qui est demandé ici, soit les clés SSH, GIT_ASKPASS ou git credential store utiliser le gestionnaire de trousseau de l'OS pourrait être le meilleur choix.

Comme GIT_ASKPASS est probablement le moins bien compris des 3, je vais le détailler ici - les autres sont dans le cheatsheet.

GIT_ASKPASS

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://token@code.example.com/project.git

Le script reçoit un stdin sous la forme de :

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

Le script reçoit des ENV de Git 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 antisèche .

15voto

Brett Levene Points 776

Vous pouvez entrer vos identifiants de connexion dans votre ~/.netrc fichier. Quelque chose du genre :

machine host.example.net
login bart
password eatmyshorts

Assurez-vous simplement de donner à ce fichier un chmod de 600. Si vous utilisez Windows, le lien suivant peut vous être utile : https://stackoverflow.com/questions/6031214/git-how-to-use-netrc-file-on-Windows-to-save-user-and-password

Personnellement, j'ai tendance à utiliser les clés SSH à des fins d'authentification (si vous êtes autorisé, bien sûr).

0voto

Kyle Points 1

Conservez votre jeton ou votre mot de passe dans un endroit sûr, par ex. passer .

Ensuite, utilisez un script bash pour mapper git host à votre magasin de mots de passe, par exemple :

#!/usr/bin/env bash
# assuming "get" action from git and a config like this
# git config --global credential.helper $XDG_BIN_HOME'/git_credentials_from_pass $@'
while IFS= read -r line
do
  echo "$line"
  if [[ "$line" =~ host=.*github.com.* ]]; then
      echo "username=your_user_name"
      echo "password=$(pass show token_github.com/your_username)"
  #else ...
  fi
done

Changement your_username y token_github.com la façon dont vous l'avez mis en place.

Source : .

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X