Git в Powershell каже: "Не вдалося знайти ssh-agent"


97

У мене встановлений git, і він прекрасно працює в командному рядку, але коли я відкриваю повноваження, він дає мені це попередження:

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щоб відкрити ПРОФІЛ для редагування)
Toby

вибачте за те, що не пояснив - зламаний каже: "не вдалося знайти виконуваний файл" ssh-agent.exe ". Цей файл знаходиться в C: \ Program Files (x86) \ Git \ bin. Але ця папка не є автоматично додано до вашого PATH від msysgit "
rohancragg

Я б припустив, що зараз ця відповідь є кращою, ніж порада в зламаному посту:
rohancragg

Відповіді:


137

Для тих, хто шукає детальне пояснення, прочитайте цю публікацію в блозі . Нижче наведено цитату з допису в блозі. Зрештою, ssh-agent.exeпотреби стояти на шляху, або вирішити якимсь іншим способом.

EDIT: Здається, більшість людей не турбується читати пов'язаний блог, і оригінальний витяг не цитував повне рішення, тому я розширив цитату з блогу нижче.

Існує чимало способів вирішити помилку на основі лайків до всіх інших відповідей. Один з відомих для роботи цитується нижче. Скануйте, хоча інші відповіді вони можуть бути більш підходящими для вас.

Коли я перезапустив своє запит PowerShell, він сказав мені, що не може запустити SSH-агент.

Виявляється, він не зміг знайти виконуваний файл "ssh-agent.exe". Цей файл знаходиться в C: \ Program Files (x86) \ Git \ bin. але ця папка не додається автоматично до вашої PATH через msysgit.

Якщо ви не хочете додавати цей шлях до вашої системи PATH, ви можете оновити сценарій свого профілю PowerShell, щоб він стосувався лише вашого сеансу PowerShell. Ось я змінив.

$ env: path + = ";" + (Get-Item "Env: ProgramFiles (x86)"). Значення + "\ Git \ bin"

На моїй машині цей сценарій знаходиться за адресою: C: \ Users \ Haacked \ Documents \ WindowsPowerShell \ Microsoft.Powershell_profile.ps1


2
Це справді має бути відповіддю!
caveman_dick

Це правильна відповідь. Прийнята відповідь передбачає встановлення TortoiseGit або TortoiseHg. Як вказує ця відповідь, все, що вам потрібно вирішити, - це Msysgit.
Карл

3
Угг, додавши цей каталог до PATH, зробив мені незручним .. він має всілякі .exe із загальними іменами, що суперечать командам Windows. Сподіваюся, що колись мене не кусає в попу.
Салман фон Аббас

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 ​​спричинило проблеми, коли я спробував запустити. $ профіль кілька разів (для інших змін). Замість цього використовуйте Set-Alias, і це спрацювало набагато краще.
Рандалл Борк

1
Дякую @RandallBorck та @northben! Пропозиції включені.
бріанарій

3
З появою 64-розрядного git 2.5 (випущеного вчора) ці псевдоніми потрібно буде оновити, щоб вказувати на ${env:ProgramFiles}\git\usr\bin\64-бітні системи.
Честер Хеск

Це має бути прийнятою відповіддю. Ніхто не хоче перекривати їхній шлях.
jebar8

17

Якщо ви використовуєте posh-git і отримуєте це попередження, ви можете вимкнути його, коментуючи (додавши знак "#" до наступного рядка

Start-SshAgent -Quiet

У файлі

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

5
Як додатковий бонус, якщо вам не потрібна / хочете підтримка SSH, і у вас є дуже повільний запуск програми навіть при додаванні виправлення ssh-agent.exe PATH, коментуючи цей рядок, прискорюється запуск на тонну.
МехЕтан

17

Я зрозумів це. Потрібно встановити GIT_SSHзмінну середовища на вашому пристрої, на яку слід вказувати plink.exe. Це може бути встановлений за допомогою TortoiseHg / TortoiseGit / Git Extensions, або ви можете завантажити його з сторінки завантаження сторінки , але просто переконайтеся, що ви використовуєте ту саму систему широко. Найкраще вийти з сеансу Windows, щоб переконатися, що ця змінна встановлена ​​для всіх екземплярів Провідника та вікон команд.


Після 45 марних хвилин це єдине, що вирішило мої проблеми з Git в Powershell, не використовуючи Pageant як її SSH-агент . Я просто створив змінну середовища для користувача GIT_SSHіз значенням C:\Program Files (x86)\PuTTY\plink.exe. Дякую.
Філ Рікеттс

3

Щоб запустити ssh-агент із вказаним ключем, я написав цей код:

$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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.