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?

Rogach
la source

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.

Roberto Bonvallet
la source
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

Kyle Clegg
la source
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
Darryl Young
la source
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
Roland
la source
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

IgorGanapolsky
la source
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!

11101101b
la source
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.

Jeff Welling
la source
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
Stephen Harris
la source
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

alx alouette
la source
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 [email protected]:user/myrepo.git
git remote -v // check if remote is changed
Darkov
la source