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

317

Je git pushtravaille sur un référentiel Git distant.

Tout pushme demandera de saisir usernameet password. Je voudrais l'éviter à chaque push, mais comment configurer pour l'éviter?

Leem.fin
la source
6
Une réponse est disponible ici: stackoverflow.com/questions/6565357/…
kbdjockey
3
En bref: pour github, suivez simplement ces deux liens help.github.com/articles/generating-ssh-keys help.github.com/articles/changing-a-remote-s-url
JRun
pour bitbucket, veuillez suivre ce lien
JDP

Réponses:

346

1. Générez 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 de validation est capable d'utiliser des certificats / clés ssh privées et publiques)

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

Voici une procédure pas à pas sur la génération de mastic pour les étapes ci-dessus

2. Associez 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 administratifs, accédez aux paramètres et cliquez sur 'ajouter une clé SSH'. Copiez le contenu de votre ~/.ssh/id_rsa.pubdans le champ intitulé «Clé».

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

  • 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 qui prend en charge SSH 1

Si vous avez effectué les étapes ci-dessus et obtenez toujours l'invite de mot de passe, assurez-vous que l'URL de votre référentiel est dans le formulaire

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

par opposition à

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

Pour voir votre URL de dépôt, exécutez:

git remote show origin

Vous pouvez modifier l'URL avec:

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

[1] Cette section reprend la réponse d' Eric P

Premier zéro
la source
3
J'ai exécuté l'étape 1 et l'étape 2 sur ubuntu mais il me demande toujours u_id passwd. J'ai également couru: ssh -T [email protected]. Toujours le même. Que faire?
Radhika
4
@Rads Avez-vous essayé l'autre réponse, par Eric P ?
y'2
2
@dialex Il voulait dire une personne qui administre le dépôt git distant.
selalerer
5
git remote set-url origin git + ssh: //[email protected]/username/reponame.git cette commande est utile pour moi.
ArtificiallyIntelligence
2
Cela a fonctionné pour moigit remote set-url origin [email protected]:/username/projectname.git
Kurt
181

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>

L'utilisation doit également spécifier l' expiration de la mise en cache ,

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: assistant d'identification stockant le mot de passe non chiffré sur le disque local.

Jay Patel
la source
4
Merci. Pouvez-vous expliquer ce que fait la commande config? Je me demande pourquoi il ne me demande même pas de mot de passe la première fois que je pousse vers un repo.
HelloWorldNoMore
1
@vivoconunxino Probablement parce que c'est intrinsèquement dangereux. À partir de la gitpage de manuel: "L'utilisation de cette aide stockera vos mots de passe non chiffrés sur le disque, protégés uniquement par les autorisations du système de fichiers."
cmaster - réintègre monica
15
Il manque un avertissement à cette réponse concernant l’ storeassistant d’identification stockant le mot de passe sur le disque non chiffré.
cmaster - réintègre monica
1
@DavidRTribble: le mettre en cache? Ou supprimez le fichier correspondant, voir git-scm.com/docs/git-credential-store
serv-inc
1
@DavidRTribble: mieux:git config --unset credential.helper
serv-inc
116

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

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

par opposition à

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

Pour voir votre URL de dépôt, exécutez:

git remote show origin

Vous pouvez changer l'URL git remote set-urlcomme ceci:

git remote set-url origin git+ssh://[email protected]/username/reponame.git
Eric P
la source
C'est ce qui a résolu mon problème après l'avoir utilisé git initlocalement, puis j'ai essayé de pousser après avoir ajouté la télécommande à partir d'un nouveau dépôt sur le site Web de GitHub.
sheldonkreger
1
Je ne sais pas pourquoi cela ne fait pas partie de la réponse acceptée. Merci!
jwalk
1
La réponse acceptée doit être composée de la réponse réellement acceptée PLUS celle-ci.
Puce
3
Vous pouvez omettre le "git + ssh: //" et utilisez simplement[email protected]/username/reponame.git
Ivan Shulev
1
@IvanShulev J'ai essayé initialement sans git + ssh et je n'ai pas travaillé
Antonello
40

Utilisez simplement l' --repooption pour la commande git push. Comme ça:

$ git push --repo https://name:[email protected]/name/repo.git
Pavel
la source
37
Ou vous pouvez définir cela par défaut avecgit remote set-url origin https://name:[email protected]/repo.git
ACyclic
Je note que la définition de l'URL ne [email protected]/....gitfonctionne que si cela ne vous dérange pas d'être harcelé pour le mot de passe à chaque fois.
1er
Pour les utilisateurs de github, git push --repo https://github.com/Username/repo cela fonctionne sans l' .git extension
Pe Dro
24

Enregistrer indéfiniment

Vous pouvez utiliser le git-credential-store via

git config credential.helper store

qui 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, protégés uniquement par les autorisations du système de fichiers. Si ce n'est pas un compromis de sécurité acceptable, essayez git-credential-cache ou trouvez un assistant qui s'intègre au stockage sécurisé fourni par votre système d'exploitation.

Avec un timeout

Utilisez le git-credential-cache qui stocke par défaut 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'

Enregistrement sécurisé 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'identification dans le trousseau sécurisé attaché à votre compte système. Cette méthode stocke les informations d'identification sur le disque, et elles n'expirent jamais, mais elles sont cryptées avec le même système qui stocke les certificats HTTPS et les remplissages automatiques de Safari. Exécution de ce qui suit sur la ligne de commande activer cette fonction: git config --global credential.helper osxkeychain. Vous devrez également stocker les informations d'identification dans le trousseau à l'aide de l'application Trousseau.
  • Si vous utilisez Windows, vous pouvez installer un assistant appelé «Git Credential Manager for Windows». Ceci est similaire à l'assistant «osxkeychain» décrit ci-dessus, mais utilise le Windows Credential Store pour contrôler les informations sensibles. Il peut être trouvé à https://github.com/Microsoft/Git-Credential-Manager-for-Windows . [met l'accent sur le mien]
serv-inc
la source
Pour Windows credential.helper cachene fonctionne PAS. Ça devrait l'être git config --global credential.helper wincred.
Paulo Merson
1
Cela est utile lorsque vous êtes obligé d'utiliser https. Mon git sur le serveur se bloque si j'utilise ssh, donc je n'ai pas l'option de clés SSH.
Sridhar Sarnobat
8

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!

ishan
la source
6

É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 sera ~ / .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 à l'aide de la commande ci-dessous

ssh-add ~/.ssh/id_rsa 

Étape 4 -

Ajoutez maintenant l'url distante [email protected]: nom_utilisateur / nom_repo.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.

Anil Agrawal
la source
5

Sur le système d'exploitation Windows, utilisez-le à 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
Ayejuni Ilemobayo Kings
la source
5

Je voulais juste faire remarquer plusieurs fois la solution ci-dessus:

git config credential.helper store

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

TrollAxeThrower
la source
3

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

dsmryder
la source
3

L'exécution de 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 github ci-dessous:

https://help.github.com/articles/caching-your-github-password-in-git/
Krishna
la source
3

Pour autant que je sache, il existe simplement deux méthodes sûres : ssh ou passwd crypté à l'aide d'un fichier 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à, nommez-le et enregistrez-le (si vous n'avez pas un tel fichier, générez-en un par vous-même ssh-keygen -t rsa- Entrez simplement 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 le vérifier d'abord engit remote -v );
  6. Voilà, juste touch t; git add t; git commit -m "test"; git pushet confirmez oui pour profiter du monde sans mot de passe .

passwd ENCRYPTED using a keystore

Si vous l'utilisez simplement git config --global credential.helper storecomme d'autres l'ont mentionné, vos mots de passe non chiffrés seront simplement stockés dans un texte en clair sous ~/.git-credentialslequel il n'est pas sûr que cela puisse paraître.

Essayez de le crypter 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.

Hearen
la source
2

Ma solution sur Windows:

  1. Faites un clic droit sur le répertoire pour pousser et sélectionnez "Git Bash Here".
  2. ssh-keygen -t rsa (Appuyez sur Entrée 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. Copiez 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 là => Enregistrer
Мони Мон
la source
2

Si votre PC est sécurisé ou que 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 se trouve sur GitHub et qu'il origins'agit de 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' --pushindicateur garantit que cela modifie l'URL du référentiel pour la git pushcommande uniquement. (La question posée dans le message d'origine concerne git pushuniquement la commande. Exiger un nom d'utilisateur + mot de passe uniquement pour les opérations push est la configuration normale pour les référentiels publics sur GitHub. Notez que les référentiels privés sur GitHub nécessiteraient également un nom d'utilisateur + mot de passe pour les opérations d'extraction et de récupération , donc pour un dépôt privé, vous ne voudriez pas utiliser le --push flag...)

AVERTISSEMENT: cela n'est pas sûr par nature car:

  1. votre FAI, ou toute personne enregistrant vos accès réseau, peut facilement voir le mot de passe en texte brut dans l'URL;

  2. toute personne ayant accès à votre PC peut afficher votre mot de passe à l'aide de 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 . Quiconque accède à votre PC peut toujours, par exemple, effectuer des push qui détruisent votre référentiel ou - pire - push s'engage à apporter 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 le pousser. Ce serait furtif et assez difficile à remarquer dans la pratique. )

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


Alternativement - pour des raisons de simplicité et de sécurité - vous ne pouvez fournir que votre nom d'utilisateur dans l'URL, de sorte que vous devrez taper votre mot de passe à chaque fois git pushmais vous n'aurez pas à donner votre nom d'utilisateur à chaque fois. (J'aime beaucoup cette approche, avoir à taper le mot de passe me donne une pause pour réfléchir à chaque fois que je le fais git push, donc je ne peux pas git pushpar accident.)

git remote set-url --push origin https://<username>@github.com/<repo>
radfast
la source
Et si le mot de passe a @, il brise la commande pensant le mot de passe après @ dans le cadre du serveur git?
Pranav Singh
Si votre mot de passe contient «@», vous êtes seul ici, désolé. Vous pouvez changer votre mot de passe?
radfast
Besoin de soulever une demande de changement de mot de passe car je faisais de l'automatisation pour l'intégration continue avec un compte de service (non personnel). Clés SSH actuellement utilisées pour une connexion sécurisée
Pranav Singh
1

Tout cela se produit car git ne fournit pas d'option dans les commandes clone / pull / push / fetch pour envoyer les informations d'identification via 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 celles du niveau système et il incombe à l'application de les appeler à l'aide des commandes git. Très dangereux en effet.

Voici ce que j'ai dû contourner. 1. La version Git (git --version) doit être supérieure ou égale à 1.8.3.

GIT CLONE

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

Purgez ensuite 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 origin 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 instances de pwd à l'aide d'une commande unix comme find .git / logs -exec sed -i 's / {my_url_with_pwd} // g' {} \; Ici, {my_url_with_pwd} est l'URL avec mot de passe. Étant donné que l'URL comporte des barres obliques, elle doit être échappée par deux barres obliques en arrière. Par exemple, pour l'URL http: // kris: [email protected]/proj.git -> http: \\ / \\ / kris: [email protected] \\ / proj.git

Si votre application utilise Java pour exécuter 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 de git remote comme: "git remote set_url origin http: // {myuser}: {mypwd} @ {my_repo_ip_address} / {myrepo_name.git}"
  2. Émettez la commande git fetch / push / pull. Le mot de passe ne vous sera alors pas demandé.
  3. Effectuez la purge comme dans la section précédente. Ne le manquez pas.
Krishna
la source
0

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

RageZ
la source
0

Apparaît qu'au moins lors de l'utilisation de TortoiseGIT 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]
EquipDev
la source