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

j'ai cloné un dépôt git de mon compte Github à mon PC.

je veux travailler avec mon PC et mon ordinateur portable, mais avec un seul compte Github.

quand j'essaie de pousser ou tirer de Github en utilisant mon PC, il nécessite nom d'utilisateur et mot de passe, mais pas en utilisant l'ordinateur portable!

Je ne veux pas taper mon nom d'utilisateur et mon mot de passe chaque fois que j'interagis avec origin. Ce que je suis en manque ici?

1102
demandé sur Eric Leschinski 2011-07-04 00:25:17

19 réponses

une erreur courante est le clonage par défaut (HTTPS) au lieu de SSH. Vous pouvez corriger cela en allant dans votre dépôt, en cliquant sur "Cloner ou télécharger", puis en cliquant sur le bouton" Utiliser SSH "au-dessus du champ URL et en mettant à jour l'URL de votre télécommande d'origine comme ceci:

git remote set-url origin git@github.com:username/repo.git

ceci est documenté à GitHub: commutation des URL distantes de HTTPS à SSH .

1612
répondu Tekkub 2018-05-12 22:14:48

Permanence de l'authentification avec dépôts Git,

exécuter la commande suivante pour activer cache de justificatifs :

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

Username for 'https://github.com': <USERNAME>
Password for 'https://USERNAME@github.com': <PASSWORD>

l'utilisation doit également préciser caching expire ,

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

après avoir activé la mise en cache des justificatifs d'identité, il sera mis en cache pour 7200 secondes (2 heures) .

188
répondu Jay Patel 2017-08-22 08:23:26

je viens de rencontrer le même problème, et la solution la plus simple que j'ai trouvée était d'utiliser L'URL SSH au lieu de HTTPS one:

ssh://git@github.com/username/repo.git

et non ceci:

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

vous pouvez maintenant valider avec juste le SSH Key au lieu du username et password .

112
répondu Anton Salikhmetov 2012-07-19 06:23:49

en plus de changer pour SSH, vous pouvez également continuer à utiliser HTTPS, si vous ne vous gênez pas pour mettre votre mot de passe en texte clair. Mettez ceci dans votre ~/.netrc et il ne vous demandera pas votre nom d'utilisateur/mot de passe (au moins sur Linux et Mac):

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

ajout (voir le 2e commentaire de VonC): sur Windows, le nom du fichier est %HOME%\_netrc .

aussi lire le premier commentaire de VonC dans le cas où vous voulez crypter.

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 .

Cache de votre github mot de passe dans git à l'aide des informations d'identification d'assistance :

si vous clonez des dépôts GitHub en utilisant HTTPS, vous pouvez utiliser un l'aide aux justificatifs d'identité pour dire à Git de se souvenir de votre nom d'utilisateur GitHub et mot de passe à chaque fois qu'il parle à GitHub.

cela fonctionne aussi sur Linux, Mac et Windows.

108
répondu rintcius 2015-08-16 11:49:06

pour les non-initiés qui sont confus par les réponses précédentes, vous pouvez faire:

git remote -v

qui répondra quelque chose comme

origin  https://yourname@github.com/yourname/yourrepo.git (fetch)
origin  https://yourname@github.com/yourname/yourrepo.git (push)

alors vous pouvez exécuter la commande beaucoup d'autres ont suggéré, mais maintenant vous connaissez votre nom et votre réponse d'en haut, donc vous pouvez simplement couper et coller yourname/yourrepo.git d'en haut dans

git remote set-url origin git@github.com:yourname/yourrepo.git
72
répondu Davide 2014-02-13 17:22:07

si vous utilisez ssh et que votre clé privée est cryptée avec une phrase de passe, alors vous serez quand même invité à entrer la phrase de passe/Mot de passe pour la clé privée lorsque vous effectuez des opérations réseau avec Git comme push , pull , et fetch .

Utiliser ssh-agent pour enregistrer la clé privée phrase de passe/mot de passe

Si vous voulez éviter d'avoir à entrer votre mot de passe chaque fois, vous pouvez utiliser ssh-agent pour stocker vos justificatifs d'identité de clé privée une fois par session de terminal, comme je l'explique dans ma réponse ne pouvait pas ouvrir une connexion à votre agent d'authentification :

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

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

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

"1519350920 de" Tuer l'agent

lorsque vous avez terminé avec votre session de terminal, vous pouvez arrêter ssh-agent avec le drapeau de kill -k :

$ ssh-agent -k

comme expliqué dans le ssh-agent manuel :

-k

tuer l'agent courant (donné par la variable d'environnement SSH_AGENT_PID).

Timeout optionnel

aussi, il peut prendre un paramètre de timeout optionnel comme ainsi:

$ ssh-add -t <timeout>

<timeout> est du format <n>h pour <n> heures, <n>m pour <n> minutes, et ainsi de suite.

selon la ssh-agent manuel :

-t life

définit une valeur par défaut pour la durée de vie maximale des identités ajoutées pour l'agent. La durée de vie peut être spécifié en secondes ou en format temporel spécifié dans sshd_config(5) . Une durée de vie spécifiée pour une identité avec ssh-add(1) l'emporte sur cette valeur. Sans cette option la durée de vie maximale par défaut est pour toujours.

voir cette page pour plus de formats de temps .

avertissement de sécurité pour les utilisateurs de Cygwin

les utilisateurs de Cygwin doivent être au courant d'un risque potentiel de sécurité avec l'utilisation de ssh-agent dans Cygwin :

les gens devraient être conscients de la les dangers potentiels de l'agent ssh sous cygwin [1], bien que netstat et les portscan distants semble pas que le port spécifié dans /tmp/ssh-foo est accessible à tous ...?

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

et au lien Cité :

cependant, notez que les sockets de domaine unix de cygwin sont fondamentalement Insécurité et donc je fortement décourager utilisation de ssh-agent sous cygwin.

quand vous courez ssh-agent sous cygwin il crée la socket AF_UNIX /tmp/ssh-$USERNAME/ répertoire. sous cygwin, les sockets AF_UNIX sont: emulated via AF_INET sockets. vous pouvez facilement voir que si vous allez regarder dans le fichier /tmp/ssh-$USERNAME/agent-socket-* via notepad. vous verrez quelque chose comme

!<socket >2080

puis courir netstat -a et surprise! vous avez un programme d'écoute à port 2080. c'est ssh-agent. quand ssh reçoit RSA challenge de serveur, il se réfère à correspondant /tmp/ssh-$USERNAME/agent-socket-* (sous cygwin, dans notre cas, cela signifie que cela ouvrira la connexion localhost:2080 ) et demande à ssh-agent de traiter la contestation RSA avec clé privée il a, et ensuite il passe simplement la réponse reçue de ssh-agent à serveur.

sous unix, un tel scénario fonctionne sans problème, car le noyau unix vérifie les permissions quand le programme essaie D'accéder à la socket AF_UNIX. Pour Les sockets AF_INET, cependant, les connexions sont anonymes (lire "insécurité.)" Imaginez, que vous avez cygwin agent ssh en cours d'exécution. pirate malveillant peut portscan votre boîte, localisez le port ouvert utilisé par ssh-agent, ouvrir la connexion à votre serveur ssh, recevoir RSA challenge de lui, l'Envoyer à votre agent ssh via le port ouvert qu'il a trouvé, recevoir RSA réponse, l'envoyer au serveur ssh et voila, il s'est connecté avec succès à votre serveur que vous.

49
répondu Community 2017-05-23 12:18:29

Source: Configurer Git

la commande suivante sauvegardera 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 1 hour (setting is in seconds)
43
répondu Sagar Rakshe 2017-07-20 01:50:04

lorsque vous utilisez https pour git pull & push, il vous suffit de configurer remote.origin.url pour votre projet, pour éviter d'entrer le nom d'utilisateur (ou/et le mot de passe) chaque fois que vous poussez.

comment configurer remote.origin.url :

Url format:
    https://{username:password@}github.com/{owner}/{repo}

Parameters in url:
* username
    optional, the username to use when need authentication,
    if specified, no need to enter username again when need authentication,
    don't use email, use your username that has no "@", otherwise the url can't be parsed correctly,
* password
    optional, the password to use when need authentication,
    if specified, no need to enter password again when need authentication,
    tip:
        this value is stored as plain text, so for security concern, don't specify this param,
* 

e.g
    git config remote.origin.url https://eric@github.com/eric/myproject


@mise à jour-en utilisant 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.

Rough suit:

  • créer des clés ssh en utilisant la commande, E. g ssh-keygen sur linux, sur windows msysgit fournir des commandes similaires.
  • conserver la clé privée sur la machine locale au bon endroit, E. g ~/.ssh . Et l'ajouter à l'agent ssh via la commande ssh-add .
  • Télécharger la clé publique au serveur git.
  • Change remote.origin.url of git repository to ssh style, E. g git@gitlab.com:myaccount/myrepo.git
  • ensuite, quand tirer ou pousser, pas besoin d'entrer le nom d'utilisateur ou le mot de passe jamais.

Conseils:

  • si votre clé ssh possède une phrase de passe, vous devez la saisir lors de la première utilisation de la clé après chaque redémarrage de votre machine, par défaut.

@Update - Basculer entre les https et ssh protocole.

simplement changer remote.origin.url sera suffisant, ou vous pouvez éditer repo_home/.git/config directement pour changer la valeur (E. G en utilisant vi sous linux).

habituellement, j'ajoute une ligne pour chaque protocole, et commente l'un d'eux en utilisant # .

E. g

[remote "origin"]
        url = git@gitlab.com:myaccount/myrepo.git
        # url = https://myaccount@gitlab.com/myaccount/myrepo.git
        fetch = +refs/heads/*:refs/remotes/origin/*
28
répondu Eric Wang 2016-12-17 03:40:40

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

il suffit de suivre les instructions du github documentation officielle .

après avoir suivi les instructions du lien ci-dessus, vous devriez être en mesure de push/pull to/from your repo sans taper votre nom d'utilisateur/mot de passe à chaque fois.

15
répondu K M Rakibul Islam 2016-06-22 14:41:00

ce qui a fonctionné pour moi était d'éditer .git/config et utiliser

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

il va sans dire que c'est une façon peu sûre de stocker votre mot de passe, mais il y a des environnements/cas où cela peut ne pas être un problème.

5
répondu WoJ 2016-07-31 18:25:58

mise à jour pour HTTPS:

Github a lancé un nouveau programme Pour Windows qui stocke vos justificatifs d'identité lorsque vous utilisez HTTPS:

à utiliser:

télécharger le programme de ici

une fois que vous avez lancé le programme, il éditera votre fichier .gitconfig . Revérifiez s'il a édité le bon .gitconfig dans le cas où vous avez plusieurs d'entre eux. Si elle n'a pas modifier le corriger une, ajouter ce qui suit à votre .gitconfig

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

noter le saut de ligne après [credential] . Il est requis.

ouvrez votre client en ligne de commande et essayez git push origin master une fois. S'il vous demande un mot de passe, entrez-le et vous êtes fini. Mot de passe sauvés!

4
répondu Varun Achar 2013-04-05 06:02:00

vous avez essentiellement deux options.

Si vous utilisez le même utilisateur sur les deux machines, vous devez copier les .pub key à votre PC, donc github sait que vous êtes le même utilisateur.

Si vous avez créé un nouveau .pub file pour votre PC et que vous voulez traiter les machines comme des utilisateurs différents, vous devez enregistrer le nouveau .fichier pub sur le site github.

Si cela ne fonctionne toujours pas, il se peut que ssh n'est pas configuré correctement et que ssh ne trouve pas l'emplacement de vos clés. Essayez

ssh -vv username@github.com

pour savoir pourquoi SSH échoue.

4
répondu ralphtheninja 2013-12-19 00:41:34

Voici une autre option:

au lieu d'écrire

git push origin HEAD

vous pourriez écrire:

git push https://user:pass@yourrepo.com/path HEAD

évidemment, avec la plupart des shells, cela se traduira par un mot de passe mis en cache dans l'histoire, alors gardez cela à l'esprit.

3
répondu Lacho Tomov 2018-04-24 17:05:50

j'ai eu le même problème identique.

alors changez le .fichier git / config de mon projet

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

à

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

et ajouter la clé publique ssh au profil git qui est dans le cadre.

pour clé publique ssh

cat ~/.ssh/id_rsa.pub
2
répondu shrikant 2015-06-09 05:42:33

pour les utilisateurs de Git windows, après avoir lancé git config --global credential.helper store , s'il vous demande toujours le mot de passe, vous devriez vérifier où la configuration est écrite. en utilisant la commande

git config --list --show-origin

dans mon cas, modifier manuellement le fichier de configuration 'C:\Program fichiers\Git\mingw64\etc\gitconfig', en ajoutant le texte suivant , cela fonctionne.

[credential] helper = store

1
répondu Liang 2018-08-30 09:11:49

comme de nombreux utilisateurs l'ont dit, vous n'avez qu'à changer L'URL de votre dépôt git De https en SSH.

si vous n'avez pas généré de clé SSH dans votre machine, alors vous allez devoir le faire.

juste comme information supplémentaire, après avoir fait ce changement, je recevais toujours la même erreur: Permission refusée.

dans mon cas, le problème était que J'utilisais le Shell Windows pour exécuter la commande ngh; puisque ceci la commande devrait ouvrir un prompt pour demander la phrase SSH et le Shell Windows n'ouvre pas ce genre de prompt, l'authentification vient d'échouer.

donc, j'ai juste eu à ouvrir le shell git et exécuter la commande ngh là, mettre la phrase SSH dans l'invite chaque fois qu'il le demandait et"voilà"... Juste que cela fonctionne très bien!

0
répondu Thisisalexis 2018-04-03 14:16:35

si la touche SSH ou .netrc ne fonctionnait pas pour vous alors une autre solution simple mais moins sûre qui pourrait fonctionner pour vous est git-credential-store - Helper to store credentials on disk

git config --global credential.helper store

par défaut, les justificatifs d'identité seront enregistrés dans ~/.git-credentials . Il sera créé et écrit.

veuillez noter que l'utilisation de cet helper vous permettra de stocker vos mots de passe en clair sur le disque, protégés uniquement par les permissions du système de fichiers. Si cela peut ne pas être acceptable de sécurité de compromis.

0
répondu rumman0786 2018-04-12 10:12:41

vous devez effectuer 2 étapes -

1) git remote remove origin
2) git remote add origin git@github.com:NuggetAI/nugget.git

notez que l'url git est une url ssh et non une url https .. U pouvez sélectionner à partir d'ici.

enter image description here

0
répondu sapy 2018-06-11 20:58:15

si vous utilisez git (ex. git bash) sous les fenêtres (et si vous ne voulez pas passer de https à ssh)

vous pouvez aussi utiliser https://github.com/Microsoft/Git-Credential-Manager-for-Windows

cette application conservera votre nom d'utilisateur et votre mot de passe...

0
répondu boly38 2018-09-07 10:48:51