Tidak dapat membuka koneksi ke agen otentikasi Anda


1605

Saya mengalami kesalahan ini:

$ git push heroku master
Warning: Permanently added the RSA host key for IP address '50.19.85.132' to the list of known hosts.
!  Your key with fingerprint b7:fd:15:25:02:8e:5f:06:4f:1c:af:f3:f0:c3:c2:65 is not authorized to access bitstarter.

Saya mencoba menambahkan kunci dan saya mendapatkan kesalahan ini di bawah:

$ ssh-add ~/.ssh/id_rsa.pub
Could not open a connection to your authentication agent.

26
Pertanyaan: begitu Anda telah melalui SETIAP jawaban di halaman ini, dan tidak ada satupun yang berfungsi. Apa yang dapat Anda lakukan selanjutnya?
Brandon Bertelsen

8
@BrandonBertelsen Cobalah yang ini: $ ssh-agent /bin/sh dan $ ssh-add $yourkey
shyam

@BrandonBertelsen Selanjutnya Anda harus menggunakan git config --listuntuk melihat apakah Anda telah mengatur credential.helper- jika sudah, Anda harus menghapus pengaturan ini, karena helper tidak membantu.
yoyo

Jawaban:


2384

Apakah Anda Mulai ssh-agent?

Anda mungkin perlu memulai ssh-agentsebelum menjalankan ssh-addperintah:

eval `ssh-agent -s`
ssh-add

Perhatikan bahwa ini akan memulai agen untuk msysgit Bash di Windows . Jika Anda menggunakan shell atau sistem operasi yang berbeda, Anda mungkin perlu menggunakan varian perintah, seperti yang tercantum dalam jawaban lain .

Lihat jawaban berikut:

  1. ssh-add complain: Tidak dapat membuka koneksi ke agen otentikasi Anda
  2. Git push membutuhkan nama pengguna dan kata sandi (berisi instruksi terperinci tentang cara menggunakan ssh-agent)
  3. Bagaimana menjalankan agen otentikasi (git / ssh)? .
  4. Tidak dapat membuka koneksi ke agen otentikasi Anda

Untuk memulai ssh-agent secara otomatis dan memungkinkan satu instance bekerja di banyak jendela konsol, lihat Mulai ssh-agent saat masuk .

Mengapa kita perlu menggunakan, evalbukan hanya ssh-agent?

Untuk mencari tahu alasannya, lihat jawaban Robin Green .

Kunci Publik vs Pribadi

Juga, setiap kali saya menggunakan ssh-add, saya selalu menambahkan kunci pribadi untuk itu. File tersebut ~/.ssh/id_rsa.pubterlihat seperti kunci publik, saya tidak yakin apakah itu akan berhasil. Apakah Anda punya ~/.ssh/id_rsafile? Jika Anda membukanya di editor teks, apakah dikatakan itu kunci pribadi?


18
@xtian Saya tidak yakin memahami masalah ini. Saya tidak tahu detail pastinya, tetapi saya menduga bahwa kunci pribadi tidak pernah dikirim melalui jaringan. Saya pikir ssh-addhanya mendekripsi kunci pribadi terenkripsi pada mesin host, sehingga dapat digunakan secara lokal ... tidak pernah dikirim ke siapa pun . Saya menduga bahwa hanya kunci publik yang pernah dikirim melalui jaringan. Apakah pemahaman saya salah?

6
Anda Cupcake terlalu baik. Anda benar sekali. Salahku. ex di sini ; ssh-add menambahkan kunci pribadi untuk ssh-agent pengguna (proses yang berjalan) dapat bertindak atas nama klien / host dengan server menerima kunci rsa-apa pun. Ya ampun. Saya tidak tahu apa yang membuat saya sangat bersemangat.
xtian

22
Saya ingin tahu mengapa eval ssh-agent -sbekerja, tetapi ssh-agentitu sendiri tidak.
DanielM

13
@DanielM: SSH membutuhkan dua hal untuk menggunakan ssh-agent: instance ssh-agent yang berjalan di latar belakang, dan set variabel lingkungan yang memberi tahu SSH soket mana yang harus digunakan untuk menghubungkan ke agen ( SSH_AUTH_SOCKIIRC). Jika Anda hanya menjalankan ssh-agentmaka agen akan mulai, tetapi SSH tidak akan tahu di mana menemukannya.
Vanessa Phipps

4
Terima kasih telah membalas. Saya hanya memperhatikan bahwa Anda menggunakan backquote dalam perintah. Saya sangat bingung mengapa backquote (`) bekerja untuk perintah eval tetapi bukan kutipan tunggal / ganda (',") pada bash shell saya?
Weishi Zeng

540

Saya mencoba solusi lain tetapi tidak berhasil. Saya melakukan lebih banyak riset dan menemukan bahwa perintah berikut ini berfungsi. Saya menggunakan Windows 7 dan Git Bash .

eval $(ssh-agent)

Informasi lebih lanjut di: https://coderwall.com/p/rdi_wq


14
Bekerja di Windows 8 juga.
Andreas Rudolph

Saya juga menggunakan Windows 7 dan Git Bash, dan jawaban saya berfungsi dengan baik. Itu keren bahwa Anda juga bisa melakukannya dengan cara ini juga.

2
Bagus !! Bekerja dengan windows 10 juga.
NitinM

1
Bekerja di Manjaro
code_flow

1
$ eval "$ (ssh-agent -s)" bekerja untuk saya di Windows 10
Andrew Anderson

261

Perintah berikut bekerja untuk saya. Saya menggunakan CentOS.

exec ssh-agent bash

3
Terima kasih, ini bekerja untuk saya, saya menjalankan 'exec ssh-agent zsh' untuk shell saya.
jasonmcclurg

2
Menurut "jawaban" yang dihapus ini , ini juga berfungsi di Amazon Linux AMI. Saya kira ini adalah solusi Unix / Linux / * nix.

4
Saya ssh'ed ke wadah buruh pelabuhan dan ssh-add my.id_rsaakan gagal pada saya. Tetapi exec ssh-agent zshmemberikan lingkungan di mana saya bisa ssh-addtanpa masalah. Dan saya berada di dalam wadah buruh pelabuhan saya :)
markuz-gj

Adakah yang bisa menjelaskan secara singkat apa masalahnya? Terima kasih :) Ini bekerja di Ubuntu 14.04 saya juga.
harkirat1892

bekerja pada raspbian juga
mega_creamery

215

MsysGit atau Cygwin

Jika Anda menggunakan Msysgit atau Cygwin, Anda dapat menemukan tutorial yang bagus di SSH-Agent di msysgit dan cygwin dan bash :

  1. Tambahkan file yang dipanggil .bashrcke folder rumah Anda.

  2. Buka file dan tempel di:

    #!/bin/bash
    eval `ssh-agent -s`
    ssh-add
  3. Ini mengasumsikan bahwa kunci Anda ada di ~/.ssh/id_rsalokasi konvensional . Jika tidak, sertakan jalur lengkap setelah ssh-addperintah.

  4. Tambahkan ke atau buat file ~/.ssh/configdengan konten

    ForwardAgent yes
    

    Dalam tutorial asli ForwardAgentparam adalah Yes, tapi ini salah ketik. Gunakan semua huruf kecil atau Anda akan mendapatkan kesalahan.

  5. Mulai ulang Msysgit. Ia akan meminta Anda untuk memasukkan kata sandi Anda sekali, dan hanya itu (sampai Anda mengakhiri sesi, atau agen ssh Anda terbunuh.)

Mac / OS X

Jika Anda tidak ingin memulai ssh-agent baru setiap kali Anda membuka terminal, periksa Keychain . Saya menggunakan Mac sekarang, jadi saya menggunakan tutorial ssh-agent dengan zsh & gantungan kunci di Mac OS X untuk mengaturnya, tetapi saya yakin pencarian Google akan memiliki banyak info untuk Windows.

Pembaruan : Solusi yang lebih baik pada Mac adalah menambahkan kunci Anda ke Keychain Mac OS:

ssh-add -K ~/.ssh/id_rsa

Sederhana seperti itu.



1
Ketika saya melakukan eval `ssh-agent -s`proses tidak berhenti ketika saya keluar dari cygwin.
Kiril

Apakah ada cara untuk mengatur konfigurasi untuk Windows / gitbash sehingga Anda tidak perlu melakukannya setiap waktu?
mix3d

4
Seharusnya ps -u $(whoami) | grep ssh-agent &> /dev/null || eval $(ssh-agent)- jika ssh-agent baru dimulai setiap kali. Membunuh mesin saya setiap saat ketika pengguna memiliki cronjobs.
merobek

3
ForwardAgent yestidak diperlukan dan merupakan risiko keamanan nontheoretical jika ditetapkan untuk server yang tidak dipercaya. Akses lokal ke agen kunci Anda harus berfungsi terlepas dari pengaturan ini.
SeldomNeedy

208

Tidak dapat membuka koneksi ke agen otentikasi Anda

Untuk mengatasi kesalahan ini:

pesta:

$ eval `ssh-agent -s`

tcsh:

$ eval `ssh-agent -c`

Kemudian gunakan ssh-addseperti biasa.


Tip panas:

Saya selalu lupa apa yang harus diketik untuk perintah ssh-agent di atas, jadi saya membuat alias di .bashrcfile saya seperti ini:

alias ssh-agent-cyg='eval `ssh-agent -s`'

Sekarang alih-alih menggunakan ssh-agent, saya bisa menggunakanssh-agent-cyg

Misalnya

$ ssh-agent-cyg
SSH_AUTH_SOCK=/tmp/ssh-n16KsxjuTMiM/agent.32394; export SSH_AUTH_SOCK;
SSH_AGENT_PID=32395; export SSH_AGENT_PID;
echo Agent pid 32395;
$ ssh-add ~/.ssh/my_pk

Sumber asli perbaikan:

http://cygwin.com/ml/cygwin/2011-10/msg00313.html


3
Anda harus menjalankan evalperintah setiap kali sebelumnya Anda berlari ssh-agent. Saya menggunakan alias sekarang, lihat jawaban yang diperbarui untuk bagaimana saya melakukan ini.
Chris Snow


Saya juga perlu menggunakan spesifikasi ssh alih-alih https (lihat help.github.com/articles/changing-a-remote-s-url )
RunHolt

1
Anda tuan, Anda luar biasa. Terima kasih. ** Saya menghadapi masalah yang sama saat kloning repo bitbucket, aku sudah setup kunci ssh, tapi terus mendapatkan error: fatal: Could not read from remote repository..
Nishant Ghodke

Bekerja untuk saya di windows 10 dan git bash diinstal
desmond13

116

Saya menghadapi masalah yang sama untuk Linux, dan inilah yang saya lakukan:

Pada dasarnya, perintah ssh-agent memulai agen, tetapi itu tidak benar-benar mengatur variabel lingkungan untuk menjalankannya. Itu hanya menampilkan variabel-variabel ke shell.

Kamu butuh:

eval `ssh-agent`

dan kemudian lakukan ssh-add. Lihat Tidak dapat membuka koneksi ke agen otentikasi Anda .



Bekerja untuk saya juga saat mengalami masalah menggunakan boot2docker di Windows.
Veve

Ini yang saya perlukan.
Tom

115

ssh-add dan ssh (dengan asumsi Anda menggunakan implementasi openssh) memerlukan variabel lingkungan untuk mengetahui cara berbicara dengan agen ssh. Jika Anda memulai agen di jendela prompt perintah yang berbeda dengan yang Anda gunakan sekarang, atau jika Anda memulainya dengan salah, ssh-add atau ssh tidak akan melihat bahwa set variabel lingkungan (karena variabel lingkungan diatur secara lokal ke perintah minta sudah diatur dalam).

Anda tidak mengatakan versi ssh yang Anda gunakan, tetapi jika Anda menggunakan cygwin, Anda dapat menggunakan resep ini dari SSH Agent di Cygwin :

# Add to your Bash config file
SSHAGENT=/usr/bin/ssh-agent
SSHAGENTARGS="-s"
if [ -z "$SSH_AUTH_SOCK" -a -x "$SSHAGENT" ]; then
    eval `$SSHAGENT $SSHAGENTARGS`
    trap "kill $SSH_AGENT_PID" 0
fi

Ini akan memulai agen secara otomatis untuk setiap jendela prompt perintah baru yang Anda buka (yang tidak optimal jika Anda membuka beberapa perintah prompt dalam satu sesi, tetapi setidaknya itu akan berfungsi).



9
Saya ditautkan di sini dari pertanyaan SO lainnya. Bisakah saya bertanya mengapa perlu menambahkan ini ke file konfigurasi Bash? Di komputer saya yang harus saya lakukan adalah menjalankan eval $(ssh-agent)dan saya dapat menggunakan ssh tanpa kata sandi untuk setiap jendela terminal baru.
Andy J

Itu seharusnya tidak mungkin, kecuali Anda meluncurkan terminal baru dari terminal itu.
Robin Green

114

Lari

ssh-agent bash
ssh-add

Untuk mendapatkan detail lebih lanjut, Anda dapat mencari

ssh-agent

atau lari

man ssh-agent

7
Saya akan merekomendasikan bahwa Jika Anda bekerja dengan git bash di windows maka coba ini.
Neeraj Sewani

@ neer17 ini memungkinkan saya untuk digunakan ssh-copy-iddi ubuntu. Tidak yakin mengapa saya tidak bisa menambahkan kunci tanpa menggunakan ssh-agentuntuk meluncurkan bash.
SomeGuyOnAComputer

2
Ini untuk Windows! (diuji pada W10pro build 1809 dan git 2.21.0)
Alfabravo

Saya menggunakan ZSH dan ini berfungsi untuk saya:ssh-agent zsh; ssh-add
sirboderafael

97

Coba langkah-langkah berikut:

1) Buka Git Bash dan jalankan: cd ~/.ssh

2) Coba jalankan agen: eval $(ssh-agent)

3) Saat ini, Anda dapat menjalankan perintah berikut: ssh-add -l


9
Ini adalah satu-satunya solusi di sini yang bekerja untuk saya (di windows 7). Pertama saya menggunakan ps aux | grep sshdan killperintah dalam jawaban Rick untuk membunuh agen. Setelah itu ssh-addbekerja tanpa tombol -l (Menggunakan -l memberi kesalahan). eval 'ssh-agent'karena dalam jawaban Rick tidak berhasil, saya harus menggunakan eval $(ssh-agent)seperti pada jawaban Chechoro di sini.
Frug

6
+1 Saya memiliki masalah yang sama persis dengan OP (Windows 7) dan ini adalah satu-satunya solusi yang bekerja untuk saya.
Weblurk


2
@Frug Ini adalah backticks, bukan apostrof; dalam skrip shell yang berarti mengeksekusi apa yang ada di dalamnya. $(ssh-agent)setara dengan `ssh-agent`tetapi lebih mudah dibaca.
MM

96

Alih-alih menggunakan $ ssh-agent -s, saya biasa $ eval `ssh-agent -s`memecahkan masalah ini.

Inilah yang saya lakukan langkah demi langkah (langkah 2 dan seterusnya di GitBash):

  1. Membersihkan folder .ssh saya di C:\user\<username>\.ssh\
  2. Menghasilkan kunci SSH baru
    $ ssh-keygen -t rsa -b 4096 -C "xyz@abc.com"
  3. Periksa apakah ada id proses (ssh agent) yang sudah berjalan.
    $ ps aux | grep ssh
  4. (Opsional) Jika ditemukan di langkah 3, bunuh itu
    $ kill <pids>
  5. Memulai agen ssh
    $ eval `ssh-agent -s`
  6. Menambahkan kunci ssh yang dihasilkan pada langkah 2 ke agen ssh
    $ ssh-add ~/.ssh/id_rsa

3
'eval' tidak dikenali sebagai perintah internal atau eksternal, program yang dapat dijalankan, atau file batch.
Chutipong Roobklom

Anda bisa memulai ulang agen dengan eval ssh-agent -sdan menambahkan kunci lama menggunakan ssh-add ~ / .ssh / id_rsa. Jika Anda membuat kunci SSH baru maka Anda perlu memperbarui kunci itu di semua layanan Anda seperti github, bitbucket, dll.
Mohit Satish Pawar

Apakah ada cara untuk membuat ini bertahan hidup Windows restart? Setelah restart itu tidak berfungsi sampai saya meluncurkan "eval ssh-agent -s" dan "ssh-add ~ / .ssh / id_rsa" lagi.
Michal Vician

1
setelah mencari untuk waktu yang lama, ini adalah solusi yang berhasil
Sujit.Warrier

Penjelasan Hebat!
avivamg

56

Di Windows 10, saya mencoba semua jawaban yang tercantum di sini, tetapi tidak ada yang tampaknya berhasil. Bahkan mereka memberi petunjuk. Untuk memecahkan masalah, Anda hanya perlu 3 perintah. Gagasan dari masalah ini adalah bahwa ssh-add membutuhkan variabel lingkungan SSH_AUTH_SOCK dan SSH_AGENT_PID yang akan ditetapkan dengan jalur file ssh-agent sock saat ini dan nomor pid.

ssh-agent -s > temp.txt

Ini akan menghemat output dari ssh-agent dalam file. Konten file teks akan menjadi seperti ini:

SSH_AUTH_SOCK=/tmp/ssh-kjmxRb2764/agent.2764; export SSH_AUTH_SOCK;
SSH_AGENT_PID=3044; export SSH_AGENT_PID;
echo Agent pid 3044;

Salin sesuatu seperti "/tmp/ssh-kjmxRb2764/agent.2764" dari file teks dan jalankan perintah berikut secara langsung di konsol:

set SSH_AUTH_SOCK=/tmp/ssh-kjmxRb2764/agent.2764

Salin sesuatu seperti "3044" dari file teks dan jalankan perintah berikut secara langsung di konsol:

set SSH_AGENT_PID=3044

Sekarang ketika variabel lingkungan (SSH_AUTH_SOCK dan SSH_AGENT_PID) ditetapkan untuk sesi konsol saat ini jalankan perintah ssh-add Anda dan tidak akan gagal lagi untuk menghubungkan ssh agent.


2
Terima kasih! Inilah yang saya butuhkan.
Isochronous

6
Tidak, masih sama.
Jaskey

3
Langkah-langkah ini sama dengan melakukan 'eval $ (ssh-agent)'
K.Nicholas

2
Memperbaiki Windows 10 saya! Terima kasih!
ntl

1
Ini sebenarnya membantu saya untuk menyelamatkan masalah di Linux ... hanya perlu diganti setolehexport
greg hor

30

Satu hal yang saya temui adalah bahwa evaltidak berfungsi untuk saya menggunakan Cygwin, apa yang berhasil bagi saya adalah ssh-agent ssh-add id_rsa.

Setelah itu saya menemukan masalah bahwa kunci pribadi saya terlalu terbuka, solusi yang berhasil saya temukan untuk itu (dari sini ):

chgrp Users id_rsa

sebaik

chmod 600 id_rsa

akhirnya saya bisa menggunakan:

ssh-agent ssh-add id_rsa

Apakah Anda menggunakan eval `ssh-agent`, dengan backticks di `sekitar ssh-agent, seperti yang ditunjukkan dalam jawaban saya ? Itu bekerja dengan baik bagi saya di Cygwin. Anda tampaknya benar yang ssh-agent ssh-addjuga berfungsi, setidaknya di msysgit Bash. Namun, perhatikan bahwa itu id_rsaadalah kunci default yang digunakan, jadi Anda tidak perlu menentukannya dengan ssh-agent ssh-add id_rsa.

Saya percaya saya telah menggunakan backticks, tetapi bagi saya masih tidak ada dadu
Vnge

1
OMG ANDA MEMECAHKAN FRUSTATION BEBERAPA SAYA. Terima kasih!
Chee Loong Soon

Jawaban ini berhasil untuk saya di bash.
Lsakurifaisu

27

Untuk memperkuat jawaban n3o untuk Windows 7 ...

Masalah saya memang beberapa variabel lingkungan yang diperlukan tidak disetel, dan n3o benar bahwa ssh-agent memberi tahu Anda cara mengatur variabel lingkungan tersebut, tetapi tidak benar-benar mengaturnya.

Karena Windows tidak membiarkan Anda melakukan "eval," inilah yang harus dilakukan:

Arahkan output ssh-agent ke file batch dengan

ssh-agent > temp.bat

Sekarang gunakan editor teks seperti Notepad untuk mengedit temp.bat. Untuk masing-masing dari dua baris pertama: - Masukkan kata "set" dan spasi di awal baris. - Hapus tanda titik koma pertama dan semua yang mengikuti.

Sekarang hapus baris ketiga. Temp.bat Anda akan terlihat seperti ini:

set SSH_AUTH_SOCK=/tmp/ssh-EorQv10636/agent.10636
set SSH_AGENT_PID=8608

Jalankan temp.bat. Ini akan mengatur variabel lingkungan yang diperlukan untuk ssh-add agar berfungsi.



Saya masih dapatkan Could not open a connection to your authentication agent.ketika menjalankan ssh-add di Win10 PowerShell.
Kebman

19

Saya baru saja bekerja. Buka ~/.ssh/configfile Anda .

Tambahkan berikut-

Host github.com
 IdentityFile ~/.ssh/github_rsa

Halaman yang memberi saya petunjuk. Mengatur SSH untuk Git mengatakan bahwa lekukan spasi tunggal penting ... meskipun saya memiliki konfigurasi di sini dari Heroku yang tidak memiliki ruang itu dan berfungsi dengan baik.


1
Ini tidak membantu memasukkan frasa sandi untuk kunci SSH.
alesch

1
Jika Anda tidak ingin memasukkan frasa sandi, buat kunci tanpa kata sandi. Tidak ada gunanya memiliki frasa sandi jika Anda hanya akan menyimpannya dalam skrip Anda.
Paul Becotte

Itulah inti dari menggunakan ssh-agent. Kata sandi untuk kunci Anda disimpan dalam gantungan kunci aman, ditangani oleh ssh-agent.
alesch

Ini jawaban terbaik untuk saya di sini. Punya banyak masalah dengan ssh-agent mulai ribuan kali di Windows 7 dan itu jebakan tidak melakukan trik. Saya tidak keberatan tidak memiliki frasa sandi di komputer pribadi saya di rumah.
Fleshgrinder

18

Jika Anda mengikuti instruksi ini, masalah Anda akan terpecahkan.

Jika Anda menggunakan mesin Mac atau Linux, ketikkan:

eval "$(ssh-agent -s)"

Jika Anda menggunakan mesin Windows, ketikkan:

ssh-agent -s

13

Biarkan saya menawarkan solusi lain. Jika Anda baru saja menginstal Git 1.8.2.2 atau sekitar itu, dan Anda ingin mengaktifkan SSH, ikuti baik-ditulis arah .

Semuanya sampai ke Langkah 5.6 di mana Anda mungkin menemukan sedikit hambatan. Jika agen SSH sudah berjalan, Anda bisa mendapatkan pesan galat berikut saat memulai ulang bash

Could not open a connection to your authentication agent

Jika Anda melakukannya, gunakan perintah berikut untuk melihat apakah lebih dari satu proses ssh-agent sedang berjalan

ps aux | grep ssh

Jika Anda melihat lebih dari satu layanan ssh-agent, Anda harus mematikan semua proses ini. Gunakan perintah kill sebagai berikut (PID akan unik di komputer Anda)

kill <PID>

Contoh:

kill 1074

Setelah Anda menghapus semua proses ssh-agent, jalankan px aux | perintah grep ssh lagi untuk memastikan semuanya hilang, lalu mulai ulang Bash.

Voila, Anda sekarang harus mendapatkan sesuatu seperti ini:

Initializing new SSH agent...
succeeded
Enter passphrase for /c/Users/username/.ssh/id_rsa:

Sekarang Anda dapat melanjutkan pada Langkah 5.7 dan seterusnya.


membuat saya melewati penghalang jalan, tyvm
Jason Fingar

Hanya ingin menambahkan bahwa dalam kasus saya, salah satu item yang tercantum adalah proses grep yang sedang kami lakukan pencarian, tetapi sudah terbunuh setelah dieksekusi. Tidak ada pelesetan yang dimaksudkan.
Ryan Mortensen


13

Untuk pengguna jendela, saya menemukan cmd eval `ssh-agent -s`tidak berfungsi, tetapi menggunakan git bash cukup menyenangkan eval `ssh-agent -s`; ssh-add KEY_LOCATION, dan memastikan layanan windows "OpenSSH Key Management" tidak dinonaktifkan


12

Catatan: ini adalah jawaban untuk pertanyaan ini , yang telah digabungkan dengan yang ini. Pertanyaan itu untuk Windows 7, artinya jawaban saya adalah untuk Cygwin / MSYS / MSYS2. Yang ini tampaknya untuk beberapa unix, di mana saya tidak berharap agen SSH perlu dikelola seperti ini .

Ini akan menjalankan agen SSH dan mengautentikasi hanya saat pertama kali Anda membutuhkannya , tidak setiap kali Anda membuka terminal Bash Anda. Ini dapat digunakan untuk semua program yang menggunakan SSH secara umum, termasuk ssh itu sendiri dan scp. Cukup tambahkan ini ke /etc/profile.d/ssh-helper.sh:

ssh-auth() {
    # Start the SSH agent only if not running
    [[ -z $(ps | grep ssh-agent) ]] && echo $(ssh-agent) > /tmp/ssh-agent-data.sh

    # Identify the running SSH agent
    [[ -z $SSH_AGENT_PID ]] && source /tmp/ssh-agent-data.sh > /dev/null

    # Authenticate (change key path or make a symlink if needed)
    [[ -z $(ssh-add -l | grep "/home/$(whoami)/.ssh/id_rsa") ]] && ssh-add
}

# You can repeat this for other commands using SSH
git() { ssh-auth; command git "$@"; }


2
Proses ssh-agent tampaknya tidak terkait dengan terminal yang sama dengan yang digunakan untuk menjalankannya. Saya kira ps -A | grep ssh-agentatau ps h -C ssh-agentharus digunakan sebagai gantinyaps | grep ssh-agent
alexis

1
Menggunakan tanda hubung dalam nama fungsi mungkin tidak disarankan. Saya tidak tahu mengapa, tetapi baca ini . Sebagai contoh, saya menemukan itu echo ssh-auth | bashakan gagal.
alexis

1
Anda dapat menyederhanakan ini sedikit lebih banyak. Periksa apakah sedang berjalan dan tetapkan variabel env. Dan kemudian tambahkan AddKeysToAgent yes(atau gunakan prompt) ke entri konfigurasi ssh Anda (gunakan Host *untuk semua Host.) Dengan begitu Anda hanya akan dimintai kata sandi SSH jika Anda benar-benar mencoba untuk terhubung jika tidak, Anda mungkin akan diminta kata sandi untuk kata sandi sederhana git diffatau git status.
ST-DDT

2
$HOME/.sshmungkin lebih kuat daripada/home/$(whoami)/.ssh
Ari Sweedler

12

Saya memiliki masalah yang sama Ubuntudan solusi lainnya tidak membantu saya. Saya akhirnya menyadari apa masalah saya. Saya telah membuat sshkunci saya di /root/.sshfolder, Jadi bahkan ketika saya berlari ssh-addsebagai root, itu tidak bisa melakukan pekerjaannya dan terus berkata

Could not open a connection to your authentication agent.

Saya membuat kunci publik dan pribadi ssh di /home/myUsername/folder dan saya gunakan

ssh-agent /bin/sh

lalu aku berlari

ssh-add /home/myUsername/.ssh/id_rsa

dan masalah diselesaikan dengan cara ini.

Catatan: Untuk mengakses repositori gitAnda, tambahkan kata sandi git saat Anda membuat sshkunci ssh-keygen -t rsa -C "your git email here".


9

Gunakan parameter -A ketika Anda terhubung ke server, contoh:

ssh -A root@myhost

dari halaman manual:

-A Enables forwarding of the authentication agent connection.  
   This can also be specified on a per-host basis in a configuration file.

   Agent forwarding should be enabled with caution.  Users with the ability to bypass file permissions on the remote host (for the agent's
   UNIX-domain socket) can access the local agent through the forwarded 
   connection.  An attacker cannot obtain key material from the agent,
   however they can perform operations on the keys that enable them to
   authenticate using the identities loaded into the agent.

Apa yang dilakukan dan mengapa?
erikbwork

sesuai halaman manual ... man ssh ... -A Memungkinkan penerusan koneksi agen otentikasi. Ini juga dapat ditentukan berdasarkan per-host dalam file konfigurasi.
Scott Stensland

8

Solusi dasar untuk menjalankan ssh-agentdijawab dalam banyak jawaban. Namun menjalankan ssh-agentberkali-kali (per setiap terminal yang dibuka atau per login jarak jauh) akan membuat banyak salinan ssh-agentberjalan di memori. Skrip yang disarankan untuk menghindari masalah itu lama dan perlu menulis dan / atau menyalin file yang terpisah atau perlu menulis terlalu banyak string dalam ~/.profileatau ~/.schrc. Izinkan saya menyarankan solusi dua string sederhana:

Untuk sh , bash , dll:

# ~/.profile
if ! pgrep -q -U `whoami` -x 'ssh-agent'; then ssh-agent -s > ~/.ssh-agent.sh; fi
. ~/.ssh-agent.sh

Untuk csh , tcsh , dll:

# ~/.schrc
sh -c 'if ! pgrep -q -U `whoami` -x 'ssh-agent'; then ssh-agent -c > ~/.ssh-agent.tcsh; fi'
eval `cat ~/.ssh-agent.tcsh`

Apa yang ada di sini:

  • cari proses ssh-agentdengan nama dan oleh pengguna saat ini
  • buat file skrip shell yang sesuai dengan memanggil ssh-agentdan menjalankan ssh-agentsendiri jika tidak ada ssh-agentproses pengguna saat ini ditemukan
  • mengevaluasi skrip shell yang dibuat yang mengkonfigurasi lingkungan yang sesuai

Tidak perlu untuk melindungi skrip shell yang dibuat ~/.ssh-agent.tcshatau ~/.ssh-agent.shdari akses pengguna lain karena: komunikasi pertama dengan ssh-agentdiproses melalui soket yang dilindungi yang tidak dapat diakses oleh pengguna lain, dan pada detik pengguna lain dapat menemukan ssh-agentsoket dengan mudah melalui pencacahan file dalam /tmp/direktori. Sejauh tentang akses ke ssh-agentproses itu adalah hal yang sama.


6

Coba yang berikut ini:

ssh-agent sh -c 'ssh-add && git push heroku master'

1
Sepertinya cara bersih untuk melakukan ini.
Leon Grapenthin

6

Baca jawaban @ cupcake untuk penjelasan. Di sini saya hanya mencoba untuk mengotomatiskan perbaikannya.

Jika Anda menggunakan terminal Cygwin dengan BASH, tambahkan yang berikut ke file $ HOME / .bashrc. Ini hanya memulai ssh-agent sekali di terminal Bash pertama dan menambahkan kunci ke ssh-agent. (Tidak yakin apakah ini diperlukan di Linux)

###########################
# start ssh-agent for
# ssh authentication with github.com
###########################
SSH_AUTH_SOCK_FILE=/tmp/SSH_AUTH_SOCK.sh
if [ ! -e $SSH_AUTH_SOCK_FILE ]; then
    # need to find SSH_AUTH_SOCK again.
    # restarting is an easy option
    pkill ssh-agent
fi
# check if already running
SSH_AGENT_PID=`pgrep ssh-agent`
if [ "x$SSH_AGENT_PID" == "x" ]; then
#   echo "not running. starting"
    eval $(ssh-agent -s) > /dev/null
    rm -f $SSH_AUTH_SOCK_FILE
    echo "export SSH_AUTH_SOCK=$SSH_AUTH_SOCK" > $SSH_AUTH_SOCK_FILE
    ssh-add $HOME/.ssh/github.com_id_rsa 2>&1 > /dev/null
#else
#   echo "already running"
fi
source $SSH_AUTH_SOCK_FILE

JANGAN LUPA untuk menambahkan kunci Anda yang benar dalam perintah "ssh-add".


5

Saya punya masalah ini, ketika saya mulai ssh-agent, ketika sudah berjalan. Bingung. Untuk melihat apakah ini masalahnya, gunakan

eval $(ssh-agent)

untuk melihat apakah ini sama dengan apa yang Anda pikir seharusnya. Dalam kasus saya, itu berbeda dari yang baru saya mulai.

Untuk memverifikasi lebih lanjut jika Anda menjalankan lebih dari satu ssh-agent, Anda dapat meninjau:

ps -ef | grep ssh

2
Saya pikir menjalankan eval $(ssh-agent)seharusnya membuat agen baru dengan PID yang berbeda setiap waktu, meskipun saya bisa saja salah.

4

Saya memiliki masalah yang sama ketika saya mencoba untuk membuatnya bekerja pada Windows untuk terhubung ke simpanan via ssh

Inilah solusi yang bekerja untuk saya.

  1. Ternyata saya menjalankan Pageant ssh agent di kotak Windows saya - saya akan memeriksa apa yang Anda jalankan. Saya curiga itu adalah Pageant karena sudah menjadi default dengan Putty dan winScp

  2. Ssh-add tidak berfungsi dari baris perintah dengan agen jenis ini

  3. Anda perlu menambahkan kunci pribadi melalui jendela UI kontes yang dapat Anda peroleh dengan menggandakan ikon Pageant di bilah tugas (setelah dimulai).

  4. Sebelum Anda menambahkan kunci ke Pageant, Anda perlu mengubahnya menjadi format PPK. Instruksi lengkap tersedia di sini. Bagaimana mengkonversi kunci SSH ke format ppk

  5. Hanya itu saja. Setelah saya mengunggah kunci saya ke simpanan saya dapat menggunakan SourceTree untuk membuat repo lokal dan mengkloning remote.

Semoga ini membantu...


3

Saya menyelesaikan kesalahan dengan menghentikan (membunuh) proses git (ssh agent), lalu menghapus instalasi Git, dan kemudian menginstal Git lagi.


2
Saya menduga bahwa yang perlu Anda lakukan hanyalah membunuh semua proses agen yang ada, kemudian mulai kembali, daripada harus menginstal ulang Git.

3

Menggunakan Git Bash di Win8.1E, resolusi saya adalah sebagai berikut:

eval $(ssh-agent) > /dev/null
ssh-add ~/.ssh/id_rsa

Mengapa perlu untuk output /dev/null? Jawaban Anda pada dasarnya melakukan hal yang persis sama dengan yang ini .

Juga, saya ingin menunjukkan bahwa itu ~/.ssh/id_rsaadalah kunci default, jadi Anda tidak harus menentukan ssh-add ~/.ssh/id_rsa, hanya ssh-addharus berfungsi.

Saya mencoba solusi Anda di @Cupcake lingkungan yang sama, itu tidak berhasil. Saya juga tidak mengerti mengapa ini jawabannya, tetapi kecuali saya melakukannya dengan cara ini, itu tidak akan berhasil.
hampir

3

Jika Anda menggunakan Putty, mungkin Anda perlu mengatur opsi "Koneksi / SSH / Auth / Izinkan penerusan agen" menjadi "true".

masukkan deskripsi gambar di sini


3

Ini berhasil untuk saya.

Di jendela CMD, ketikkan perintah berikut:

cd path-to-Git/bin # (for example,cd C:\Program Files\Git\bin)
bash
exec ssh-agent bash
ssh-add path/to/.ssh/id_rsa

3

Untuk bash bawaan Windows 10, saya menambahkan ini ke .bash_profile:

if [ -z $SSH_AUTH_SOCK ]; then
    if [ -r ~/.ssh/env ]; then
            source ~/.ssh/env
            if [ `ps -p $SSH_AGENT_PID | wc -l` = 1 ]; then
                    rm ~/.ssh/env
                    unset SSH_AUTH_SOCK
            fi
    fi
fi

if [ -z $SSH_AUTH_SOCK ]; then
    ssh-agent -s | sed 's/^echo/#echo/'> ~/.ssh/env
    chmod 600 ~/.ssh/env
    source ~/.ssh/env > /dev/null 2>&1
fi

1
Saya tidak tahu mengapa Anda menempelkan begitu banyak teks jika Anda bisa saja mengatakan untuk menelepon $(ssh-agent -s)untuk mengatur lingkungan agen.
erikbwork

1
Ini bekerja untuk saya ketika saya menggunakannya pertama kali. Tetapi setelah sistem dinyalakan kembali, itu justru menyebabkan masalah menjadi lebih buruk. Dengan ssh tidak berfungsi sama sekali lagi. Tidak direkomendasikan.
yspreen
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.