86 votes

Comment faire pour que git ne demande pas de phrase de passe pour la clé ssh ?

Je suis en train d'utiliser git bash et j'ai configuré la clé ssh en utilisant ssh-keygen et à chaque fois que je fais quelque chose avec un repo git me demande la phrase de passe pour /c/Users/jankiewj/.ssh/id_rsa . Y a-t-il un moyen de désactiver cette phrase de passe ?

EDIT: J'ai modifié le titre original (en supprimant Windows) car je viens d'utiliser une nouvelle installation d'Ubuntu sur mon ordinateur portable de travail et lorsque la clé ssh a une phrase de passe, elle la demande toujours et la solution pour résoudre ce problème est la même. Cela fonctionne probablement de la même manière sur MacOSX qui est aussi Unix et utilise les mêmes outils de base.

110voto

jcubic Points 2473

Vous pouvez l'exécuter dans git bash, Windows WLS ou bash sur un vrai GNU/Linux.

eval `ssh-agent -s`
ssh-add ~/.ssh/*_rsa

il demandera la phrase de passe dans la deuxième commande, et c'est tout. Chaque action supplémentaire que vous aurez à faire (qui nécessitait auparavant la phrase de passe) ne vous demandera pas la phrase de passe (voir un exemple dans la capture d'écran ci-dessous) :

adding pass phrase in git bash on Windows

30voto

velval Points 423

Un peu mieux et solution permanente est de lancer automatiquement l'agent ssh lors de l'ouverture de git bash sous Windows. Vous pouvez copier/coller le texte ci-dessous dans votre .profile ou .bashrc. Je préfère le mettre dans le répertoire .profil

env=~/.ssh/agent.env

agent_load_env () { test -f "$env" && . "$env" >| /dev/null ; }

agent_start () {
    (umask 077; ssh-agent >| "$env")
    . "$env" >| /dev/null ; }

agent_load_env

# agent_run_state: 0=agent running w/ key; 1=agent w/o key; 2= agent not running
agent_run_state=$(ssh-add -l >| /dev/null 2>&1; echo $?)

if [ ! "$SSH_AUTH_SOCK" ] || [ $agent_run_state = 2 ]; then
    agent_start
    ssh-add
elif [ "$SSH_AUTH_SOCK" ] && [ $agent_run_state = 1 ]; then
    ssh-add
fi

unset env

Cette solution a été prise à partir de cet article d'aide de github

1voto

Eli_B Points 79

Je ne suis pas sûr de vouloir le recommander, mais lorsque vous créez la clé et qu'il vous est demandé de définir un mot de passe, appuyez simplement sur la touche Entrée et ignorez le mot de passe.

Consultez ce lien pour savoir comment utiliser le système. ssh-keygen : https://help.github.com/articles/working-with-ssh-key-passphrases/

Peut-être ssh-agent peut vous aider d'une manière ou d'une autre. Mais je ne suis pas sûr sans connaître votre système actuel.

1voto

JBSnorro Points 176

TDLR : Pour les utilisateurs de Windows,

  • exécuter ssh-add "C:\\Users\\<your user>/.ssh/id_rsa"
  • no ssh-add ~/.ssh/id_rsa

Par exemple, je vois cela tout le temps :

$ ssh-add ~/.ssh/id_rsa
Enter passphrase for /c/Users/User/.ssh/id_rsa: 
Identity added: /c/Users/User/.ssh/id_rsa (/c/Users/User/.ssh/id_rsa)

$ git pull
Enter passphrase for key 'C:\Users\User/.ssh/id_rsa': 

Notez les séparateurs de chemin incohérents : l'agent ssh convertit ~ en utilisant les séparateurs de chemin Unix, mais git utilise plutôt les séparateurs de chemin Windows. Étant donné que le chemin du fichier id_rsa est utilisé comme clé, ceci explique pourquoi le cache est manqué.

  • Une autre différence est C:/ au lieu de /c/
  • Remarque connexe : Lorsque git vous demande la phrase de passe, celle-ci n'est pas mise en cache, vous pouvez donc la saisir indéfiniment. Essayez de passer la phrase à ssh-add seulement.
  • Sous Windows, supposez que ~ est "multivaluée", il est donc préférable d'être explicite.
  • ssh-add regarde les emplacements par défaut comme ~/.ssh/id_rsa . Sous Windows, supposez que c'est ambigu. Passez explicitement le chemin formaté au lieu de vous fier aux chemins par défaut :
    • ssh-add "C:\\Users\\<your user>/.ssh/id_rsa" c'est-à-dire dans la réponse de @velval également.

0voto

Javier Points 101

Porte-clés est un programme qui permet de faire ce travail intelligemment.

Il doit être lancé à partir du fichier .bashrc (ou équivalent) et il configurera l'environnement correctement, sans autre configuration que les clés qu'il doit charger.

C'est ce que j'utilise : keychain --quiet key1.pem key2.pem

Il se rend compte que le Shell est Zsh et cela a fonctionné exactement de la même manière lorsque j'ai utilisé Bash.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X