ssh-add complain: Tidak dapat membuka koneksi ke agen otentikasi Anda


151

Saya sudah mencoba untuk ssh-addmengerjakan RaspberryPi yang menjalankan Raspbian.

Saya bisa mulai ssh-agent, ketika saya melakukannya memberikan output berikut ke terminal:

SSH_AUTH_SOCK=/tmp/ssh-06TcpPflMg58/agent.2806; export SSH_AUTH_SOCK;
SSH_AGENT_PID=2807; export SSH_AGENT_PID;
echo Agent pid 2807;

Jika saya menjalankan, ps aux | grep sshsaya bisa melihatnya sedang berjalan.

Lalu saya mencoba menjalankan ssh-adduntuk menambahkan frasa sandi utama saya, dan saya mendapatkan yang berikut:

Could not open a connection to your authentication agent.

Ada ide?


6
Cobaeval $(ssh-agent)
Ulrich Dangel

Jawaban:


224

Shell Anda dimaksudkan untuk mengevaluasi output kode shell oleh ssh-agent. Jalankan ini sebagai gantinya:

eval "$(ssh-agent)"

Atau jika Anda sudah memulai ssh-agent, salin tempel ke prompt shell Anda (dengan asumsi Anda menjalankan shell seperti Bourne).

sshperintah perlu tahu cara berbicara dengan ssh-agent, mereka tahu itu dari SSH_AUTH_SOCKvariabel lingkungan.


Terima kasih, saya tidak begitu mengerti cara kerjanya. Itu sangat dihargai.
Daniel Groves

2
Atau Anda dapat memasukkan bash ssh-agent dan setelah ssh-add akan bekerja
RaduM

@Stephane, apakah saya mengerti benar bahwa perintah ssh-agent hanya mencetak output dari eksekusi sementara versi eval benar-benar menjalankan perintah?
Denys S.

5
@DenysS Ya tidak, ia melakukan pengaturannya dan kemudian memberi tahu shell Anda bagaimana memperbarui lingkungannya untuk dapat menghubunginya. Itu tidak bisa melakukannya dengan sendirinya. Ini dapat memulai shell baru dengan lingkungan yang diperbarui (itulah yang ssh-agent bashdilakukannya), tetapi tidak dapat memperbarui memori dari proses terpisah yang menjalankan perintah asing (shell Anda sudah berjalan).
Stéphane Chazelas

@StephaneChazelas, jika ssh-agent saya dijalankan saat boot tetapi saya masih harus mengevaluasi di shell saya apakah ini berarti bahwa itu tidak dievaluasi secara otomatis untuk setiap shell dan harus dikonfigurasi entah bagaimana oleh pengguna root?
Denys S.

27

Coba yang ini:

$ ssh-agent /bin/sh
$ ssh-add $yourkey

5
Ini sebenarnya bekerja untuk saya di mana tidak ada jawaban lain yang berfungsi.
Joseph Snow

2
Jika Anda menggunakan fishshell, jawaban ini berfungsi. ssh-agent /usr/bin/fish.
slackmart

1
Saya mendapatkan kesalahan: " Tidak dapat membuka koneksi ke agen otentikasi Anda. "
IgorGanapolsky

@ Slackmart Jika Anda menginstal ikan di BSD, lokasinya /usr/local/bin/fish(sebagai alternatif /usr/ports/shells/fish). Terima kasih whereisatas bantuannya karena telah membantu saya mengetahuinya.
cjm

Hebat @cjm, saya menggunakan Slackware Linux, dan itulah jalan yang cocok untuk saya.
slackmart

12

Pertanyaan ini juga sangat baik dibahas di Stackoverflow .

eval `ssh-agent -s`

ssh-add

Anda lupa tanda kutip di sekitar `...`. Tanpa mereka, operator split + glob dipanggil pada output.
Stéphane Chazelas

6

Jika menggunakan csh sebagai shell ( FreeBSD PI ) ini bisa berfungsi:

eval `ssh-agent -c`

selanjutnya Anda hanya perlu melakukan sesuatu seperti:

ssh-add ~/.ssh/id_rsa

Saya mendapatkan kesalahan: " Tidak dapat membuka koneksi ke agen otentikasi Anda. "
IgorGanapolsky

2

Anda juga dapat menggunakan sintaks berikut:

ssh-agent sh -c 'ssh-add && echo Do some stuff here.'

Ini tidak berfungsi untuk saya, jika Anda pergi ssh-agent sh -c "ssh-add -l"itu akan memberi tahu Anda tidak memiliki identitas.
Ain Tohvri

Karena Anda harus menambahkannya terlebih dahulu, misalnya: ssh-agent sh -c "ssh-add && ssh-add -l"akan mencetak identitas Anda.
kenorb

1

Coba ini: buka C:\$Installation_Folder$\Git\cmd dan jalankan:

start-ssh-agent 

Ini akan membuka perintah cmd dan menjalankan ssh-agentcara yang benar.

ssh-add ~/.ssh/id_rsa kemudian harus bekerja.


" bash: start-ssh-agent: command not found "
IgorGanapolsky

1

Ini membingungkan, dan memiliki 2 kemungkinan jawaban yang baik, tergantung pada apakah pengguna berusaha untuk menambahkan kunci ssh di Linux atau di Windows (seperti saya). Ini mungkin tidak menjawab OP, tetapi merupakan perluasan untuk git-bash. Saya menjalankan Windows dan Ubuntu untuk pengembangan, dan instalasi git saya sedikit berbeda di masing-masing.

Coba ini: pergi ke C: \ $ Installation_Folder $ \ Git \ cmd dan jalankan:

start-ssh-agent Ini akan membuka perintah cmd dan menjalankan ssh-agent dengan cara yang benar.

.. adalah jawaban Windows yang bagus, tetapi gagal menentukan bahwa Anda diharapkan untuk pergi melalui Windows Explorer untuk menemukan folder instalasi Git, dan menjalankan shell Windows akan terbuka setelah menyelesaikan langkah 1.
"buka C: \ $ Installation_Folder $ \ Git \ cmd "

Langkah 2: Anda hanya perlu mengklik dua kali

start-ssh-agent

Pada langkah 3, Anda kembali ke git-bash atau emulator terminal * nix mana pun yang Anda jalankan dan jalankan ssh-add. Jika Anda menggunakan nama default untuk kunci publik ssh, Anda tidak perlu menambahkan nama karena ssh-add menggunakan itu secara otomatis.


1

Ada beberapa cara jika Anda ingin menggunakan identitas dengan sudo, misalnya sudo npm install.

Jauh , tetapi juga memberi Anda akses root sehingga Anda tidak perlu menggunakan sudobanyak.

  1. Jalankan
    sudo ssh-agent bash
    Ini akan meminta kata sandi Anda dan setelah itu akan berjalan ssh-agentdengan hak superuser,
  2. Arahkan ke folder .ssh pengguna Anda
    cd /home/user/.ssh
  3. Dari sana Anda bisa lari

    ssh-add id_rsa
    npm install git+ssh://git@YOUR-PROJECT-URL -g && npm link PROJECT-NAME
    

Cara singkat , hanya pengguna Anda (kecuali jika Anda ingin banyak sudo)

eval "$(ssh-agent)"
ssh-add
sudo SSH_AUTH_SOCK="$SSH_AUTH_SOCK" npm install git+ssh://git@PROJECT-URL -g && sudo npm link PROJECT-NAME

exportdan evalbekerja sama baiknya dengan shell login root yang disediakan root seperti Bourne. Jika shell root adalah csh atau tcsh, gunakaneval `ssh-agent -c`
Stéphane Chazelas

Perhatikan bahwa Anda juga dapat memberikan rootakses ke agen ssh Anda dengan melakukansudo SSH_AUTH_SOCK="$SSH_AUTH_SOCK" npm install...
Stéphane Chazelas

Mencoba keduanya juga bash adalah shell lagi dan tidak berfungsi dengan baik. semua pengguna di instance debian jessie saya termasuk root diatur untuk menggunakan bash secara default.
Belldandu

Apa yang kamu coba? eval "$(ssh-agent)"saat prompt bash shell berjalan karena root akan berfungsi. Anda jelas perlu menjalankan sshdari shell itu atau turunannya sehingga mereka mewarisi SSH_AUTH_SOCK env var. eval "$(sudo ssh-agent)"; sudo ssh...tidak akan berfungsi karena sudosecara default tidak lulus SSH_AUTH_SOCK env var.
Stéphane Chazelas

Saya mencoba eval "$(ssh-agent)"sakit melihat nanti untuk melihat apakah ada semacam kesalahan konfigurasi. Meskipun cara saat ini saya telah memberikan panduan ini memungkinkan kontrol gratis atas pengguna yang Anda inginkan karena Anda sudah root dan dapat mengakses semua pengguna id_rsa yang ada di server. Jadi begitu saya membuatnya berfungsi dengan baik, edit jawaban saya.
Belldandu
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.