Git en Powershell diciendo 'No se pudo encontrar ssh-agent'

97

Tengo git instalado y funciona muy bien en el símbolo del sistema, pero cuando abro powershell me da esta advertencia:

WARNING: Could not find ssh-agent

Tengo el concurso en ejecución y cargado con mi clave privada. Esto funciona en todas las herramientas de interfaz gráfica de usuario y en el símbolo del sistema, pero no en Powershell.

¿Que esta pasando?

Khalid Abuhakmeh
fuente
1
¿Podría %PATH%ser diferente por alguna razón?
Jonas Heidelberg
1
El enlace de @ rohancragg esencialmente dice agregar: $env:path += ";" + (Get-Item "Env:ProgramFiles(x86)").Value + "\Git\bin"en la parte superior de su archivo de PERFIL (use el comando PS ise $PROFILEpara abrir el PERFIL y editarlo)
Toby
perdón por no explicar - pirateado dice: "no se pudo encontrar el ejecutable" ssh-agent.exe ". Ese archivo se encuentra en C: \ Archivos de programa (x86) \ Git \ bin. pero esa carpeta no es automática agregado a su RUTA por msysgit "
rohancragg
Sugeriría que esta respuesta ahora es preferible al consejo de la publicación pirateada:
rohancragg

Respuestas:

137

Para aquellos que buscan una explicación detallada, lea esta publicación de blog . A continuación se muestra una cita de la publicación del blog. En última instancia, las ssh-agent.exenecesidades deben estar en el camino, o resolverse de alguna otra manera.

EDITAR: Parece que la mayoría de las personas no se molestan en leer el blog vinculado y el extracto original no cita la solución completa, así que amplié la cita del blog a continuación.

Existen numerosas formas de resolver el error, según los me gusta de todas las demás respuestas. A continuación se cita uno que se sabe que funciona. Explore otras respuestas que pueden ser más apropiadas para usted.

Cuando reinicié mi indicador de PowerShell, me dijo que no podía iniciar el Agente SSH.

Resulta que no pudo encontrar el ejecutable "ssh-agent.exe". Ese archivo se encuentra en C: \ Archivos de programa (x86) \ Git \ bin. pero esa carpeta no se agrega automáticamente a su RUTA por msysgit.

Si no desea agregar esta ruta a la RUTA de su sistema, puede actualizar su script de perfil de PowerShell para que solo se aplique a su sesión de PowerShell. Aquí está el cambio que hice.

$ env: ruta + = ";" + (Obtener elemento "Env: ProgramFiles (x86)"). Valor + "\ Git \ bin"

En mi máquina, ese script está en: C: \ Users \ Haacked \ Documents \ WindowsPowerShell \ Microsoft.Powershell_profile.ps1

Taras Alenin
fuente
2
¡Esta debería ser realmente la respuesta!
caveman_dick
Esta es la respuesta correcta. La respuesta aceptada asume que TortoiseGit o TortoiseHg está instalado. Como señala esta respuesta, todo lo que necesita para solucionar el problema es Msysgit.
Carl
3
Ugggh agregar este directorio a PATH me hizo sentir incómodo ... tiene todo tipo de .exes con nombres genéricos en conflicto con los comandos de Windows. Espero que no me muerda el culo algún día.
Salman von Abbas
4
@SalmanPK: no solo me hace sentir incómodo, también lo desaconsejan explícitamente los mantenedores de Git. Y en mi caso, rompió la línea de comandos de PowerShell.
skolima
10
Para mí, en ssh-agent.exerealidad estaba ubicado en la \Git\usr\bincarpeta.
Ben Wilde
53

Puede agregar dos líneas en la parte superior de su perfil (tipo ise $profile) para solucionar este problema de PoshGit sin contaminar su Ruta. Luego, corre . $profilepara recargar tu 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
fuente
3
no te olvides de correr . $profilepara recargar tu perfil
northben
2
El uso de New-Alias ​​causó problemas cuando intenté ejecutar. $ profile varias veces (para otros cambios). En su lugar, use Set-Alias, y eso funcionó mucho mejor.
Randall Borck
1
¡Gracias @RandallBorck y @northben! Sugerencias incorporadas.
brianary
3
Con la llegada del git 2.5 de 64 bits (lanzado ayer), estos alias deberán actualizarse para que apunten a los ${env:ProgramFiles}\git\usr\bin\sistemas de 64 bits.
Chester Husk
Esta debería ser la respuesta aceptada. Nadie quiere estropear su camino.
jebar8
17

Si está usando posh-git y recibe esta advertencia, puede desactivarla comentando (agregando un signo '#') la siguiente línea

Start-SshAgent -Quiet

En el archivo

Documents\WindowsPowerShell\Modules\posh-git\profile.example.ps1
Ahmed
fuente
5
Como una ventaja adicional, si no necesita / desea soporte SSH, y está teniendo un inicio de PowerShell realmente lento, incluso con la adición de la solución PATH de ssh-agent.exe, comentar esta línea acelera el inicio una tonelada.
MechEthan
17

Me lo imaginé. Debe establecer GIT_SSHla variable de entorno en su máquina para apuntar plink.exe. Este podría ser el instalado con las extensiones TortoiseHg / TortoiseGit / Git o puede descargarlo de la página de descarga de Putty , pero asegúrese de usar el mismo en todo el sistema. Es mejor cerrar la sesión de Windows para asegurarse de que esta variable se configure para todas las instancias de Explorer y ventanas de comandos.

Khalid Abuhakmeh
fuente
Después de 45 minutos perdidos, esto es lo único que solucionó mis problemas con Git en Powershell sin usar Pageant como su agente SSH . Simplemente creé una Variable de entorno de usuario para GIT_SSHcon un valor de C:\Program Files (x86)\PuTTY\plink.exe. Gracias.
Phil Ricketts
3

Para ejecutar ssh-agent con la clave especificada, escribí 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
fuente