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?
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 .
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) .
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
.
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.
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
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.
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>
où <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 connexionlocalhost: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.
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)
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 windowsmsysgit
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 commandessh-add
. - Télécharger la clé publique au serveur git.
- Change
remote.origin.url
of git repository tossh
style, E. ggit@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/*
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.
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.
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!
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.
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.
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
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
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!
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.
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.
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...