Git в Powershell говорит: "Не удалось найти ssh-agent"

97

У меня установлен git, и он отлично работает в командной строке, но когда я открываю powershell, он выдает такое предупреждение:

WARNING: Could not find ssh-agent

У меня запущен конкурс и загружен мой закрытый ключ. Это работает во всех инструментах графического интерфейса и командной строке, но не в Powershell.

В чем дело?

Халид Абухакмех
источник
1
Может %PATH%быть, почему-то иначе?
Йонас Гейдельберг
1
Ссылка @ rohancragg по существу говорит о добавлении: $env:path += ";" + (Get-Item "Env:ProgramFiles(x86)").Value + "\Git\bin"в начало файла ПРОФИЛЯ (используйте команду PS, ise $PROFILEчтобы открыть ПРОФИЛЬ для редактирования)
Тоби
извините за то, что не объяснил - haacked говорит: «не удалось найти исполняемый файл ssh-agent.exe. Этот файл находится в C: \ Program Files (x86) \ Git \ bin. но эта папка не является автоматически добавлен msysgit в ваш PATH "
rohancragg
Я бы посоветовал этот ответ теперь предпочтительнее, чем совет в взломанном посте:
rohancragg

Ответы:

137

Для тех, кто ищет подробное объяснение, прочитайте этот пост в блоге . Ниже приводится цитата из сообщения в блоге. В конце концов, ssh-agent.exeнеобходимо встать на пути или разрешиться каким-то другим способом.

РЕДАКТИРОВАТЬ: Похоже, что большинство людей не утруждают себя чтением связанного блога, а исходный отрывок не цитирует полное решение, поэтому я расширил цитату из блога ниже.

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

Когда я перезапустил командную строку PowerShell, она сообщила мне, что не может запустить агент SSH.

Оказывается, ему не удалось найти исполняемый файл ssh-agent.exe. Этот файл находится в C: \ Program Files (x86) \ Git \ bin. но эта папка не добавляется автоматически в ваш PATH с помощью msysgit.

Если вы не хотите добавлять этот путь в системный PATH, вы можете обновить сценарий профиля PowerShell, чтобы он применялся только к сеансу PowerShell. Вот что я сделал.

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

На моей машине этот сценарий находится по адресу: C: \ Users \ Haacked \ Documents \ WindowsPowerShell \ Microsoft.Powershell_profile.ps1

Тарас Аленин
источник
2
Это действительно должен быть ответ!
caveman_dick
Это правильный ответ. В принятом ответе предполагается, что установлен TortoiseGit или TortoiseHg. Как указывает этот ответ, все, что вам нужно для решения проблемы, - это Msysgit.
Carl
3
Уф, добавление этого каталога в PATH сделало меня неудобным ... в нем есть всевозможные .exes с общими именами, конфликтующими с командами Windows. Надеюсь, когда-нибудь он не укусит меня за задницу.
Salman von Abbas
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 ​​вызывало проблемы, когда я пытался запустить. $ profile несколько раз (для других изменений). Вместо этого используйте Set-Alias, и это сработало намного лучше.
Randall Borck
1
Спасибо @RandallBorck и @northben! Предложения включены.
brianary
3
С появлением 64-разрядного git 2.5 (выпущенного вчера) эти псевдонимы необходимо будет обновить, чтобы они указывали на них ${env:ProgramFiles}\git\usr\bin\для 64-разрядных систем.
Честер Хаск,
Это должен быть принятый ответ. Никто не хочет мешать себе дорогу.
jebar8 08
17

Если вы используете posh-git и получаете это предупреждение, вы можете отключить его, прокомментировав (добавив знак '#') следующую строку

Start-SshAgent -Quiet

В файле

Documents\WindowsPowerShell\Modules\posh-git\profile.example.ps1
Ахмед
источник
5
В качестве дополнительного бонуса, если вам не нужна / не нужна поддержка SSH, и у вас очень медленный запуск PowerShell даже с добавлением исправления PATH ssh-agent.exe, комментирование этой строки ускоряет запуск на тонну.
MechEthan
17

Я понял. Вам нужно установить GIT_SSHпеременную среды на вашем компьютере, чтобы она указывала на plink.exe. Это может быть тот, который установлен с TortoiseHg / TortoiseGit / Git Extensions, или вы можете загрузить его со страницы загрузки Putty , но просто убедитесь, что вы используете одну и ту же единую систему. Лучше всего выйти из сеанса Windows, чтобы убедиться, что эта переменная установлена ​​для всех экземпляров проводника и командных окон.

Халид Абухакмех
источник
После 45 потраченных впустую минут это единственное, что устранило мои проблемы с Git в Powershell, не использующим Pageant в качестве агента SSH . Я просто создал переменную пользовательской среды для GIT_SSHсо значением C:\Program Files (x86)\PuTTY\plink.exe. Спасибо.
Фил Рикеттс
3

Чтобы запустить ssh-agent с указанным ключом, я написал этот код:

$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
Станислав Берков
источник