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?
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 .
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) .
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
.
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.
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
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
.
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.
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).
En outre, il peut prendre un paramètre de délai d'expiration optionnel comme ceci:
$ ssh-add -t <timeout>
où <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 .
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.
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)
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
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:
ssh-keygen
sous Linux, sous Windows msysgit
, fournissez des commandes similaires.~/.ssh
. Et ajoutez-le à l'agent ssh via la commande ssh-add
.remote.Origin.url
du référentiel Git par le style ssh
, par exemple, [email protected]:myaccount/myrepo.git
.Conseils:
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 /*
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.
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.
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.
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é!
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.
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
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.
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
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
Vous devez effectuer deux étapes -
git remote remove Origin
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:
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
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é!
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 ...