Git di Powershell berkata 'Tidak dapat menemukan ssh-agent'

97

Saya telah menginstal git dan berfungsi dengan baik di command prompt, tetapi ketika saya membuka PowerShell, itu memberi saya peringatan ini:

WARNING: Could not find ssh-agent

Saya menjalankan kontes dan memuat kunci pribadi saya. Ini berfungsi di semua alat gui dan prompt perintah tetapi tidak di Powershell.

Apa yang sedang terjadi?

Khalid Abuhakmeh
sumber
1
Mungkinkah %PATH%berbeda karena beberapa alasan?
Jonas Heidelberg
1
Tautan @ rohancragg pada dasarnya mengatakan tambahkan: $env:path += ";" + (Get-Item "Env:ProgramFiles(x86)").Value + "\Git\bin"ke bagian atas file PROFIL Anda (gunakan perintah PS ise $PROFILEuntuk membuka PROFIL untuk diedit)
Toby
maaf karena tidak menjelaskan - haacked mengatakan: "tidak dapat menemukan eksekusi" ssh-agent.exe ". File itu terletak di C: \ Program Files (x86) \ Git \ bin. tetapi folder itu tidak secara otomatis ditambahkan ke PATH Anda oleh msysgit "
rohancragg
Saya menyarankan jawaban ini sekarang lebih disukai daripada saran di posting haacked:
rohancragg

Jawaban:

137

Bagi mereka yang mencari penjelasan rinci silahkan membaca posting blog ini . Di bawah ini adalah kutipan dari postingan blog. Pada akhirnya ssh-agent.exekebutuhan berada di jalur tersebut, atau diselesaikan dengan cara lain.

EDIT: Tampaknya sebagian besar orang tidak repot-repot membaca blog yang ditautkan dan ekstrak asli tidak mengutip solusi lengkapnya, jadi saya telah memperluas kutipan dari blog di bawah ini.

Ada banyak cara untuk mengatasi kesalahan tersebut, berdasarkan suka pada semua jawaban lainnya. Salah satu karya yang diketahui dikutip di bawah ini. Pindai meskipun jawaban lain mungkin lebih sesuai untuk Anda.

Saat saya memulai ulang prompt PowerShell saya, itu memberi tahu saya bahwa itu tidak dapat memulai Agen SSH.

Ternyata itu tidak dapat menemukan "ssh-agent.exe" yang dapat dieksekusi. File itu terletak di C: \ Program Files (x86) \ Git \ bin. tetapi folder itu tidak secara otomatis ditambahkan ke PATH Anda oleh msysgit.

Jika Anda tidak ingin menambahkan jalur ini ke PATH sistem Anda, Anda dapat memperbarui skrip profil PowerShell Anda sehingga hanya berlaku untuk sesi PowerShell Anda. Inilah perubahan yang saya buat.

$ env: jalur + = ";" + (Dapatkan-Item "Env: ProgramFiles (x86)"). Nilai + "\ Git \ bin"

Di komputer saya, skrip itu ada di: C: \ Users \ Haacked \ Documents \ WindowsPowerShell \ Microsoft.Powershell_profile.ps1

Taras Alenin
sumber
2
Ini harus menjadi jawabannya!
caveman_dick
Ini adalah jawaban yang benar. Jawaban yang diterima mengasumsikan bahwa TortoiseGit atau TortoiseHg diinstal. Seperti yang ditunjukkan jawaban ini, yang Anda butuhkan untuk memperbaiki masalah adalah Msysgit.
Carl
3
Ugggh menambahkan direktori ini ke PATH membuat saya tidak nyaman .. ia memiliki semua jenis .ex dengan nama umum yang bertentangan dengan perintah Windows. Berharap itu tidak menggigit saya di pantat suatu hari nanti.
Salman von Abbas
4
@SalmanPK: ini tidak hanya membuat saya tidak nyaman, tetapi juga secara eksplisit tidak disarankan oleh pengelola Git. Dan dalam kasus saya, itu merusak baris perintah PowerShell.
skolima
10
Bagi saya, ssh-agent.exesebenarnya letaknya di dalam \Git\usr\binfolder tersebut.
Ben Wilde
53

Anda dapat menambahkan dua baris ke atas profil Anda (tipe ise $profile) untuk memperbaiki masalah PoshGit ini tanpa mencemari Path Anda. Kemudian jalankan . $profileuntuk memuat ulang profil Anda.

Untuk 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"

Untuk 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"
brianari
sumber
3
jangan lupa untuk menjalankan . $profilememuat ulang profil Anda
northben
2
Menggunakan New-Alias ​​menyebabkan masalah saat saya mencoba menjalankannya. $ profile beberapa kali (untuk perubahan lainnya). Sebaliknya gunakan Set-Alias, dan itu bekerja jauh lebih baik.
Randall Borck
1
Terima kasih @RandallBorck dan @northben! Saran dimasukkan.
brianary
3
Dengan hadirnya 64-bit git 2.5 (dirilis kemarin), alias ini perlu diperbarui agar mengarah ke ${env:ProgramFiles}\git\usr\bin\sistem 64-bit.
Chester Husk
Ini harus menjadi jawaban yang diterima. Tidak ada yang ingin mengacaukan jalan mereka.
jebar8
17

Jika Anda menggunakan posh-git dan mendapatkan peringatan ini, Anda dapat mematikannya dengan berkomentar (menambahkan tanda '#' ke) baris berikut

Start-SshAgent -Quiet

Di dalam file

Documents\WindowsPowerShell\Modules\posh-git\profile.example.ps1
Ahmed
sumber
5
Sebagai bonus tambahan, jika Anda tidak memerlukan / menginginkan dukungan SSH, dan Anda mengalami peluncuran PowerShell yang sangat lambat bahkan dengan menambahkan perbaikan PATH ssh-agent.exe, mengomentari baris ini mempercepat peluncuran satu ton.
MechEthan
17

Saya menemukan jawabannya. Anda perlu menyetel GIT_SSHvariabel lingkungan pada mesin Anda sebagai tujuan plink.exe. Ini bisa saja yang diinstal dengan Ekstensi TortoiseHg / TortoiseGit / Git atau Anda bisa mengunduhnya dari Halaman Unduh Putty , tetapi pastikan Anda menggunakan satu sistem yang sama di seluruh dunia. Paling baik untuk keluar dari sesi Windows Anda untuk memastikan variabel ini disetel untuk semua contoh Explorer dan jendela perintah.

Khalid Abuhakmeh
sumber
Setelah 45 menit terbuang percuma, ini adalah satu-satunya hal yang memperbaiki masalah saya dengan Git di Powershell yang tidak menggunakan Pageant sebagai agen SSH-nya . Saya hanya membuat Variabel Lingkungan Pengguna GIT_SSHdengan nilai C:\Program Files (x86)\PuTTY\plink.exe. Terima kasih.
Phil Ricketts
3

Untuk menjalankan ssh-agent dengan kunci tertentu saya menulis kode ini:

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