web-dev-qa-db-fra.com

Comment éviter la spécification du nom d'utilisateur et du mot de passe à chaque push Git?

Je git Push mon travail sur un référentiel Git distant.

Chaque Push m'invitera à saisir username et password. Je voudrais l'éviter pour chaque Push, mais comment le configurer pour l'éviter?

252
Leem.fin

1. Générer une clé SSH

Linux/Mac

Ouvrez le terminal pour créer des clés ssh:

cd ~                 #Your home directory
ssh-keygen -t rsa    #Press enter for all values

Pour les fenêtres

(Fonctionne uniquement si le programme commit est capable d'utiliser des certificats/clés ssh privées et publiques)

  1. Utiliser PuTTY Gen pour générer une clé
  2. Exporter la clé en tant que clé SSH ouverte

Voici un procédure pas à pas sur PuTTY gen pour les étapes ci-dessus.

2. Associer la clé SSH au référentiel distant

Cette étape varie en fonction de la configuration de votre télécommande.

  • S'il s'agit d'un référentiel GitHub et que vous disposez de privilèges d'administration, accédez à settings et cliquez sur 'ajouter une clé SSH'. Copiez le contenu de votre ~/.ssh/id_rsa.pub dans le champ "Clé".

  • Si votre référentiel est administré par quelqu'un d'autre, donnez votre id_rsa.pub à l'administrateur.

  • Si votre référentiel distant est administré par votre, vous pouvez utiliser cette commande par exemple: 

    scp ~/.ssh/id_rsa.pub YOUR_USER@YOUR_IP:~/.ssh/authorized_keys/id_rsa.pub

3. Définissez votre URL distante sur un formulaire prenant en charge SSH. 1

Si vous avez suivi les étapes ci-dessus et recevez toujours l'invite du mot de passe, assurez-vous que l'URL de votre référentiel est sous la forme.

git+ssh://[email protected]/username/reponame.git

par opposition à

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

Pour voir l'URL de votre dépôt, lancez:

git remote show Origin

Vous pouvez changer l'URL avec:

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

[1] Cette section incorpore la réponse de Eric P

270
First Zero

Authentification permanente avec les référentiels Git,

Exécutez la commande suivante pour activer la mise en cache des informations d'identification.

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

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

Utiliser devrait également spécifier la mise en cache expire ,

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

Après avoir activé la mise en cache des informations d'identification, il sera mis en cache pendant 7200 secondes (2 heures) .

Remarque: Aide aux informations d'identification stockant le mot de passe non chiffré sur le disque local. 

144
Jay Patel

Si vos clés SSH sont déjà configurées et que vous recevez toujours l'invite du mot de passe, assurez-vous que votre URL de dépôt est au format

git+ssh://[email protected]/username/reponame.git

par opposition à

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

Pour voir l'URL de votre dépôt, lancez:

git remote show Origin

Vous pouvez changer l'URL avec git remote set-url comme suit:

git remote set-url Origin git+ssh://[email protected]/username/reponame.git
106
Eric P

Utilisez simplement l'option --repo pour la commande git Push. Comme ça:

$ git Push --repo https://name:[email protected]/name/repo.git
36
Pavel

Économiser indéfiniment

Vous pouvez utiliser le git-credential-store via 

git config credential.helper store

which stocke votre mot de passe non crypté dans le système de fichiers } _:

L'utilisation de cet assistant stockera vos mots de passe non chiffrés sur le disque, uniquement protégés par les autorisations du système de fichiers. Si cela n’est pas un compromis de sécurité acceptable, essayez git-credential-cache ou recherchez un assistant s’intégrant au stockage sécurisé fourni par votre système d’exploitation. 

Avec un délai d'attente

Utilisez le git-credential-cache qui, par défaut, stocke le mot de passe pendant 15 minutes.

git config credential.helper cache

pour définir un délai différent, utilisez --timeout (ici 5 minutes)

git config credential.helper 'cache --timeout=300'

Sauvegarde sécurisée indéfiniment (OS X et Windows)

  • Si vous utilisez un Mac, Git est livré avec un mode «osxkeychain», qui met en cache les informations d’identité dans le trousseau sécurisé qui est associé à votre compte système. Cette méthode stocke les informations d'identification sur le disque et elles n'expirent jamais, mais elles sont chiffrées avec le même système que celui qui stocke les certificats HTTPS et les remplissages automatiques Safari.
  • Si vous utilisez Windows, vous pouvez installer un utilitaire appelé «Git Credential Manager for Windows». Il est similaire à l’assistant «osxkeychain» décrit ci-dessus, mais utilise Windows Credential Store pour contrôler les informations confidentielles. Vous pouvez le trouver à l'adresse https://github.com/Microsoft/Git-Credential-Manager-for-Windows . [souligne le mien]
14
serv-inc

J'utilisais le lien https (https://github.com/org/repo.git) Au lieu du lien ssh;

[email protected]:org/repo.git  

La commutation a résolu le problème pour moi!

8
ishan

Câblez votre client git à votre magasin de données d'identification du système d'exploitation. Par exemple, sous Windows, vous liez l’assistant d’identité à Wincred:

git config --global credential.helper wincred

Y a-t-il un moyen d'éviter la saisie de mot de passe lors de l'utilisation de https: // sur GitHub?

5
Daniel

Je voulais juste souligner quelque chose à propos de la solution mentionnée ci-dessus à plusieurs reprises:

git config credential.helper store

Vous pouvez utiliser n'importe quelle commande nécessitant un mot de passe après cela. Vous n'êtes pas obligé de pousser. (vous pouvez également extraire par exemple) Après cela, vous n'aurez plus besoin de saisir votre nom d'utilisateur/mot de passe. 

4
TrollAxeThrower

Sous Windows, utilisez ceci à la place, cela fonctionne pour moi:

https://{Username}:{Password}@github.com/{Username}/{repo}.git

par exemple.

git clone https://{Username}:{Password}@github.com/{Username}/{repo}.git

git pull https://{Username}:{Password}@github.com/{Username}/{repo}.git

git remote add Origin https://{Username}:{Password}@github.com/{Username}/{repo}.git

git Push Origin master

J'ai utilisé la réponse suggérée par Pavel et cela a fonctionné pour moi. Ma différence était de le faire pendant que je rajoutais la télécommande, comme suit: git remote add (alias) https://(name:password)@github.com/(the remote address).git

3
dsmryder

Ma solution sous Windows:

  1. Faites un clic droit sur le répertoire pour Push et sélectionnez "Git Bash Here".
  2. ssh-keygen -t rsa (appuyez sur enter pour toutes les valeurs)
  3. Vérifiez le terminal pour: Your public key has been saved in /c/Users/<your_user_name_here>/.ssh/id_rsa.pub
  4. Copier la clé publique du fichier spécifié.
  5. Accédez à votre profil GitHub => Paramètres => Clés SSH et GPG => Nouvelle clé SSH => Collez votre clé SSH ici => Enregistrer
2
Мони Мон

Exécuter la commande ci-dessous a résolu le problème pour moi.

git config --global credential.helper wincred

Veuillez vous référer à la documentation ci-dessous de github:

https://help.github.com/articles/caching-your-github-password-in-git/
2
Krishna

Étape 1 -

Créez des clés SSH sur votre système Linux en utilisant la commande ci-dessous

ssh-keygen -t rsa -b 4096 -C "your_email"

Il vous demandera la phrase secrète et le nom du fichier (par défaut, ~/.ssh/id_rsa, ~/.ssh/id_rsa.pub)

Étape 2 -

Une fois les fichiers créés, ajoutez la clé publique id_rsa.pub à la section ssh du compte github.

Étape 3 -

Sur votre machine, ajoutez la clé privée id_rsa à ssh-agent en utilisant la commande ci-dessous.

ssh-add ~/.ssh/id_rsa 

Étape 4 -

Maintenant, ajoutez l'URL distante [email protected]: nom_utilisateur/nom_poste.git à votre dépôt git local à l'aide de la commande ci-dessous.

git remote remove Origin
git remote add Origin [email protected]:user_name/repo_name.git

C'est tout.

1
Anil Agrawal

Tout cela est dû au fait que git ne fournit pas d’option dans les commandes clone/pull/Push/fetch pour envoyer les informations d’identification par un canal. Bien qu'il donne credential.helper, il stocke sur le système de fichiers ou crée un démon, etc. Souvent, les informations d'identification de GIT sont de niveau système et leur protection incombe à l'application qui appelle les commandes git. Très dangereux en effet.

Voici ce sur quoi je devais travailler ... 1. La version de Git (git --version) doit être supérieure ou égale à 1.8.3.

GIT CLONE

Pour le clonage, utilisez "git clone URL" après avoir modifié l'URL du format suivant: http: // {myuser} @ {my_repo_ip_address}/{myrepo_name.git} à http: // {myuser}: {mypwd} @ {my_repo_ip_address} /{myrepo_name.git}

Puis purgez le référentiel du mot de passe comme dans la section suivante.

PURGE 

Maintenant, cela aurait disparu et

  1. écrit le mot de passe dans git remote Origin. Tapez "git remote -v" pour voir les dégâts. Corrigez cela en définissant l'URL d'origine distante sans mot de passe. "git remote set_url Origine http: // {myuser} @ {my_repo_ip_address}/{myrepo_name.git}" 
  2. écrit le mot de passe dans .git/logs dans le référentiel. Remplacez toutes les occurrences de pwd en utilisant une commande unix telle que find .git/logs -exec sed -i 's/{mon_url_avec_pwd} // g' {} \; Ici, {my_url_with_pwd} est l’URL avec le mot de passe. Étant donné que l'URL comporte des barres obliques, il est nécessaire de l'esquiver par deux barres obliques. Par exemple, pour l'URL http: // kris: [email protected]/proj.git -> http: \\/\\/kris: [email protected] \\/proj.git

Si votre application utilise Java pour émettre ces commandes, utilisez ProcessBuilder au lieu de Runtime. Si vous devez utiliser Runtime, utilisez getRunTime (). Exec, qui prend le tableau String comme arguments avec/bin/bash et -c comme arguments plutôt que celui qui prend une seule chaîne comme argument.

GIT FETCH/PULL/Push

  1. définissez le mot de passe dans l'URL distante de la manière suivante: "git remote set_url Origine http: // {myuser}: {mypwd} @ {my_repo_ip_address}/{myrepo_name.git}" 
  2. Émettez la commande git fetch/Push/pull. Vous ne serez alors pas invité à entrer le mot de passe.
  3. Effectuez la purge comme dans la section précédente. Ne le manquez pas.
1
Krishna

Si votre PC est sécurisé ou si vous ne vous souciez pas de la sécurité par mot de passe, cela peut être réalisé très simplement. En supposant que le référentiel distant est sur GitHub et que Origin est votre nom local pour le référentiel distant, utilisez cette commande.

git remote set-url --Push Origin https://<username>:<password>@github.com/<repo>

L'indicateur --Push garantit que cela modifie uniquement l'URL du référentiel pour la commande git Push. (La question posée dans le message d'origine concerne uniquement la commande git Push. Exiger un nom d'utilisateur + un mot de passe uniquement pour les opérations Push constitue la configuration normale pour les référentiels public sur GitHub. Notez que les référentiels private sur GitHub nécessiteraient également un nom d'utilisateur + un mot de passe pour les opérations d'extraction et de récupération, vous ne voudrez donc pas utiliser le --Push flag ... pour un référentiel privé

AVERTISSEMENT: Ceci est intrinsèquement non sécurisé car:

  1. votre FAI, ou quiconque se connectant à votre réseau, peut facilement voir le mot de passe en clair dans l’URL;

  2. toute personne qui accède à votre PC peut voir votre mot de passe en utilisant git remote show Origin.

C'est pourquoi l'utilisation d'une clé SSH est la réponse acceptée.

Même une clé SSH n'est pas totalement sécurisée. Toute personne qui accède à votre PC peut toujours, par exemple, faire des push qui détruisent votre référentiel ou - pire encore - Push commit en apportant des modifications subtiles à votre code. (Tous les commits poussés sont évidemment très visibles sur GitHub. Mais si quelqu'un voulait changer votre code subrepticement, il pourrait --amend un commit précédent sans changer le message de commit, puis forcer Push it. Ce serait furtif et assez difficile à remarquer en pratique. .)

Mais révéler votre mot de passe est pire. Si un attaquant prend connaissance de votre nom d'utilisateur et de votre mot de passe, il peut vous verrouiller votre compte, supprimer votre compte, supprimer définitivement le référentiel, etc.


Alternativement - pour plus de simplicité et sécurité - vous pouvez fournir uniquement votre nom d'utilisateur dans l'URL, de sorte que vous devrez taper votre mot de passe à chaque fois que vous git Push mais que vous n'ayez pas à donner votre nom d'utilisateur à chaque fois. (J'aime bien cette approche, le fait de taper le mot de passe me donne une pause pour réfléchir chaque fois que je git Push, donc je ne peux pas git Push par accident.)

git remote set-url --Push Origin https://<username>@github.com/<repo>
1
radfast

Apparaît que, du moins lorsque TortoiseGIT est utilisé sous Windows, il est possible de créer les clés SSH et de les transférer sur le serveur GIT en utilisant simplement:

> ssh-keygen.exe
> ssh-copy-id [username]@[GIT_server]
0
EquipDev

Autant que je sache, il y a simplement deux sûr moyens: ssh ou passwd crypté à l'aide d'un magasin de clés

SSH

  1. Connectez-vous à votre github;
  2. Visitez: https://github.com/settings/keys ;
  3. Nouvelle clé SSH;
  4. cat ~/.ssh/id_rsa.pub, collez-le là-bas, nommez-le et enregistrez-le (si vous n'avez pas ce fichier, générez-en un par ssh-keygen -t rsa - juste Entrée pour toutes les invites);
  5. Accédez à votre référentiel local et mettez à jour votre télécommande par git remote set-url Origin git+ssh://[email protected]/username/reponame.git - vous pouvez d’abord le vérifier par git remote -v);
  6. Voilà, juste touch t; git add t; git commit -m "test"; git Push et confirmez oui pour profiter du monde sans mot de passe}.

passwd ENCRYPTED en utilisant un keystore

Si vous utilisez simplement git config --global credential.helper store comme indiqué par d’autres, vos mots de passe unencrypted seront simplement stockés dans un texte brut sous ~/.git-credentials, ce qui n’est pas sûr. 

Essayez de chiffrer comme

Sudo apt-get install libgnome-keyring-dev
Sudo make --directory=/usr/share/doc/git/contrib/credential/gnome-keyring
git config --global credential.helper /usr/share/doc/git/contrib/credential/gnome-keyring/git-credential-gnome-keyring

git config --global credential.helper store

Dans ce cas, vous utilisez https://[email protected]/username/reponame.git

0
Hearen

Vous devez configurer une clé privée SSH, vous pouvez consulter cette page , comment faire la configuration sur Mac, si vous êtes sur Linux le guide devrait être presque identique, sur Windows vous auriez besoin d’un outil comme MSYS .

0
RageZ