Git ne cesse de me demander ma phrase secrète de clé ssh


538

J'ai créé des clés comme indiqué dans le didacticiel github, les ai enregistrées avec github et j'ai essayé d'utiliser ssh-agent explicitement - pourtant git continue de me demander ma phrase secrète chaque fois que j'essaye de faire un pull ou un push.

Quelle pourrait-être la cause?


Réponses:


1039

Une fois que vous avez démarré l'agent SSH avec:

eval $(ssh-agent)
  1. Vous devez y ajouter votre clé privée:

    ssh-add
    

    Cela vous demandera votre mot de passe une seule fois, puis vous devriez être autorisé à pousser, à condition que vous ayez téléchargé la clé publique sur Github.

  2. Pour enregistrer la clé de façon permanente sur macOS:

    ssh-add -K  
    

    Cela le conservera une fois que vous le fermerez et le rouvrirez en le stockant dans le trousseau de l'utilisateur.


16
déconnectez-vous du serveur, reconnectez-vous ssh, exécutez-le git pull, demandez-moi à nouveau le mot de passe.
cyber8200

35
ssh-add -Kle conservera après la fermeture et le rouvrira en le stockant dans le trousseau de l'utilisateur.
Kirk

72
@Kirk ssh-add -Kdonne ce qui suit:unknown option -- K usage: ssh-add [options] [file ...] Options: -l List fingerprints of all identities. -L List public key parameters of all identities. -k Load only keys and not certificates. -c Require confirmation to sign using identities -t life Set lifetime (in seconds) when adding identities. -d Delete identity. -D Delete all identities. -x Lock agent. -X Unlock agent. -s pkcs11 Add keys from PKCS#11 provider.
Sandeep C

13
Je reçois toujours un mot de passe quand même.
IgorGanapolsky

21
-Kest spécifique à la pomme. Voir help.github.com/articles/…
bkdir

238

Cela m'est arrivé après les redémarrages depuis la mise à niveau d'OS X El Capitan (10.11) vers macOS Sierra (10.12). lessh-add solution a fonctionné temporairement mais ne persisterait pas lors d'un autre redémarrage.

La solution permanente était de modifier (ou créer) ~/.ssh/configet d'activer l' UseKeychainoption.

Host *
    UseKeychain yes

CONNEXES: macOS continue de demander ma phrase de passe ssh depuis que j'ai mis à jour vers Sierra


1
travaillé pour moi merci ... je l'avais fait ... ssh-add -K /Users/***/.ssh/git/id_rsamais il ne fonctionnait toujours pas après le redémarrage du terminal ... merci.
nawlbergs

2
Vous voulez pourquoi cela se produit? Lire la note technique sur les changements d'OpenSSH developer.apple.com/library/content/technotes/tn2449/…
samwize

62

Si vous avez essayé ssh-addet que vous êtes toujours invité à saisir votre phrase secrète, essayez d'utiliser ssh-add -K. Cela ajoute votre phrase secrète à votre trousseau.

Mise à jour: si vous utilisez macOS Sierra, vous devrez probablement faire une autre étape, car ce qui précède pourrait ne plus fonctionner. Ajoutez ce qui suit à votre ~/.ssh/config:

Host *
  UseKeychain yes

2
Me demande toujours une phrase secrète.
IgorGanapolsky

@IgorGanapolsky Utilisez-vous macOS Sierra? Si oui, vérifiez ce que je viens d'ajouter à la réponse. J'espère que ça aide.
Darryl Young

2
Oui, je suis sur Sierra. Cependant, voici la ligne qui a fonctionné a fonctionné pour moi aussi: AddKeysToAgent oui
IgorGanapolsky

1
Cela fonctionne également avec BitBucket Cloud. J'avais des problèmes dans GitKraken et cela a résolu mes problèmes.
Malachie

54

J'essaierais ce qui suit:

  1. Démarrez GitBash
  2. Modifiez votre ~/.bashrcfichier
  3. Ajoutez les lignes suivantes au fichier

SSH_ENV=$HOME/.ssh/environment

# 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
  1. Enregistrez et fermez le fichier
  2. Fermer GitBash
  3. Rouvrir GitBash
  4. Entrez votre phrase secrète

4
Pour référence future, cela fonctionne également avec zsh. Ajoutez simplement ceci à.zshrc
Arda

2
Je crois que cela suppose que votre fichier de clés est appelé id_rsa. Si vous avez un nom personnalisé, vous devez utiliser par exemple. /usr/bin/ssh-add ~/.ssh/custom_filename
Juha Untinen

2
Pouvez-vous expliquer ce qui est arrivé à ce script?
LeeR

2
@Lee il démarre l'agent ssh s'il n'est pas déjà en cours d'exécution, c'est ce qui fait en sorte de ne pas vous demander la phrase secrète ssh à chaque push (plus ou moins).
Roland

Cela exécute simplement ssh-agent et ajoute la clé à chaque connexion. Vous devez toujours saisir votre mot de passe à chaque connexion. Ainsi, par exemple, si vous avez des scripts ssh-ing et exécutez des commandes GIT, ce n'est malheureusement pas du tout utile.
trainoasis


27

Essayez d'ajouter ceci à votre ~ / .ssh / config :

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

... en supposant que votre clé privée est nommée id_rsa


11
UseKeychain yes est uniquement valable pour mac
Oz123

3
@ Oz123 quel est l'équivalent pour windows
IgorGanapolsky

@ Oz123 Je pense que l'équivalent sur Windows est AddKeysToAgent oui vérifiez cette réponse stackoverflow.com/questions/52423626/…
fedeteka

6

J'ai eu un problème similaire, mais les autres réponses n'ont pas résolu mon problème. Je pensais que j'irais de l'avant et publierais ceci juste au cas où quelqu'un d'autre aurait une configuration délicate comme moi.

Il s'avère que j'avais plusieurs clés et Git utilisait d'abord la mauvaise. Cela m'inviterait à saisir ma phrase secrète, et je la saisirais, puis Git utiliserait une clé différente qui fonctionnerait (sur laquelle je n'avais pas besoin de saisir la phrase secrète).

Je viens de supprimer la clé qu'il utilisait pour me demander une phrase secrète et maintenant ça marche!


5

Il semble que vous ayez des problèmes avec SSH-Agent lui-même. J'essaierais de résoudre ce problème.

1) Avez-vous fait ssh-add pour ajouter votre clé à SSH?

2) Fermez-vous la fenêtre du terminal entre les utilisations, car si vous fermez la fenêtre, vous devrez saisir à nouveau le mot de passe lorsque vous le rouvrirez.


2
Ce serait bien d'ajouter des informations sur la façon de résoudre le premier problème Jeff Welling.
ranu

5

Si les solutions ci-dessus ne fonctionnent pas pour moi, une chose à vérifier est que vous avez également la clé publique (généralement id_rsa.pub). C'est inhabituel de ne pas le faire, mais c'était la cause pour moi.

Pour créer votre clé publique à partir de votre clé privée:

ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub

1

J'essaie différentes solutions mais rien n'y fait. Mais ces étapes ( mon environnement GitBash SSH me demande toujours ma phrase secrète, que puis-je faire? ) À partir des coutures Bitbucket.com fonctionnent bien:

L'idée est:

  1. vous créez un ~/.bashrcfichier

  2. ajouter un script de suivi:

    SSH_ENV=$HOME/.ssh/environment
    
    # 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
    
  3. relancez Bash


1

Une autre solution possible qui n'est pas mentionnée ci-dessus est de vérifier votre télécommande avec la commande suivante:

git remote -v

Si la télécommande ne démarre pas avec git mais commence par https, vous pouvez la changer en git en suivant l'exemple ci-dessous.

git remote -v // origin is https://github.com/user/myrepo.git
git remote set-url origin git@github.com:user/myrepo.git
git remote -v // check if remote is changed
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.