Git在Powershell中说“找不到ssh-agent”


97

我已经安装了git,并且在命令提示符下效果很好,但是当我打开powershell时,它给出了以下警告:

WARNING: Could not find ssh-agent

我正在运行选美比赛并加载了我的私钥。这适用于所有gui工具和命令提示符,但不适用于Powershell。

这是怎么回事?


1
请问%PATH%是出于某种原因有什么不同?
乔纳斯·海德堡


1
@rohancragg的链接实际上表示添加:$env:path += ";" + (Get-Item "Env:ProgramFiles(x86)").Value + "\Git\bin"至PROFILE文件的顶部(使用PS命令ise $PROFILE打开PROFILE进行编辑)
Toby

抱歉,无法解释-haacked说:“它找不到“ ssh-agent.exe”可执行文件。该文件位于C:\ Program Files(x86)\ Git \ bin中。但是该文件夹不是自动的由msysgit添加到您的PATH”
rohancragg 2015年

我建议,现在的答案比在骇人听闻的帖子中的建议更可取:
rohancragg 2015年

Answers:


137

对于那些寻求详细解释的人,请阅读此博客文章。以下是博客文章的引文。最终,ssh-agent.exe需求可以解决问题,或者通过其他方式解决。

编辑: 看来大多数人都不会去阅读链接的博客,并且原始摘录没有引用完整的解决方案,因此我在下面的博客中引用了更多内容。

基于对所有其他答案的喜欢,有多种解决错误的方法。下面引用了一种已知的工作方式。扫描其他答案,它们可能更适合您。

当我重新启动PowerShell提示符时,它告诉我无法启动SSH代理。

事实证明,它找不到“ ssh-agent.exe”可执行文件。该文件位于C:\ Program Files(x86)\ Git \ bin中。但是该文件夹不会被msysgit自动添加到您的PATH中。

如果您不想将此路径添加到系统PATH,则可以更新PowerShell配置文件脚本,使其仅适用于PowerShell会话。这是我所做的更改。

$ env:path + =“;” +(获取项“ Env:ProgramFiles(x86)”)。值+“ \ Git \ bin”

在我的机器上,该脚本位于:C:\ Users \ Haacked \ Documents \ WindowsPowerShell \ Microsoft.Powershell_profile.ps1


2
这确实是答案!
Caveman_dick 2012年

这是正确的答案。接受的答案假定已安装TortoiseGit或TortoiseHg。正如该答案指出的那样,解决该问题所需要做的就是Msysgit。
卡尔

3
Ugggh将此目录添加到PATH中使我感到不舒服..它具有各种.exe文件,这些.exe文件的通用名称与Windows的命令冲突。希望有一天它不会咬我。
Salman von Abbas

4
@SalmanPK:这不仅让我感到不舒服,而且Git维护者也明确建议不要这样做。就我而言,它破坏了PowerShell命令行。
skolima

10
对我来说,ssh-agent.exe实际上位于\Git\usr\bin文件夹中。
本·王尔德

53

您可以在个人资料顶部(类型ise $profile)添加两行以解决此PoshGit问题,而不会污染您的路径。然后运行. $profile以重新加载您的配置文件。

对于32位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"

对于64位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"

3
不要忘了运行. $profile重新加载您的个人资料
northben

2
当我尝试运行时,使用New-Alias会引起问题。$ profile多次(用于其他更改)。而是使用Set-Alias,效果更好。
Randall Borck 2014年

1
感谢@RandallBorck和@northben!纳入建议。
brianary 2014年

3
随着64位git 2.5(昨天发布)的出现,这些别名将需要更新以指向${env:ProgramFiles}\git\usr\bin\64位系统。
切斯特·赫斯克,2015年

这应该是公认的答案。没有人想改变自己的道路。
jebar8

17

如果您使用的是posh-git并收到此警告,则可以通过在以下行添加注释(在其中添加“#”符号)将其关闭

Start-SshAgent -Quiet

在文件中

Documents\WindowsPowerShell\Modules\posh-git\profile.example.ps1

5
作为额外的好处,如果不需要/不需要SSH支持,并且即使添加ssh-agent.exe PATH修复程序,Powershell的启动速度都非常慢,注释此行会加快启动速度。
MechEthan

17

我想到了。您需要GIT_SSH在计算机上将环境变量设置为指向plink.exe。这可能是与TortoiseHg / TortoiseGit / Git扩展一起安装的,也可以从Putty下载页面下载该文件,但只需确保在同一系统范围内使用即可。最好从Windows会话注销,以确保为所有资源管理器实例和命令窗口设置了此变量。


在浪费了45分钟之后,这是唯一解决我在Powershell中不使用Pageant作为其SSH代理的Git问题的方法。我只是创建了一个用户环境变量GIT_SSH,其值为C:\Program Files (x86)\PuTTY\plink.exe。谢谢。
Phil Ricketts

3

要使用指定的密钥运行ssh-agent,我编写了以下代码:

$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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.