web-dev-qa-db-fra.com

Git continue à me demander un mot de passe

J'utilise Git depuis un moment maintenant, mais les demandes constantes de mot de passe commencent à me faire perdre la raison.

J'utilise OSX et Github, et j'ai configuré Git et mes clés SSH comme indiqué par la page Configurer Git de GitHub . J'ai également ajouté la clé SSH github à mon trousseau Mac OSX, comme indiqué à la page Mots de passe/phrases clés de la clé SSH de GitHub . Ma clé publique est enregistrée auprès de Git.

Néanmoins, chaque fois que j'essaie de tirer, je dois entrer mon nom d'utilisateur et mon mot de passe. Y a-t-il autre chose qu'une clé SSH que je dois configurer pour cela?

546
Catherine

Je pense que vous avez peut-être le mauvais URL git repo. 

Ouvrez .git/config et recherchez la section [remote "Origin"]. Assurez-vous que vous utilisez la variable SSH:

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

Vous pouvez voir l'URL ssh dans la page principale de votre rapport si vous cliquez sur clone or download et choisissez ssh

Et PAS le https ou git un:

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

Vous pouvez maintenant valider avec seulement le SSH Key au lieu des username et password

[Edit:] Si Git se plaint de 'Origin' has already been added, ouvrez le fichier .config et éditez la partie url = "..." après [remote Origin] comme url = ssh://github/username/repo.git

700
static_rtti

Configuration de credential.helper

Sous OS X (maintenant macOS), lancez-le dans le terminal

git config --global credential.helper osxkeychain

Cela permet à git d’utiliser Keychain.app pour stocker le nom d’utilisateur et le mot de passe, ainsi que pour récupérer le mot de passe composé sur votre clé ssh privée à partir du trousseau.

Pour les fenêtres utiliser: 

git config --global credential.helper wincred

Dépannage

Si l'assistant d'identification de git est correctement configuré, macOS enregistre la phrase secrète dans le trousseau. Parfois, la connexion entre ssh et les mots de passe stockés dans le trousseau peut être rompue. Exécutez ssh-add -K ou ssh-add ~/.ssh/id_rsa pour ajouter à nouveau la clé au trousseau.

macOS 10.12 Sierra change en ssh

Pour macOS 10.12, Sierra ssh-add -K doit être exécuté après chaque redémarrage. Pour éviter cela, créez ~/.ssh/config avec ce contenu.

Host *
   AddKeysToAgent yes
   UseKeychain yes
   IdentityFile ~/.ssh/id_rsa

À partir de la page ssh_configman du 10.12.2:

UseKeychain

Sous macOS, spécifie si le système doit rechercher des phrases secrètes dans le trousseau de l'utilisateur lorsqu'il tente d'utiliser une clé particulière. Lorsque la phrase secrète est fournie par l'utilisateur, cette option spécifie également si la phrase secrète doit être stockée dans le trousseau une fois qu'il a été vérifié qu'il est correct. L'argument doit être «oui» ou «non». La valeur par défaut est "non".

Apple a ajouté Technote 2449 qui explique ce qui s'est passé.

Avant macOS Sierra, ssh présentait une boîte de dialogue vous demandant votre phrase secrète et vous offrait la possibilité de la stocker dans le trousseau. Cette interface utilisateur a été obsolète il y a quelque temps et a été supprimée.

507
orkoden

Cela m'est arrivé lorsque j'ai mis à niveau vers macOS Sierra. On dirait que l'agent ssh a été effacé lors de la mise à niveau.

$ ssh-add -L
The agent has no identities.

Il suffit de lancer ssh-add pour localiser mon identité existante, entrer le mot de passe et recommencer.

118
amcc

Utilisez ceci: Remplacez github.com par le nom d'hôte approprié

git remote set-url Origin [email protected]:user/repo.git
60
Darrell Duane

Comme d'autres l'ont dit, vous pouvez installer un assistant de cache de mots de passe. Je voulais surtout juste poster le lien pour d'autres plateformes, et pas seulement pour Mac. J'utilise un serveur linux et cela m'a été utile: https://help.github.com/articles/caching-your-github-password-in-git/#platform-linux

Pour Mac:

git credential-osxkeychain

Les fenêtres:

git config --global credential.helper wincred

Linux:

git config --global credential.helper cache
git config --global credential.helper 'cache --timeout=3600'
# Set the cache to timeout after 1 hour (setting is in seconds)
36
Chase Roberts

Cherchez aussi qui vous demande la phrase secrète. Est-ce git ou votre agent SSH?

Dans mon cas, chaque fois que je faisais git pull, il me demandait:

Enter passphrase for key '/work/username/.ssh/id_rsa':

J'ai donc supposé qu'il s'agissait d'une demande de mot de passe. J'ai donc continué à chercher des solutions, pour finalement me rendre compte que mon agent SSH était à l'arrêt. Ce qui peut être corrigé en utilisant eval $(ssh-agent) et ssh-add comme donné ici.

De plus, je colle ci-dessous un petit extrait que vous pouvez ajouter à votre ~/.bashrc (ou l’équivalent) pour vous assurer que votre agent ssh est démarré avec votre connexion. 

Quoi qu’il en soit, c’est une erreur idiote que j’ai commise, mais le poster ici, au cas où cela permettrait à quelqu'un d’économiser du temps, comme je l’ai fait.

# start the ssh-agent
function start_agent {
    echo "Initializing new SSH agent..."
    # spawn ssh-agent
    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > ${SSH_ENV}
    echo succeeded
    chmod 600 ${SSH_ENV}
    . ${SSH_ENV} > /dev/null
    /usr/bin/ssh-add
}

if [ -f "${SSH_ENV}" ]; then
     . ${SSH_ENV} > /dev/null
     ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
        start_agent;
    }
else
    start_agent;
fi

17
mithunpaul
git config credential.helper store

Remarque: bien que cela soit pratique, Git stockera vos identifiants en texte clair dans un fichier local (.git-credentials) dans le répertoire de votre projet (voir ci-dessous le répertoire "home"). Si vous n'aimez pas cela, supprimez ce fichier et passez à l'option cache.

Si vous voulez que Git recommence à vous demander des informations d'identification chaque fois qu'il doit se connecter au référentiel distant, vous pouvez exécuter cette commande:

git config --unset credential.helper

Pour stocker les mots de passe dans .git-credentials dans votre répertoire% HOME%, par opposition au répertoire du projet: utilisez l'indicateur --global.

git config --global credential.helper store
10
Lokesh S

Guide de Git sur Windows et Github utilisant SSH pour Push/Pull http://nathanj.github.io/gitguide/tour.html

  1. Téléchargez et installez PuTTY
  2. Définissez la variable d’environnement 'GIT_SSH' = 'chemin\vers\plink.exe' (dans le dossier PuTTY installé) - TRÈS IMPORTANT !!!
  3. REDÉMARREZ WINDOWS Explorer pour que les variables Env prennent effet (impossible de redémarrer l'invite de commande)
  4. Exécutez puttygen.exe pour générer une nouvelle clé, copiez la clé PUBLIC sur le site Github.
  5. Enregistrez cette nouvelle clé privée dans un endroit sûr sur le disque (de préférence, pas dans Dropbox)
  6. Exécutez PuTTY.exe et connectez SSH à github.co
  7. Accédez rapidement au dossier de démarrage en exécutant "Shell: startup" . 8 Faites démarrer votre clé privée avec windows via pageant. Créez un raccourci dans le dossier de démarrage avec la syntaxe "chemin\to\pageant.exe" "chemin\to\clé privée"
  8. Nous n'avons pas besoin de définir le paramètre 'puttykeyfile' dans .git/config de notre dépôt
  9. TRES IMPORTANT est que "l'URL de clone SSH" de Github est utilisé et non Https
9
Francois

Dans Windows pour git 1.7.9+, exécutez la commande suivante dans la commande Invite pour ouvrir le fichier de configuration dans l'éditeur de texte:

    git config --global --edit

Ensuite, dans le fichier, ajoutez le bloc suivant s'il n'est pas présent ou modifiez-le en conséquence

    [credential "https://giturl.com"]
        username = <user id>
        helper = wincred

Enregistrez et fermez le fichier . Vous devrez fournir les informations d'identification une seule fois après la modification ci-dessus.

8
Rohan

Utilisez la commande suivante pour augmenter le délai d'expiration afin de pouvoir retaper le mot de passe pendant un certain temps.

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

Je l'ai utilisé pour Bitbucket et Github cela fonctionne pour les deux. La seule chose que vous devez faire est que 3600 est en secondes, augmentez-le dans la mesure de votre choix. Je l'ai changé en 259200, ce qui représente environ 30 jours. De cette façon, je ressaisis mon mot de passe tous les 30 jours environ.

6
Ravi Kumar

Je suppose que vous avez réglé votre problème, mais je ne vois pas la solution qui m’a aidé, alors la voici.

Tapez le terminal:

echo "" > ~/.ssh/known_hosts

Cela videra votre fichier known_hosts et vous devrez ajouter chaque hôte que vous avez utilisé et auquel vous vous êtes connecté, mais le problème a été résolu.

4
papan

Comme dit static_rtti ci-dessus, changez 

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

à 

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

J'ai moi-même changé le https dans le fichier .git/config en ssh, mais cela ne fonctionnait toujours pas. Ensuite, j'ai vu que vous DEVEZ changer github.com en [email protected]. Un bon moyen d’obtenir l’URL correcte est d’aller sur la page de votre projet et de cliquer dessus. 

Modifiez HTTPS en SSH pour obtenir la bonne URL

Ajoutez ensuite cette URL au fichier de configuration. 

3
CheesusCrust

la réponse d'Orkoden sur l'utilisation du trousseau avec git dans votre terminal était incomplète et soulevait des erreurs. Voici ce que vous devez faire pour enregistrer le nom d'utilisateur et le mot de passe que vous entrez dans le terminal de votre trousseau:

curl http://github-media-downloads.s3.amazonaws.com/osx/git-credential-osxkeychain -o git-credential-osxkeychain
Sudo mv git-credential-osxkeychain /usr/local/bin
Sudo chmod u+x /usr/local/bin/git-credential-osxkeychain

Puis entrez

git config --global credential.helper osxkeychain

Si vous avez déjà fait la partie avec git config avant les choses curl, ce n'est pas grave, ça va marcher

3
Lukas

Je suis d'accord avec "codehugger" et en utilisant l'instruction de "orkoden" cela a fonctionné pour moi - sur netbeans 7.3 - lorsque vous cliquez avec le bouton droit de la souris sur le fichier et sélectionnez le menu contextuel - Push - une fenêtre "Push to remote" s'ouvre options ici 

  1. Origin:https://github.com/myaccount/myproject.git/

  2. https://github.com/myaccount/myproject.git/

Comme vous pouvez le constater, la différence réside dans le paramètre Origin de l'URL - vous ne souhaitez pas choisir cette option (1), vous souhaitez cocher l'option (2), ce qui me convient parfaitement. J'espère que cela aidera quelqu'un.

Dung Le.

2
Dung

Etape 1: vérifiez votre configuration actuelle

cat .git/config

Tu auras: 

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
    precomposeunicode = true
[remote "Origin"]
    url = https://github.com/path_to_your_git.git
    fetch = +refs/heads/*:refs/remotes/Origin/*
[user]
    name = your_username
    email = your_email
[branch "master-staging"]
    remote = Origin
    merge = refs/heads/master-staging

Étape 2: supprimez votre origine à distance

git remote rm Origin

Etape 3: ajoutez l’origine à distance avec votre nom d’utilisateur et votre mot de passe

git remote add Origin https://your_git_username:[email protected]/path_to_your_git.git
2
Haimei

Avant de pouvoir utiliser votre clé avec github, suivez cette étape dans le tutoriel Test de votre connexion SSH :

$ ssh -T [email protected]
# Attempts to ssh to GitHub
1
Jonny

Si vous utilisez Windows et que cela a soudainement commencé à se produire à l'improviste sur GitHub, c'est probablement dû au récent désactivation du support _ de Github pour les algorithmes cryptographiques déconseillés le 2018-02-22, auquel cas la solution est simplement pour télécharger et installer la dernière version de Git pour Windows ou simplement de Git Credential Manager pour Windows .

1
stovroz

Si Git vous invite à entrer un nom d'utilisateur et un mot de passe chaque fois que vous essayez d'interagir avec GitHub, vous utilisez probablement l'URL de clone HTTPS de votre référentiel.

L'utilisation d'une URL distante HTTPS présente certains avantages: elle est plus facile à configurer que SSH et fonctionne généralement avec des pare-feu et des serveurs proxy strictes. Cependant, il vous invite également à saisir vos informations d'identification GitHub chaque fois que vous extrayez ou poussez un référentiel.

Vous pouvez configurer Git pour stocker votre mot de passe pour vous. Pour les fenêtres :

git config --global credential.helper wincred
1
Emiliano Schiano

Il existe différents types d'authentification en fonction de votre configuration. En voici quelques uns:

  1. git credential-osxkeychain.

    Si vos informations d'identification sont invalides, supprimez-les en:

    git credential-osxkeychain erase
    

    ou:

    printf "protocol=https\nhost=github.com\n" | git credential-osxkeychain erase
    

    Donc, git ne vous demandera plus la permission du trousseau. Puis configurez-le à nouveau.

    Voir: Mise à jour des informations d'identification à partir du trousseau OSX sur GitHub

  2. Votre clé SSH RSA.

    Pour cela, vous devez comparer votre clé SSH avec ce que vous avez ajouté, vérifiez par ssh-add -L/ssh-add -l si vous utilisez la bonne identité.

  3. Votre authentification HTTPS (si vous utilisez le protocole https au lieu du protocole ssh).

    Utilisez ~/.netrc (%HOME%/_netrc sous Windows) pour fournir vos informations d'identification, par exemple.

    machine stash1.mycompany.com
    login myusername 
    password mypassword
    

    En savoir plus: Synchroniser avec GitHub at SO

1
kenorb

avoir une faute de frappe dans l'URL obligera git à vous demander un nom d'utilisateur et un mot de passe, stupide git

testé sur Linux Kali, version 2.7.0 de Git

essayer:

git clone https://github.com/thisrepodoesntexists/doesntexists.git

1

Je me sens comme la réponse fournie par static_rtti est hacky dans un certain sens. Je ne sais pas si cela était disponible plus tôt, mais les outils Git fournissent maintenant le stockage des informations d'identification.

Mode cache

$ git config --global credential.helper cache

Utilisez le mode «cache» pour conserver les informations d’identité en mémoire pendant un certain temps. Aucun des mots de passe n'est jamais stocké sur le disque et ils sont purgés du cache après 15 minutes.

Mode magasin

$ git config --global credential.helper 'store --file ~/.my-credentials'

Utilisez le mode "magasin" pour enregistrer les informations d'identification dans un fichier texte sur disque, et elles n'expirent jamais. 

J'ai personnellement utilisé le mode store. Supprimé mon repo, le cloné et devait ensuite entrer mes informations d'identification une fois. 

Référence: https://git-scm.com/book/en/v2/Git-Tools-Credential-Storage

0
Ducktales