web-dev-qa-db-fra.com

Git Push nécessite un nom d'utilisateur et un mot de passe

J'ai cloné un référentiel Git de mon compte GitHub sur mon PC.

Je souhaite utiliser à la fois mon ordinateur et mon ordinateur portable, mais avec un seul compte GitHub.

Lorsque j'essaie d'appuyer sur GitHub ou d'en extraire à l'aide de mon PC, il nécessite un nom d'utilisateur et un mot de passe, mais pas lorsque vous utilisez un ordinateur portable!

Je ne veux pas taper mon nom d'utilisateur et mon mot de passe chaque fois que j'interagis avec Origin. Qu'est-ce que j'oublie ici?

1287
TooCooL

Une erreur courante consiste à cloner en utilisant la valeur par défaut (HTTPS) au lieu de SSH. Vous pouvez corriger cela en accédant à votre référentiel, en cliquant sur "Cloner ou télécharger", puis en cliquant sur le bouton "Utiliser SSH" au-dessus du champ de l'URL et en mettant à jour l'URL de votre télécommande Origin comme ceci:

git remote set-url Origin [email protected]:username/repo.git

Ceci est documenté sur GitHub: Passage d'URL distantes de HTTPS à SSH .

1789
Tekkub

Authentification permanente avec les référentiels Git

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

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

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

Vous devez é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) .

304
Jay Patel

Je viens de rencontrer le même problème, et la solution la plus simple que j'ai trouvée consistait à utiliser l'URL SSH au lieu de HTTPS:

ssh://[email protected]/username/repo.git

Et pas ça:

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

Vous pouvez maintenant valider avec juste la clé SSH au lieu des username et password.

127
Anton Salikhmetov

En plus de passer à SSH, vous pouvez également continuer à utiliser HTTPS, si cela ne vous dérange pas de mettre votre mot de passe en clair. Mettez ceci dans votre ~/.netrc et il ne vous demandera pas votre nom d'utilisateur/mot de passe (au moins sous Linux et Mac):

machine github.com
       login <user>
       password <password>

Addition (voir le deuxième commentaire de VonC): sous Windows, le nom du fichier est %HOME%\_netrc.

Lisez également le premier commentaire de VonC au cas où vous voudriez chiffrer.

Un autre ajout (voir le commentaire de l'utilisateur 137717) que vous pouvez utiliser si vous avez Git 1.7.10 ou plus récent .

Cachez votre mot de passe GitHub dans Git en utilisant un assistant d'identification :

Si vous clonez des référentiels GitHub à l'aide de HTTPS, vous pouvez utiliser un assistant d'identification pour indiquer à Git de se souvenir de votre nom d'utilisateur et de votre mot de passe GitHub chaque fois qu'il communique avec GitHub.

Cela fonctionne également sous Linux, Mac et Windows.

115
rintcius

Pour les non-initiés qui sont déconcertés par les réponses précédentes, vous pouvez faire:

git remote -v

Ce qui répondra avec quelque chose comme

Origin    https://[email protected]/yourname/yourrepo.git (fetch)
Origin    https://[email protected]/yourname/yourrepo.git (Push)

Ensuite, vous pouvez exécuter la commande suggérée par de nombreux autres, mais vous connaissez maintenant votre nom et votre rapport par dessus, vous pouvez donc simplement copier et coller yourname/yourrepo.git à partir de ce qui précède dans:

git remote set-url Origin [email protected]:yourname/yourrepo.git
79
Davide

Si vous utilisez SSH et que votre clé privée est cryptée avec une phrase secrète, alors vous serez toujours invité à entrer la phrase secrète/le mot de passe de la clé privée lorsque vous faites des opérations de réseau avec Git comme Push, pull et fetch.

Utilisez ssh-agent pour enregistrer les informations d'identification de la phrase secrète/mot de passe de la clé privée

Si vous voulez éviter de devoir entrer votre phrase secrète à chaque fois, vous pouvez utiliser ssh-agent pour stocker vos informations d'identification de clé secrète une fois par session de terminal, comme je l'explique dans ma réponse à Impossible d'ouvrir une connexion avec votre agent d'authentification :

$ eval `ssh-agent -s`
$ ssh-add

Dans un msysgit Windows Bash, vous devez évaluer la sortie de ssh-agent, mais je ne suis pas sûr qu'il faille faire de même dans les autres environnements de développement et systèmes d'exploitation.

ssh-add recherche une clé privée dans votre dossier home .ssh appelé id_rsa, qui est le nom par défaut, mais vous pouvez transmettre un chemin de fichier à une clé portant un nom différent.

Tuer l'agent

Lorsque vous avez terminé votre session de terminal, vous pouvez arrêter ssh-agent avec l'indicateur de mise à mort -k:

$ ssh-agent -k

Comme expliqué dans le manuel ssh-agent) :

-k

Élimine l'agent actuel (indiqué par la variable d'environnement SSH_AGENT_PID).

Délai d'attente optionnel

En outre, il peut prendre un paramètre de délai d'expiration optionnel comme ceci:

$ ssh-add -t <timeout>

<timeout> a le format <n>h pour <n> heures, <n>m pour <n> minutes, etc.

Selon le ssh-agent manual :

-t life

Définissez une valeur par défaut pour la durée de vie maximale des identités ajoutées à l'agent. La durée de vie peut être spécifiée en secondes ou dans un format d'heure spécifié dans sshd_config (5) . Une durée de vie spécifiée pour une identité avec ssh-add (1) remplace cette valeur. Sans cette option, la durée de vie maximale par défaut est indéfinie.

Voir cette page pour plus de formats de temps .

Avertissement de sécurité pour les utilisateurs de Cygwin

Les utilisateurs de Cygwin doivent être conscients d'un risque de sécurité potentiel lié à l'utilisation de ssh-agent dans Cygwin :

les gens devraient être conscients des dangers potentiels de ssh-agent sous Cygwin 1 , bien que sous netstat local et portscan distant, il ne semble pas que le port spécifié dans/tmp/ssh-foo soit accessible à quiconque ...?

[1]: http://www.cygwin.com/ml/cygwin/2001-01/msg00063.html

Et à la lien cité :

notez cependant que les sockets du domaine Unix de Cygwin sont fondamentalement insécurisés et que je déconseille donc fortement DE DÉCOURAGER l'utilisation de ssh-agent sous Cygwin.

lorsque vous exécutez ssh-agent sous Cygwin, il crée le socket AF_UNIX dans le répertoire /tmp/ssh-$USERNAME/. Sous Cygwin, les sockets AF_UNIX sont émulés via des sockets AF_INET. Vous pouvez facilement voir cela si vous regardez dans le fichier /tmp/ssh-$USERNAME/agent-socket-* via le Bloc-notes. Vous verrez quelque chose comme

!<socket >2080

puis lancez netstat -a et surprise! Vous avez un programme qui écoute le port 2080. C'est ssh-agent. Lorsque ssh reçoit un défi RSA du serveur, il fait référence au /tmp/ssh-$USERNAME/agent-socket-* correspondant (sous Cygwin, dans notre cas, cela signifie qu'il ouvrira la connexion à localhost:2080) et demandera à ssh-agent de traiter le RSA. contester avec la clé privée dont il dispose, puis il transmet simplement la réponse reçue de ssh-agent au serveur.

Sous Unix, un tel scénario fonctionne sans problème, car le noyau Unix vérifie les autorisations lorsque le programme tente d'accéder à un socket AF_UNIX. Pour les sockets AF_INET, toutefois, les connexions sont anonymes (lisez "non sécurisé"). Imaginez que cygwin ssh-agent soit en cours d'exécution. Un pirate informatique malveillant peut scanner votre boîte, localiser le port ouvert utilisé par ssh-agent, ouvrir une connexion à votre serveur SSH, recevoir le défi RSA de celui-ci, l'envoyer à votre agent ssh via un port ouvert qu'il/elle a trouvé, recevoir le Réponse RSA, envoyez-le au serveur SSH et le tour est joué, il/elle s’est connecté avec succès à votre serveur en tant que vous.

53
user456814

Source: Configurer Git

La commande suivante enregistre votre mot de passe en mémoire pendant un certain temps (pour Git 1.7.10 ou plus récent).

$ git config --global credential.helper cache
# Set git to use the credential memory cache

$ git config --global credential.helper 'cache --timeout=3600'
# Set the cache to timeout after one hour (setting is in seconds)
47
Sagar Rakshe

Lorsque vous utilisez https pour Git pull & Push, configurez simplement remote.Origin.url pour votre projet, afin d'éviter la saisie d'un nom d'utilisateur (ou/et d'un mot de passe) à chaque fois que vous appuyez sur.

Comment configurer remote.Origin.url:

 Format de l'URL: 
 Https: // {nom d'utilisateur: mot de passe @} github.com/ {propriétaire}/{repo} 
 
 Paramètres de l'URL: 

* Nom d'utilisateur 
Facultatif, nom d'utilisateur à utiliser en cas de besoin. 
 authentification, si spécifié, inutile de ressaisir le nom d'utilisateur si besoin d'une authentification. N'utilisez pas de courrier électronique; utilisez votre nom d'utilisateur qui n'a pas "@", sinon l'URL ne peut pas être analysé correctement, * mot de passe facultatif, le mot de passe à utiliser en cas de besoin d'authentification. Si spécifié, il n'est pas nécessaire de ressaisir le mot de passe lorsque vous avez besoin d'authentification. Conseil: Cette valeur est stockée sous forme de texte brut. Par conséquent, pour des raisons de sécurité, ne spécifiez pas ce paramètre, * Par exemple, git config remote.Origin.url https: //[email protected]/eric/myproject

@Update - using ssh

Je pense que l’utilisation du protocole ssh est une meilleure solution que https, même si l’étape de configuration est un peu plus complexe.

étapes approximatives:

  • Créez des clés ssh à l'aide de la commande, par exemple ssh-keygen sous Linux, sous Windows msysgit, fournissez des commandes similaires.
  • Conservez la clé privée sur la machine locale à un emplacement approprié, par exemple ~/.ssh. Et ajoutez-le à l'agent ssh via la commande ssh-add.
  • Téléchargez la clé publique sur le serveur Git.
  • Remplacez remote.Origin.url du référentiel Git par le style ssh, par exemple, [email protected]:myaccount/myrepo.git.
  • Ensuite, lorsque vous appuyez ou que vous tirez, il n'est plus nécessaire de saisir le nom d'utilisateur ou le mot de passe.

Conseils:

  • Si votre clé ssh a une phrase secrète, vous devez la saisir lors de la première utilisation de la clé après chaque redémarrage de votre ordinateur, par défaut.

@Update - Bascule entre le protocole https et ssh.

Changer simplement remote.Origin.url suffira, ou vous pouvez éditer repo_home/.git/config directement pour changer la valeur (par exemple, en utilisant vi sur Linux).

Habituellement, j'ajoute une ligne pour chaque protocole et commente l'un d'eux à l'aide de #.

E.g.

" .git 
 fetch = + refs/heads/*: refs/télécommandes/Origin /*
31
Eric Wang

Vous pouvez mettre en cache votre mot de passe GitHub dans Git:

Il suffit de suivre les instructions de GitHub documentation officielle .

Après avoir suivi les instructions du lien ci-dessus, vous devriez être capable de pousser/tirer vers/depuis votre référentiel sans saisir votre nom d'utilisateur/mot de passe à chaque fois.

15
K M Rakibul Islam

Voici une autre option:

Au lieu d'écrire

git Push Origin HEAD

Vous pouvez écrire:

git Push https://user:[email protected]/path HEAD

Évidemment, avec la plupart des shells, le mot de passe sera mis en cache dans l'historique, gardez cela à l'esprit.

9
Lacho Tomov

Ce qui a fonctionné pour moi a été d’éditer .git/config et d’utiliser

[remote "Origin"]
        url = https://<login>:<password>@gitlab.com(...).git

Il va sans dire qu'il s'agit d'un moyen peu sûr de stocker votre mot de passe, mais il existe des environnements/cas où cela peut ne pas poser de problème.

8
WoJ

Mise à jour pour HTTPS:

GitHub a lancé un nouveau programme pour Windows qui stocke vos informations d'identification lorsque vous utilisez HTTPS:

Utiliser:

  • Téléchargez le programme de ici

  • Une fois que vous avez exécuté le programme, il modifiera votre fichier .gitconfig. Revérifiez si vous avez édité le .gitconfig correct au cas où vous en auriez plusieurs. Si cela n’a pas été modifié, ajoutez ce qui suit à votre .gitconfig

    [credential]
        helper = !'C:\\Path\\To\\Your\\Downloaded\\File\\git-credential-winstore.exe'
    

    NOTE le saut de ligne après [credential]. C'est requis.

  • Ouvrez votre client en ligne de commande et essayez une fois git Push Origin master. S'il vous demande un mot de passe, entrez-le et vous avez terminé. Mot de passe enregistré!

4
Varun Achar

Vous avez essentiellement deux options.

Si vous utilisez le même utilisateur sur les deux machines, vous devez copier la clé .pub sur votre PC afin que GitHub sache que vous êtes le même utilisateur.

Si vous avez créé un nouveau fichier .pub pour votre PC et souhaitez traiter les machines comme des utilisateurs différents, vous devez enregistrer le nouveau fichier .pub sur le site Web de GitHub.

Si cela ne fonctionne toujours pas, c'est peut-être que ssh n'est pas configuré correctement et qu'il ne parvient pas à trouver l'emplacement de vos clés. Essayer

ssh -vv [email protected]

Pour obtenir plus d'informations, pourquoi SSH échoue.

4
ralphtheninja

Pour les utilisateurs de Windows Git, après avoir exécuté git config --global credential.helper store, s'il demande toujours un mot de passe, vous feriez mieux de vérifier l'emplacement dans lequel le fichier de configuration est écrit, à l'aide de cette commande

git config --list --show-Origin

Dans mon cas, après avoir modifié manuellement le fichier de configuration 'C:\Program Files\Git\mingw64\etc\gitconfig' et ajouté le texte suivant, cela a fonctionné.

[credential]
    helper = store
2
Liang

Si la clé SSH ou le fichier .netrc ne fonctionnait pas pour vous, une autre solution simple, mais moins sécurisée, pouvant fonctionner pour vous est git-credential-store - Aide permettant de stocker les informations d'identification sur disque:

git config --global credential.helper store

Par défaut, les informations d'identification seront enregistrées dans le fichier ~/.git-credentials. Il sera créé et écrit dans.

Veuillez noter que 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 peut ne pas être un compromis de sécurité acceptable.

2
rumman0786

J'ai eu le même problème.

J'ai donc changé le fichier .git/config de mon projet,

url = https://github.com/<your-user-here>/<your-repo-here>

à

url = [email protected]:<your-user-here>/<your-repo-here>

et ajouté la clé publique SSH au profil Git en cours de paramétrage.

Pour la clé publique SSH:

cat ~/.ssh/id_rsa.pub
2
shrikant

C'est ce qui a fonctionné pour moi:

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

Exemple:

git remote set-url Origin https://[email protected]/jsmith/master.git
1
user5854766

Vous devez effectuer deux étapes -

  1. git remote remove Origin
  2. git remote add Origin [email protected]:NuggetAI/nugget.git

Notez que l'URL Git est une URL SSH et non une URL HTTPS ... que vous pouvez sélectionner ici:

Enter image description here

1
sapy

Mise à jour directe de votre fichier de configuration Git ( si vous ne souhaitez pas mémoriser de commandes fantaisies ):

Ouvrez votre fichier .git/config dans votre éditeur de texte préféré. Ce sera dans le dossier que vous avez cloné ou dans le référentiel dans lequel vous avez exécuté git init in. Allez dans ce référentiel. .git est un dossier caché, et en appuyant sur Ctrl + H devrait montrer le dossier caché, (ls -a dans le terminal).

Vous trouverez ci-dessous un exemple du fichier .git/config. Copiez et collez ces lignes et veillez à les mettre à jour avec vos informations Git.

[user]
        name = Tux
        email = [email protected]
        username = happy_feet

[remote "Origin"]
        url = https://github.com/happy_feet/my_code.git
        fetch = +refs/heads/*:refs/remotes/Origin/*

Modifiez la partie URL au format suivant pour SSH:

url = [email protected]:happy_feet/my_code.git

( Les formats ci-dessus ne changent pas avec divers serveurs distants Git tels que GitHub ou Bitbucket. C'est la même chose si vous utilisez Git pour le contrôle de version ):

Remarque: Pour vous connecter à un référentiel Git via SSH, vous devez ajouter votre clé publique SSH à votre serveur distant Git ( comme GitHub ou Bitbucket. Recherchez dans la page des paramètres les clés SSH ).

Pour savoir comment générer vos clés SSH, reportez-vous à: Création de clés SSH

1
Survesh Jones

Comme de nombreux utilisateurs l'ont dit, il vous suffit de changer l'URL de votre référentiel Git de HTTPS à SSH.

Si vous n'avez pas généré de clé SSH sur votre machine, vous devrez le faire.

Juste comme information supplémentaire, après avoir fait ce changement, j'entendais toujours la même erreur:

Permission refusée.

Dans mon cas, le problème était que j'utilisais Windows Shell pour exécuter la commande ngh; étant donné que cette commande devrait ouvrir une invite pour demander la phrase SSH et que Windows Shell n'ouvre pas ce type d'invites, l'authentification a tout simplement échoué.

Donc, il me suffisait d'ouvrir Git Shell et d'y exécuter la commande ngh, de mettre la phrase SSH dans l'invite chaque fois qu'il le demandait et "voilà" ... Cela a bien fonctionné!

0
Thisisalexis

Si vous utilisez Git (par exemple, Git Bash) sous Windows (et si vous ne souhaitez pas passer de HTTPS à SSH), vous pouvez également utiliser Git Credential Manager pour Windows

Cette application gardera le nom d'utilisateur et le mot de passe pour vous ...

0
boly38