Git no Powershell dizendo 'Não foi possível encontrar o agente ssh'

97

Eu tenho o git instalado e ele funciona muito bem no prompt de comando, mas quando eu abro o PowerShell ele me dá este aviso:

WARNING: Could not find ssh-agent

Eu tenho o concurso em execução e carregado com minha chave privada. Isso funciona em todas as ferramentas gui e no prompt de comando, mas não no Powershell.

O que está acontecendo?

Khalid Abuhakmeh
fonte
1
Poderia %PATH%ser diferente por algum motivo?
Jonas Heidelberg
1
O link de @rohancragg diz essencialmente adicionar: $env:path += ";" + (Get-Item "Env:ProgramFiles(x86)").Value + "\Git\bin"ao topo do seu arquivo PROFILE (use o comando PS ise $PROFILEpara abrir o PROFILE para edição)
Toby
desculpe por não explicar - haacked diz: "não foi possível encontrar o executável“ ssh-agent.exe ”. Esse arquivo está localizado em C: \ Arquivos de programas (x86) \ Git \ bin. mas essa pasta não é automaticamente adicionado ao seu PATH por msysgit "
rohancragg
Eu sugeriria que esta resposta agora é preferível ao conselho no post haacked:
rohancragg

Respostas:

137

Para quem procura uma explicação detalhada, leia esta postagem do blog . Abaixo está uma citação da postagem do blog. Em última análise, a ssh-agent.exenecessidade de estar no caminho ou resolvida de alguma outra forma.

EDITAR: Parece que a maioria das pessoas não se preocupa em ler o blog vinculado e o trecho original não cita a solução completa, então expandi a citação do blog abaixo.

Existem várias maneiras de resolver o erro, com base nos gostos de todas as outras respostas. Um conhecido por funcionar é citado abaixo. Procure outras respostas que possam ser mais apropriadas para você.

Quando reiniciei meu prompt do PowerShell, ele me disse que não podia iniciar o Agente SSH.

Acontece que não foi possível encontrar o executável “ssh-agent.exe”. Esse arquivo está localizado em C: \ Arquivos de programas (x86) \ Git \ bin. mas essa pasta não é adicionada automaticamente ao seu PATH pelo msysgit.

Se não quiser adicionar esse caminho ao PATH do sistema, você pode atualizar o script de perfil do PowerShell para que se aplique apenas à sessão do PowerShell. Aqui está a alteração que fiz.

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

Na minha máquina, esse script está em: C: \ Users \ Haacked \ Documents \ WindowsPowerShell \ Microsoft.Powershell_profile.ps1

Taras Alenin
fonte
2
Esta realmente deveria ser a resposta!
caveman_dick
Esta é a resposta certa. A resposta aceita assume que TortoiseGit ou TortoiseHg está instalado. Como esta resposta indica, tudo que você precisa para corrigir o problema é Msysgit.
Carl de
3
Ugggh adicionar este diretório ao PATH me deixou desconfortável .. ele tem todos os tipos de .exes com nomes genéricos em conflito com os comandos do Windows. Espero que não me morda na bunda algum dia.
Salman von Abbas
4
@SalmanPK: não só me deixa desconfortável, como também é explicitamente desencorajado pelos mantenedores do Git. E, no meu caso, quebrou a linha de comando do PowerShell.
skolima
10
Para mim, ssh-agent.exeestava realmente localizado na \Git\usr\binpasta.
Ben Wilde
53

Você pode adicionar duas linhas no topo do seu perfil (tipo ise $profile) para corrigir este problema PoshGit sem poluir o seu caminho. Então corra. $profile para recarregar seu perfil.

Para git de 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"

Para git de 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
fonte
3
não se esqueça de correr . $profilepara recarregar seu perfil
northben
2
Usar New-Alias ​​causou problemas quando tentei executar. $ profile várias vezes (para outras alterações). Em vez disso, use Set-Alias, e funcionou muito melhor.
Randall Borck,
1
Obrigado @RandallBorck e @northben! Sugestões incorporadas.
brianary,
3
Com o advento do git 2.5 de 64 bits (lançado ontem), esses aliases precisarão ser atualizados para apontar para ${env:ProgramFiles}\git\usr\bin\sistemas de 64 bits.
Chester Husk
Esta deve ser a resposta aceita. Ninguém quer estragar seu caminho.
jebar8
17

Se você estiver usando posh-git e recebendo este aviso, você pode desligá-lo comentando (adicionando um sinal de '#') a seguinte linha

Start-SshAgent -Quiet

No arquivo

Documents\WindowsPowerShell\Modules\posh-git\profile.example.ps1
Ahmed
fonte
5
Como um bônus adicional, se você não precisa / deseja suporte SSH, e está tendo um lançamento do PowerShell realmente lento, mesmo com a adição da correção do PATH do ssh-agent.exe, comentar esta linha acelera o lançamento.
MechEthan
17

Eu descobri. Você precisa definir GIT_SSHa variável de ambiente em sua máquina para apontar paraplink.exe . Este pode ser aquele instalado com as extensões TortoiseHg / TortoiseGit / Git ou você pode baixá-lo da página de download do Putty , mas certifique-se de usar o mesmo em todo o sistema. É melhor fazer logout da sessão do Windows para garantir que essa variável seja definida para todas as instâncias do Explorer e janelas de comando.

Khalid Abuhakmeh
fonte
Depois de 45 minutos perdidos, essa foi a única coisa que corrigiu meus problemas com o Git no Powershell sem usar o Pageant como seu agente SSH . Simplesmente criei uma variável de ambiente do usuário para GIT_SSHcom um valor de C:\Program Files (x86)\PuTTY\plink.exe. Obrigado.
Phil Ricketts
3

Para executar o ssh-agent com a chave especificada, escrevi este código:

$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
fonte