Git trong Powershell nói rằng 'Không thể tìm thấy ssh-agent'


97

Tôi đã cài đặt git và nó hoạt động tốt trong dấu nhắc lệnh, nhưng khi tôi mở powershell, nó đưa ra cảnh báo sau:

WARNING: Could not find ssh-agent

Tôi có cuộc thi đang chạy và được tải bằng khóa riêng của mình. Điều này hoạt động trong tất cả các công cụ gui và dấu nhắc lệnh nhưng không hoạt động trong Powershell.

Chuyện gì vậy?


1
%PATH%thể khác nhau vì một số lý do?
Jonas Heidelberg


1
Liên kết của @ rohancragg về cơ bản nói thêm: $env:path += ";" + (Get-Item "Env:ProgramFiles(x86)").Value + "\Git\bin"vào đầu tệp PROFILE của bạn (sử dụng lệnh PS ise $PROFILEđể mở PROFILE để chỉnh sửa)
Toby

xin lỗi vì không giải thích - haacked nói: "không thể tìm thấy tệp thực thi“ ssh-agent.exe ". Tệp đó nằm trong C: \ Program Files (x86) \ Git \ bin. nhưng thư mục đó không tự động thêm vào PATH của bạn bằng cách msysgit"
rohancragg

Tôi sẽ đề nghị câu trả lời này bây giờ là thích hợp hơn để những lời khuyên trong bài Haacked:
rohancragg

Câu trả lời:


137

Đối với những người đang tìm kiếm một lời giải thích chi tiết, hãy đọc bài đăng trên blog này . Dưới đây là trích dẫn từ bài đăng trên blog. Cuối cùng thì ssh-agent.exenhu cầu phải nằm trong đường dẫn, hoặc được giải quyết theo cách khác.

CHỈNH SỬA: Có vẻ như hầu hết mọi người không thèm đọc blog được liên kết và phần trích xuất gốc không trích dẫn giải pháp đầy đủ, vì vậy tôi đã mở rộng phần trích dẫn từ blog bên dưới.

Có nhiều cách để giải quyết lỗi, dựa trên lượt thích đối với tất cả các câu trả lời khác. Một công việc được biết đến được trích dẫn dưới đây. Xem qua các câu trả lời khác mà chúng có thể phù hợp hơn với bạn.

Khi tôi khởi động lại lời nhắc PowerShell của mình, nó cho tôi biết rằng nó không thể khởi động SSH Agent.

Nó chỉ ra rằng nó không thể tìm thấy tệp thực thi “ssh-agent.exe”. Tệp đó nằm trong C: \ Program Files (x86) \ Git \ bin. nhưng thư mục đó không được tự động thêm vào PATH của bạn bằng msysgit.

Nếu bạn không muốn thêm đường dẫn này vào PATH hệ thống của mình, bạn có thể cập nhật tập lệnh hồ sơ PowerShell để nó chỉ áp dụng cho phiên PowerShell của bạn. Đây là thay đổi tôi đã thực hiện.

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

Trên máy của tôi, tập lệnh ở: C: \ Users \ Haacked \ Documents \ WindowsPowerShell \ Microsoft.Powershell_profile.ps1


2
Đây thực sự nên là câu trả lời!
caveman_dick

Đây là câu trả lời đúng. Câu trả lời được chấp nhận giả định rằng TortoiseGit hoặc TortoiseHg được cài đặt. Như câu trả lời này đã chỉ ra, tất cả những gì bạn cần để khắc phục sự cố là Msysgit.
Carl

3
Ugggh việc thêm thư mục này vào PATH khiến tôi không thoải mái .. nó có đủ loại .exes có tên chung xung đột với các lệnh của Windows. Hy vọng một ngày nào đó nó không cắn vào mông tôi.
Salman von Abbas

4
@SalmanPK: nó không chỉ khiến tôi khó chịu mà còn rõ ràng là không khuyến khích những người bảo trì Git. Và trong trường hợp của tôi, nó đã phá vỡ dòng lệnh PowerShell.
skolima

10
Đối với tôi, ssh-agent.exeđã thực sự nằm trong \Git\usr\binthư mục.
Ben Wilde

53

Bạn có thể thêm hai dòng vào đầu tiểu sử của mình (loại ise $profile) để khắc phục sự cố PoshGit này mà không làm ô nhiễm Đường dẫn của bạn. Sau đó chạy . $profileđể tải lại hồ sơ của bạn.

Đối với git 32-bit

Set-Alias ssh-agent "${env:ProgramFiles(x86)}\git\bin\ssh-agent.exe"
Set-Alias ssh-add "${env:ProgramFiles(x86)}\git\bin\ssh-add.exe"

Đối với git 64-bit

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
đừng quên chạy . $profileđể tải lại hồ sơ của bạn
northben

2
Sử dụng Bí danh mới đã gây ra sự cố khi tôi thử chạy. $ hồ sơ nhiều lần (cho các thay đổi khác). Thay vào đó, hãy sử dụng Set-Alias ​​và điều đó đã hoạt động tốt hơn nhiều.
Randall Borck

1
Cảm ơn @RandallBorck và @northben! Đề xuất được kết hợp.
brianary

3
Với sự ra đời của 64-bit git 2.5 (phát hành ngày hôm qua), những bí danh này sẽ cần được cập nhật để trỏ tới ${env:ProgramFiles}\git\usr\bin\thay thế cho các hệ thống 64-bit.
Chester Husk

Đây phải là câu trả lời được chấp nhận. Không ai muốn làm xáo trộn con đường của họ.
jebar8

17

Nếu bạn đang sử dụng posh-git và nhận được cảnh báo này, bạn có thể tắt nó bằng cách nhận xét (thêm dấu '#' vào) dòng sau

Start-SshAgent -Quiet

Trong file

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

5
Như một phần thưởng bổ sung, nếu bạn không cần / muốn hỗ trợ SSH và bạn đang khởi chạy powershell thực sự chậm ngay cả khi thêm bản sửa lỗi PATH ssh-agent.exe, nhận xét dòng này sẽ đẩy nhanh quá trình khởi chạy lên rất nhiều.
MechEthan

17

Tôi đã hiểu rồi. Bạn cần đặt GIT_SSHbiến môi trường trên máy của mình để trỏ tới plink.exe. Đây có thể là phần mềm được cài đặt với Phần mở rộng TortoiseHg / TortoiseGit / Git hoặc bạn có thể tải xuống từ Trang Tải xuống Putty , nhưng chỉ cần đảm bảo rằng bạn sử dụng cùng một hệ thống. Tốt nhất hãy đăng xuất khỏi phiên Windows của bạn để đảm bảo biến này được đặt cho tất cả các phiên bản Explorer và cửa sổ lệnh.


Sau 45 phút lãng phí, đây là điều duy nhất đã khắc phục sự cố của tôi với Git trong Powershell khi không sử dụng Pageant làm đại lý SSH của nó . Tôi chỉ cần tạo một Biến môi trường người dùng cho GIT_SSHvới giá trị là C:\Program Files (x86)\PuTTY\plink.exe. Cảm ơn.
Phil Ricketts

3

Để chạy ssh-agent với khóa được chỉ định, tôi đã viết mã này:

$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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.