Git dans Powershell disant 'Impossible de trouver l'agent ssh'

97

J'ai installé git et cela fonctionne très bien dans l'invite de commande, mais lorsque j'ouvre PowerShell, cela me donne cet avertissement:

WARNING: Could not find ssh-agent

J'ai un concours en cours d'exécution et chargé avec ma clé privée. Cela fonctionne dans tous les outils d'interface graphique et l'invite de commande, mais pas dans Powershell.

Que se passe-t-il?

Khalid Abuhakmeh
la source
1
Cela pourrait-il %PATH%être différent pour une raison quelconque?
Jonas Heidelberg
1
Le lien de @ rohancragg dit essentiellement ajouter: $env:path += ";" + (Get-Item "Env:ProgramFiles(x86)").Value + "\Git\bin"en haut de votre fichier PROFILE (utilisez la commande PS ise $PROFILEpour ouvrir le PROFILE pour le modifier)
Toby
désolé de ne pas expliquer - haacked dit: "il n'a pas pu trouver l'exécutable" ssh-agent.exe ". Ce fichier se trouve dans C: \ Program Files (x86) \ Git \ bin. mais ce dossier n'est pas automatiquement ajouté à votre PATH par msysgit "
rohancragg
Je suggère que cette réponse est maintenant préférable aux conseils du post piraté:
rohancragg

Réponses:

137

Pour ceux qui recherchent une explication détaillée, lisez ce billet de blog . Vous trouverez ci-dessous une citation du billet de blog. En fin de compte, les ssh-agent.exebesoins doivent être sur le chemin, ou résolus d'une autre manière.

EDIT: Il semble que la plupart des gens ne prennent pas la peine de lire le blog lié et que l'extrait original ne citait pas la solution complète, j'ai donc développé la citation du blog ci-dessous.

Il existe de nombreuses façons de résoudre l'erreur, en fonction des préférences de toutes les autres réponses. Un connu pour fonctionner est cité ci-dessous. Parcourez d'autres réponses, elles peuvent être plus appropriées pour vous.

Lorsque j'ai redémarré mon invite PowerShell, il m'a dit qu'il ne pouvait pas démarrer l'agent SSH.

Il s'avère qu'il n'a pas pu trouver l'exécutable «ssh-agent.exe». Ce fichier se trouve dans C: \ Program Files (x86) \ Git \ bin. mais ce dossier n'est pas automatiquement ajouté à votre PATH par msysgit.

Si vous ne souhaitez pas ajouter ce chemin à votre système PATH, vous pouvez mettre à jour votre script de profil PowerShell afin qu'il s'applique uniquement à votre session PowerShell. Voici le changement que j'ai fait.

$ env: chemin + = ";" + (Get-Item "Env: ProgramFiles (x86)"). Valeur + "\ Git \ bin"

Sur ma machine, ce script se trouve sur: C: \ Users \ Haacked \ Documents \ WindowsPowerShell \ Microsoft.Powershell_profile.ps1

Taras Alenin
la source
2
Cela devrait vraiment être la réponse!
caveman_dick
C'est la bonne réponse. La réponse acceptée suppose que TortoiseGit ou TortoiseHg est installé. Comme le souligne cette réponse, tout ce dont vous avez besoin pour résoudre le problème est Msysgit.
Carl
3
Ugggh ajouter ce répertoire à PATH m'a mis mal à l'aise ... il a toutes sortes de .exes avec des noms génériques en conflit avec les commandes de Windows. J'espère que ça ne me mordra pas dans le cul un jour.
Salman von Abbas
4
@SalmanPK: non seulement cela me met mal à l'aise, mais c'est aussi explicitement déconseillé par les responsables de Git. Et dans mon cas, cela a cassé la ligne de commande PowerShell.
skolima
10
Pour moi, ssh-agent.exeétait en fait situé dans le \Git\usr\bindossier.
Ben Wilde
53

Vous pouvez ajouter deux lignes en haut de votre profil (type ise $profile) pour résoudre ce problème PoshGit sans polluer votre chemin. Ensuite, exécutez . $profilepour recharger votre profil.

Pour git 32 bits

Set-Alias ssh-agent "${env:ProgramFiles(x86)}\git\bin\ssh-agent.exe"
Set-Alias ssh-add "${env:ProgramFiles(x86)}\git\bin\ssh-add.exe"

Pour git 64 bits

Set-Alias ssh-agent "$env:ProgramFiles\git\usr\bin\ssh-agent.exe"
Set-Alias ssh-add "$env:ProgramFiles\git\usr\bin\ssh-add.exe"
Brianary
la source
3
n'oubliez pas de courir . $profilepour recharger votre profil
northben
2
L'utilisation de New-Alias ​​a causé des problèmes lorsque j'ai essayé de courir. $ profile plusieurs fois (pour d'autres changements). Utilisez plutôt Set-Alias, et cela fonctionnait beaucoup mieux.
Randall Borck
1
Merci @RandallBorck et @northben! Suggestions incorporées.
brianary
3
Avec l'avènement du git 2.5 64 bits (publié hier), ces alias devront être mis à jour pour pointer vers ${env:ProgramFiles}\git\usr\bin\les systèmes 64 bits.
Chester Husk
Cela devrait être la réponse acceptée. Personne ne veut bousiller leur chemin.
jebar8
17

Si vous utilisez posh-git et obtenez cet avertissement, vous pouvez le désactiver en commentant (en ajoutant un signe '#' à) la ligne suivante

Start-SshAgent -Quiet

Dans le fichier

Documents\WindowsPowerShell\Modules\posh-git\profile.example.ps1
Ahmed
la source
5
En prime, si vous n'avez pas besoin / voulez du support SSH, et que vous avez un lancement très lent de PowerShell, même avec l'ajout du correctif PATH ssh-agent.exe, commenter cette ligne accélère le lancement d'une tonne.
MechEthan
17

Je l'ai compris. Vous devez définir GIT_SSHla variable d'environnement sur votre machine pour qu'elle pointe plink.exe. Cela pourrait être celui installé avec les extensions TortoiseHg / TortoiseGit / Git ou vous pouvez le télécharger à partir de la page de téléchargement Putty , mais assurez-vous simplement que vous utilisez le même système à l'échelle du système. Il est préférable de vous déconnecter de votre session Windows pour vous assurer que cette variable est définie pour toutes les instances d'Explorateur et toutes les fenêtres de commande.

Khalid Abuhakmeh
la source
Après 45 minutes perdues, c'est la seule chose qui a résolu mes problèmes avec Git dans Powershell sans utiliser Pageant comme agent SSH . J'ai simplement créé une variable d'environnement utilisateur pour GIT_SSHavec une valeur de C:\Program Files (x86)\PuTTY\plink.exe. Merci.
Phil Ricketts
3

Pour exécuter ssh-agent avec la clé spécifiée, j'ai écrit ce code:

$gitexepath = cmd /c where git
$gitbindir = Join-Path $gitexepath "..\..\bin"
$sshagentpath = Join-Path $gitbindir "ssh-agent.exe"
$sshaddpath = Join-Path $gitbindir "ssh-add.exe"
$keypath = "...key path...":
$sshagentres = cmd /c $sshagentpath 
$env:SSH_AUTH_SOCK = [System.Text.RegularExpressions.Regex]::Match($sshagentres, "(?<=SSH_AUTH_SOCK=).+?(?=;)").Value
$env:SSH_AGENT_PID = [System.Text.RegularExpressions.Regex]::Match($sshagentres, "(?<=SSH_AGENT_PID=).+?(?=;)").Value
cmd /c $sshaddpath $keypath
Stanislav Berkov
la source