98

I have git installed and it works great in the command prompt, but when I open up powershell it gives me this warning:

WARNING: Could not find ssh-agent

I have pageant running and loaded with my private key. This works in all the gui tools and the command prompt but not in Powershell.

What's going on?

5
  • 1
    Could the %PATH% be different for some reason? Commented Sep 19, 2011 at 11:46
  • 1
  • 1
    @rohancragg's link essentially says add: $env:path += ";" + (Get-Item "Env:ProgramFiles(x86)").Value + "\Git\bin" to the top of your PROFILE file (use the PS command ise $PROFILE to open the PROFILE for editing)
    – Toby
    Commented Jan 14, 2015 at 12:23
  • sorry for not explaining - haacked says: "it was not able to find the “ssh-agent.exe” executable. That file is located in C:\Program Files (x86)\Git\bin. but that folder isn’t automatically added to your PATH by msysgit"
    – rohancragg
    Commented Jan 22, 2015 at 16:10
  • I would suggest this answer is now preferable to the advice in the haacked post:
    – rohancragg
    Commented Mar 3, 2015 at 14:49

6 Answers 6

137

For those looking for a detailed explanation have a read of this blog post. Below is a quote from the blog post. Ultimately the ssh-agent.exe needs to be in the path, or resolved some other way.

EDIT: It appears most of the people don't bother reading the linked blog and the original extract did not quote the full solution, so I've expanded the quote from the blog below.

There are numerous ways to resolve the error, based on the likes to all other answers. One known to work is quoted below. Scan though other answers they may be more appropriate for you.

When I restarted my PowerShell prompt, it told me it could not start SSH Agent.

It turns out that it was not able to find the “ssh-agent.exe” executable. That file is located in C:\Program Files (x86)\Git\bin. but that folder isn’t automatically added to your PATH by msysgit.

If you don’t want to add this path to your system PATH, you can update your PowerShell profile script so it only applies to your PowerShell session. Here’s the change I made.

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

On my machine that script is at: C:\Users\Haacked\Documents\WindowsPowerShell\Microsoft.Powershell_profile.ps1

12
  • 2
    This should really be the answer! Commented Aug 14, 2012 at 14:18
  • This is the right answer. The accepted answer assumes that TortoiseGit or TortoiseHg is installed. As this answer points out, all you need to fix the problem is Msysgit.
    – Carl
    Commented Nov 20, 2012 at 21:21
  • 3
    Ugggh adding this directory to PATH made me uncomfortable.. it has all sorts of .exes with generic names conflicting with Windows' commands. Hope it doesn't bite me in the ass someday.
    – Celmaun
    Commented Jul 29, 2013 at 18:40
  • 4
    @SalmanPK: it not only makes me uncomfortable, it is also explicitly discouraged by Git maintainers. And in my case, it broke the PowerShell command line.
    – skolima
    Commented Aug 19, 2013 at 10:26
  • 11
    For me, ssh-agent.exe was actually located in the \Git\usr\bin folder.
    – Ben Wilde
    Commented Aug 24, 2015 at 21:03
53

You can add two lines to the top of your profile (type ise $profile) to fix this PoshGit issue without polluting your Path. Then run . $profile to reload your profile.

For 32-bit git

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

For 64-bit git

Set-Alias ssh-agent "$env:ProgramFiles\git\usr\bin\ssh-agent.exe"
Set-Alias ssh-add "$env:ProgramFiles\git\usr\bin\ssh-add.exe"
5
  • 3
    don't forget to run . $profile to reload your profile
    – northben
    Commented Sep 6, 2014 at 18:40
  • 2
    Using New-Alias caused issues when I tried running . $profile multiple times (for other changes). Instead use Set-Alias, and that worked much better. Commented Sep 15, 2014 at 15:37
  • 1
    Thanks @RandallBorck and @northben! Suggestions incorporated.
    – brianary
    Commented Sep 15, 2014 at 15:40
  • 3
    With the advent of the 64-bit git 2.5 (released yesterday), these aliases will need to be updated to point to ${env:ProgramFiles}\git\usr\bin\ instead for 64-bit systems. Commented Aug 19, 2015 at 16:26
  • This should be the accepted answer. Nobody wants to muck up their path.
    – jebar8
    Commented Jul 8, 2016 at 14:39
17

If you are using posh-git and getting this warning, you can turn it off by commenting (adding a '#' sign to) the following line

Start-SshAgent -Quiet

In the file

Documents\WindowsPowerShell\Modules\posh-git\profile.example.ps1
1
  • 5
    As an added bonus, if you don't need/want SSH support, and you're having a really slow powershell launch even with adding ssh-agent.exe PATH fix, commenting this line out speeds the launch up a ton.
    – MechEthan
    Commented Mar 14, 2013 at 1:05
17

I figured it out. You need to set GIT_SSH environment variable on your machine to point to plink.exe. This could be the one installed with TortoiseHg / TortoiseGit / Git Extensions or you can download it from Putty Download Page, but just make sure that you use the same one system wide. Best to log out from your Windows session to make sure this variable gets set for all Explorer instances and command windows.

1
  • After 45 wasted minutes, this is the only thing that fixed my issues with Git in Powershell not using Pageant as its SSH agent. I simply created a User Environment Variable for GIT_SSH with a value of C:\Program Files (x86)\PuTTY\plink.exe. Thanks. Commented Sep 28, 2016 at 15:29
3

To run ssh-agent with specified key I wrote this 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
2

This has been fixed; see https://github.com/dahlbyk/posh-git/issues/160

You can update posh-git.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.