Git in Powershell sagt 'ssh-agent konnte nicht gefunden werden'

97

Ich habe git installiert und es funktioniert hervorragend in der Eingabeaufforderung, aber wenn ich Powershell öffne, erhalte ich folgende Warnung:

WARNING: Could not find ssh-agent

Ich habe Festzug laufen und mit meinem privaten Schlüssel geladen. Dies funktioniert in allen GUI-Tools und der Eingabeaufforderung, jedoch nicht in Powershell.

Was ist los?

Khalid Abuhakmeh
quelle
1
Könnte das %PATH%aus irgendeinem Grund anders sein?
Jonas Heidelberg
1
@ rohancragg Link sagt im Wesentlichen hinzufügen: $env:path += ";" + (Get-Item "Env:ProgramFiles(x86)").Value + "\Git\bin"am Anfang Ihrer PROFILE-Datei (verwenden Sie den PS-Befehl ise $PROFILE, um das PROFILE für die Bearbeitung zu öffnen)
Toby
Entschuldigung, dass ich es nicht erklärt habe - haacked sagt: "Die ausführbare Datei" ssh-agent.exe "konnte nicht gefunden werden. Diese Datei befindet sich in C: \ Programme (x86) \ Git \ bin. Dieser Ordner wird jedoch nicht automatisch erstellt hinzugefügt zu Ihrem Pfad von msysgit "
rohancragg
Ich würde vorschlagen, dass diese Antwort jetzt dem Rat in dem gehackten Beitrag vorzuziehen ist:
Rohancragg

Antworten:

137

Für diejenigen, die nach einer detaillierten Erklärung suchen, lesen Sie diesen Blog-Beitrag . Unten ist ein Zitat aus dem Blog-Beitrag. Letztendlich ssh-agent.exemuss das im Weg sein oder auf andere Weise gelöst werden.

BEARBEITEN: Es scheint, dass die meisten Leute sich nicht die Mühe machen, das verlinkte Blog zu lesen, und der ursprüngliche Auszug zitierte nicht die vollständige Lösung, deshalb habe ich das Zitat aus dem Blog unten erweitert.

Es gibt zahlreiche Möglichkeiten, den Fehler zu beheben, basierend auf den Likes aller anderen Antworten. Eine, von der bekannt ist, dass sie funktioniert, ist unten angegeben. Scannen Sie nach anderen Antworten, die möglicherweise besser für Sie geeignet sind.

Beim Neustart meiner PowerShell-Eingabeaufforderung wurde mir mitgeteilt, dass der SSH-Agent nicht gestartet werden konnte.

Es stellte sich heraus, dass die ausführbare Datei "ssh-agent.exe" nicht gefunden werden konnte. Diese Datei befindet sich in C: \ Programme (x86) \ Git \ bin. Dieser Ordner wird jedoch nicht automatisch von msysgit zu Ihrem PATH hinzugefügt.

Wenn Sie diesen Pfad nicht zu Ihrem Systempfad hinzufügen möchten, können Sie Ihr PowerShell-Profilskript so aktualisieren, dass es nur für Ihre PowerShell-Sitzung gilt. Hier ist die Änderung, die ich vorgenommen habe.

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

Auf meinem Computer befindet sich dieses Skript unter: C: \ Benutzer \ Haacked \ Dokumente \ WindowsPowerShell \ Microsoft.Powershell_profile.ps1

Taras Alenin
quelle
2
Das sollte wirklich die Antwort sein!
caveman_dick
Das ist die richtige Antwort. Die akzeptierte Antwort setzt voraus, dass TortoiseGit oder TortoiseHg installiert ist. Wie diese Antwort zeigt, brauchen Sie nur Msysgit, um das Problem zu beheben.
Carl
3
Das Hinzufügen dieses Verzeichnisses zu PATH machte es mir unangenehm. Es enthält alle möglichen EXE-Dateien mit generischen Namen, die mit den Windows-Befehlen in Konflikt stehen. Hoffe, es beißt mich eines Tages nicht in den Arsch.
Salman von Abbas
4
@SalmanPK: Es macht mich nicht nur unwohl, es wird auch von Git-Betreuern ausdrücklich abgeraten. In meinem Fall wurde die PowerShell-Befehlszeile unterbrochen.
Skolima
10
Für mich ssh-agent.exebefand sich tatsächlich im \Git\usr\binOrdner.
Ben Wilde
53

Sie können zwei Zeilen am oberen ise $profileRand Ihres Profils (Typs ) hinzufügen , um dieses PoshGit-Problem zu beheben, ohne Ihren Pfad zu verschmutzen. Führen Sie dann aus . $profile, um Ihr Profil neu zu laden.

Für 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"

Für 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"
brianary
quelle
3
Vergiss nicht zu rennen . $profile, um dein Profil neu zu laden
Northben
2
Die Verwendung von New-Alias ​​verursachte Probleme beim Ausführen. $ profile mehrmals (für andere Änderungen). Verwenden Sie stattdessen Set-Alias, und das hat viel besser funktioniert.
Randall Borck
1
Danke @RandallBorck und @northben! Vorschläge aufgenommen.
Brian
3
Mit dem Aufkommen des 64-Bit-Git 2.5 (gestern veröffentlicht) müssen diese Aliase aktualisiert werden, um ${env:ProgramFiles}\git\usr\bin\stattdessen auf 64-Bit-Systeme zu verweisen .
Chester Husk
Dies sollte die akzeptierte Antwort sein. Niemand will seinen Weg durcheinander bringen.
Jebar8
17

Wenn Sie posh-git verwenden und diese Warnung erhalten, können Sie sie deaktivieren, indem Sie die folgende Zeile kommentieren (ein '#' hinzufügen)

Start-SshAgent -Quiet

In der Datei

Documents\WindowsPowerShell\Modules\posh-git\profile.example.ps1
Ahmed
quelle
5
Als zusätzlichen Bonus: Wenn Sie keine SSH-Unterstützung benötigen / möchten und selbst beim Hinzufügen des PATH-Fixes ssh-agent.exe einen sehr langsamen PowerShell-Start haben, beschleunigt das Kommentieren dieser Zeile den Start um eine Tonne.
MechEthan
17

Ich habe es herausgefunden. Sie müssen die GIT_SSHUmgebungsvariable auf Ihrem Computer so einstellen , dass sie auf zeigt plink.exe. Dies kann die mit TortoiseHg / TortoiseGit / Git-Erweiterungen installierte sein oder Sie können sie von der Putty-Download-Seite herunterladen , aber stellen Sie sicher, dass Sie systemweit dasselbe verwenden. Melden Sie sich am besten von Ihrer Windows-Sitzung ab, um sicherzustellen, dass diese Variable für alle Explorer-Instanzen und Befehlsfenster festgelegt wird.

Khalid Abuhakmeh
quelle
Nach 45 Minuten ist dies das einzige, was meine Probleme mit Git in Powershell behoben hat, bei dem Pageant nicht als SSH-Agent verwendet wurde . Ich habe einfach eine Benutzerumgebungsvariable für GIT_SSHmit dem Wert von erstellt C:\Program Files (x86)\PuTTY\plink.exe. Vielen Dank.
Phil Ricketts
3

Um ssh-agent mit dem angegebenen Schlüssel auszuführen, habe ich diesen Code geschrieben:

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