Git w programie PowerShell mówi „Nie można znaleźć agenta SSH”

97

Mam zainstalowany git i działa świetnie w wierszu poleceń, ale kiedy otwieram program PowerShell, wyświetla mi to ostrzeżenie:

WARNING: Could not find ssh-agent

Mam konkurs uruchomiony i załadowany moim kluczem prywatnym. Działa to we wszystkich narzędziach GUI i wierszu polecenia, ale nie w programie Powershell.

Co się dzieje?

Khalid Abuhakmeh
źródło
1
Czy z %PATH%jakiegoś powodu mogło być inaczej?
Jonas Heidelberg,
1
Link @ rohancragg zasadniczo mówi: dodaj: $env:path += ";" + (Get-Item "Env:ProgramFiles(x86)").Value + "\Git\bin"na początku pliku PROFILE (użyj polecenia PS, ise $PROFILEaby otworzyć PROFIL do edycji)
Toby
przepraszam, że nie wyjaśniam - mówi haacked: „nie udało się znaleźć pliku wykonywalnego„ ssh-agent.exe ”. Ten plik znajduje się w C: \ Program Files (x86) \ Git \ bin. ale ten folder nie jest automatycznie dodane do Twojej ŚCIEŻKI przez
msysgit
Sugerowałbym, że ta odpowiedź jest teraz lepsza od porady w haacked post:
rohancragg

Odpowiedzi:

137

Dla tych, którzy szukają szczegółowych wyjaśnień, przeczytaj ten wpis na blogu . Poniżej znajduje się cytat z wpisu na blogu. Ostatecznie ssh-agent.exetrzeba być na ścieżce lub rozwiązać w inny sposób.

EDYCJA: Wygląda na to, że większość ludzi nie zawraca sobie głowy czytaniem podlinkowanego bloga, a oryginalny fragment nie zacytował pełnego rozwiązania, więc rozszerzyłem cytat z poniższego bloga.

Istnieje wiele sposobów rozwiązania tego błędu, w oparciu o polubienia do wszystkich innych odpowiedzi. Jeden, o którym wiadomo, że działa, jest cytowany poniżej. Przejrzyj inne odpowiedzi, które mogą być dla Ciebie bardziej odpowiednie.

Kiedy ponownie uruchomiłem monit PowerShell, poinformował mnie, że nie można uruchomić agenta SSH.

Okazuje się, że nie był w stanie znaleźć pliku wykonywalnego „ssh-agent.exe”. Ten plik znajduje się w C: \ Program Files (x86) \ Git \ bin. ale ten folder nie jest automatycznie dodawany do twojej PATH przez msysgit.

Jeśli nie chcesz dodawać tej ścieżki do ścieżki systemowej PATH, możesz zaktualizować skrypt profilu programu PowerShell, aby dotyczył tylko sesji programu PowerShell. Oto zmiana, którą wprowadziłem.

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

Na moim komputerze ten skrypt znajduje się pod adresem: C: \ Users \ Haacked \ Documents \ WindowsPowerShell \ Microsoft.Powershell_profile.ps1

Taras Alenin
źródło
2
To naprawdę powinna być odpowiedź!
caveman_dick
To jest właściwa odpowiedź. Zaakceptowana odpowiedź zakłada, że ​​zainstalowany jest TortoiseGit lub TortoiseHg. Jak wskazuje ta odpowiedź, wszystko, czego potrzebujesz, aby rozwiązać problem, to Msysgit.
Carl
3
Ugggh dodanie tego katalogu do PATH sprawiło, że poczułem się nieswojo. Zawiera on wszystkie rodzaje .exów z nazwami generycznymi, które są sprzeczne z poleceniami systemu Windows. Mam nadzieję, że któregoś dnia nie ugryzie mnie w tyłek.
Salman von Abbas
4
@SalmanPK: to nie tylko sprawia, że ​​czuję się niekomfortowo, ale jest również wyraźnie zniechęcane przez opiekunów Git. W moim przypadku zepsuło to wiersz poleceń PowerShell.
skolima
10
Dla mnie ssh-agent.exefaktycznie znajdował się w \Git\usr\binfolderze.
Ben Wilde
53

Możesz dodać dwie linie na górze swojego profilu (typu ise $profile), aby rozwiązać ten problem z PoshGit bez zanieczyszczania swojej ścieżki. Następnie biegnij, . $profileaby ponownie załadować swój profil.

Dla 32-bitowego 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"

Dla 64-bitowego 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
źródło
3
nie zapomnij pobiec, . $profileaby ponownie załadować swój profil
northben
2
Używanie New-Alias ​​powodowało problemy podczas próby uruchomienia. $ profile wiele razy (w przypadku innych zmian). Zamiast tego użyj Set-Alias ​​i to zadziałało znacznie lepiej.
Randall Borck
1
Dzięki @RandallBorck i @northben! Sugestie włączone.
brianary
3
Wraz z pojawieniem się 64-bitowego git 2.5 (wydanego wczoraj), aliasy te będą musiały zostać zaktualizowane, aby wskazywały na ${env:ProgramFiles}\git\usr\bin\systemy 64-bitowe.
Chester Husk
To powinna być akceptowana odpowiedź. Nikt nie chce zepsuć im ścieżki.
jebar8
17

Jeśli używasz posh-git i otrzymujesz to ostrzeżenie, możesz je wyłączyć, komentując (dodając znak '#') do następującego wiersza

Start-SshAgent -Quiet

W pliku

Documents\WindowsPowerShell\Modules\posh-git\profile.example.ps1
Ahmed
źródło
5
Jako dodatkowy bonus, jeśli nie potrzebujesz / nie chcesz obsługi SSH i masz naprawdę powolne uruchamianie programu PowerShell nawet po dodaniu poprawki PATH ssh-agent.exe, komentowanie tej linii przyspiesza uruchomienie.
MechEthan
17

Rozgryzłem to. Musisz ustawić GIT_SSHzmienną środowiskową na swoim komputerze, aby wskazywała plink.exe. Może to być ten zainstalowany z rozszerzeniami TortoiseHg / TortoiseGit / Git lub można go pobrać ze strony pobierania Putty , ale po prostu upewnij się, że używasz tego samego w całym systemie. Najlepiej wylogować się z sesji systemu Windows, aby upewnić się, że ta zmienna zostanie ustawiona dla wszystkich instancji Eksploratora i okien poleceń.

Khalid Abuhakmeh
źródło
Po 45 zmarnowanych minutach jest to jedyna rzecz, która rozwiązała moje problemy z Git w Powershell, które nie używały Pageant jako agenta SSH . Po prostu utworzyłem zmienną środowiskową użytkownika dla GIT_SSHo wartości C:\Program Files (x86)\PuTTY\plink.exe. Dzięki.
Phil Ricketts
3

Aby uruchomić ssh-agent z określonym kluczem, napisałem ten kod:

$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
źródło