web-dev-qa-db-fra.com

TortoiseGit avec la clé openssh ne s'authentifie pas en utilisant ssh-agent

Je configure un environnement git sur Windows XP (msysGit 1.7.11, TortoiseGit 1.7.14) et j'essaie d'atteindre les points suivants:

  • connexion ssh sur un port différent de celui par défaut 22
  • authentification ssh gérée par ssh-agent

Je crée donc un fichier ~/.ssh/config :

Host gitbox
   User gitolite
   Hostname XX.XX.XX.XX
   Port 154
   PreferredAuthentications publickey
   IdentityFile "/c/Documents and Settings/kraymer/.ssh/id_rsa"

Lorsque vous utilisez la CLI git bash, tout fonctionne comme prévu.

Je me bats avec TortoiseGit.
J'ai d'abord installé TortoiseGit avec Plink et utilisé Pageant pour charger la clé privée ssh. L'authentification automatique (Pageant) a fonctionné mais la configuration a été un échec car TortoiseGit ne reconnaît pas l'url de git repos au format gitolite@gitbox/repo.git .

J'ai alors décidé d'installer TortoiseGit en utilisant le client openssh, afin que le fichier de configuration puisse être lu par le client ssh, et pour imiter la configuration git CLI.
J'ai choisi le ssh.exe livré avec msys git en tant que client ssh dans les paramètres de TortoiseGit.
Lorsque vous effectuez une git pull, l'URL distante est maintenant résolue mais le mot de passe est demandé pendant que je m'attends à ce que l'authentification automatique de ssh-agent se produise.

https://dl.dropbox.com/u/1026715/tortoisegit.png

Est-il possible de faire fonctionner TortoiseGit avec ssh-agent?
Ou informez-vous TortoiseGit (Plink) de . Ssh/config ?

Éditer # 1

En suivant les conseils de @VonC, j'ai configuré ma variable $ HOME.
Lorsque je clique sur Afficher les variables d'environnement dans TortoiseGit, j'ai maintenant:

 HOME=C:\Documents and Settings\kraymer  
 HOMEDRIVE=C: 
 HOMEPATH=\Documents and Settings\kraymer 

Mais git pull nécessite encore que je saisisse la phrase secrète.

34
kraymer

Aucun ajustement nécessaire.

Faites juste pointer TortoiseGit vers le même client ssh utilisé par git lui-même, voir la capture d'écran:

enter image description here

Ce devrait être C:\Program Files\Git\usr\bin\ssh.exe dans la dernière version de Git mentionnée par Aleksey Kontsevich dans les commentaires.

82
Haitham Sweilem

J'ai d'abord installé TortoiseGit avec Plink et utilisé Pageant pour charger la clé privée ssh. L'authentification automatique (Pageant) a fonctionné mais la configuration a échoué car TortoiseGit ne reconnaît pas l'url de git repos au format gitolite@gitbox/repo.git.

J'ai finalement trouvé une solution de contournement qui consiste à créer une session PuTTY avec le même nom que l'alias ssh (ie gitbox dans la question).
De cette façon, je peux cloner en tant que git clone gitbox/monrepo dans la CLI et la syntaxe Origin est correctement gérée par TortoiseGit.

4
kraymer

1) Cygwin

Utilisez l'approche décrite dans l'article suivant: https://help.github.com/articles/working-with-ssh-key-passphrases

Le mot de passe ne sera demandé qu'une seule fois au démarrage de la session cygwin. !!! Avant de quitter la session cygwin, n'oubliez pas de tuer le processus ssh-agent (utilisez ps pour trouver le processus PID et kill -9).

Nous utilisons une approche distincte pour cygwin, car cygwin, pour une raison quelconque, ne voit pas les processus démarrés en externe dans l'environnement Windows.

2, 3) MsysGit, TortoiseGit

Lien utile: http://dogbiscuit.org/mdub/weblog/Tech/WindowsSshAgent

Installez MsysGit. Installez TortoiseGit (cochez openssh au lieu de plink pendant l'installation). !!! Vérifiez les variables système. S'il y a une variable GIT_SSH présente - supprimez-la.

Allez dans TortoiseGit-> Paramètres-> Général

Définir le chemin Git exe vers/bin Définir le chemin de la DLL externe vers/mingw/bin

Allez dans TortoiseGit-> Settings-> Network Set SSH Client property to /bin/ssh.exe

Définissez la variable système SSH_AUTH_SOCKS = C:\temp.ssh-socket

Démarrez cmd.exe et exécutez les commandes suivantes (depuis que nous avons installé MsysGit, toutes les commandes suivantes sont accessibles dans cmd -/bin est ajouté à la variable PATH système):

# following command is required to execute for avoiding Address already bind message when ssh-agen is not started yet but .ssh-socket exists after previous agent session
rm "%SSH_AUTH_SOCK%"

# Starting ssh-agent
ssh-agent -a "%SSH_AUTH_SOCK%"

# Adding our openssh key
ssh-add "%USERPROFILE%\.ssh\id_rsa"

# Type password for your key

C'est ça. À partir de ce moment, vous pouvez exécuter git Push, git pull depuis TortoiseGit et MsysGit sans demander de phrase secrète.

Lorsque ssh-agent n'est plus requis, vous pouvez le supprimer via le gestionnaire de tâches Windows.

4
ydrozhdzhal

Aucune des réponses ci-dessus n'a fonctionné pour moi.

J'ai créé ce fichier batch pour résoudre le problème.

CALL "C:\Program Files\Git\cmd\start-ssh-agent.cmd"
SETX SSH_AUTH_SOCK "%SSH_AUTH_SOCK%"
SETX SSH_AGENT_PID "%SSH_AGENT_PID%"

Exécutez-le une fois et saisissez votre mot de passe.

Ensuite, vous pouvez utiliser tortoisegit avec openssh sans avoir à saisir votre mot de passe pour chaque opération.

3
Michael Marcin

Assurez-vous de lancer votre TortoiseGit dans un environnement où HOME est défini, et référencez le répertoire parent de .ssh.
Ceci est important car, sous Windows, HOME n'est pas défini par défaut.

Voir à titre d'exemple: " L'authentification échoue sous Windows XP avec git et tortoisegit ".
(Autres sources possibles: " Comment dire à Git pour Windows où trouver ma clé RSA privée? ")

2
VonC

Les explications ici étant un peu dépassées, j'ai décidé de poster ma solution.

J'utilise Git Bash et TortoiseGit 2.8.0 dans Windows 10, qui sont courants de nos jours.

J'ai mis ssh.exe en tant que client SSH dans Settings->Network comme expliqué dans les articles précédents.

J'ai créé un script avec les commandes suivantes, comme expliqué dans un commentaire précédent. Vous pouvez également définir une variable d'environnement HOME, au cas où votre système ne le ferait pas automatiquement. En supposant que votre domicile se trouve dans le lecteur H: \, vous pouvez ajouter les lignes suivantes:

SETX HOME /h
CALL "C:\Program Files\Git\cmd\start-ssh-agent.cmd"
SETX SSH_AUTH_SOCK "%SSH_AUTH_SOCK%"
SETX SSH_AGENT_PID "%SSH_AGENT_PID%"

J'ai ajouté le script en utilisant Win logo+R Shell:startup dans le dossier de démarrage. Alternativement, vous pouvez ajouter le script au registre pour garantir qu'il s'exécute avant d'autres processus:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run

Assurez-vous de taper exit pour fermer la console et autoriser la définition de la variable pour les processus futurs.

2
Sergio Roa

Il semble y avoir toute une gamme d'options pour résoudre ce problème. Comme aucun des éléments ci-dessus n'a fonctionné pour moi, j'ai pensé partager ce qui m'a aidé.

Capture d'écran: Paramètres réseau/Git SSH Client

Dans Settings... -> Network -> SSH -> SSH client, définissez le client sur C:\Program Files\TortoiseGit\bin\TortoiseGitPlink.exe. En utilisant Pageant, vous êtes ensuite automatiquement authentifié comme prévu, sinon vous êtes invité à saisir votre phrase secrète de clé privée. Assurez-vous que l'option "Autoload PuTTY Key" est cochée dans la boîte de dialogue Push.

2
Lupinity Labs