Bagaimana cara menghapus kunci ssh?

154

Saat ini saya memiliki kunci SSH lama yang diunggah di server. Masalahnya adalah saya kehilangan ~/.sshdirektori saya (dengan yang asli id_rsadan id_rsa.pubfile).

Akibatnya, saya ingin menghapus kunci SSH lama langsung di server dan mengunggah yang baru.

Saya mencoba perintah berikut ini tanpa hasil:

$> ssh-add -D

masukkan deskripsi gambar di sini

Apakah ada cara untuk menghapus kunci SSH sepenuhnya?

pengguna1364743
sumber
Dengan apa ssh-add -d?
user2196728
5
sial, ini ssh-add -D, huruf besar
Alexander Mills
Periksa soket Anda yang digunakan oleh ssh-agent Anda (1).
Dwight Spencer

Jawaban:

129

Perhatikan bahwa setidaknya ada dua laporan bug untuk ssh-add -d/-D tidak menghapus kunci:

Masalah sebenarnya adalah:

ssh-add -d/-Dhanya menghapus kunci yang ditambahkan secara manual dari gnome-keyring.
Tidak ada cara untuk menghapus kunci yang ditambahkan secara otomatis.
Ini adalah bug asli, dan masih pasti ada.

Jadi, misalnya, jika Anda memiliki dua identitas ssh yang dimuat secara otomatis berbeda yang dikaitkan dengan dua akun GitHub yang berbeda - katakan untuk kantor dan untuk rumah - tidak ada cara untuk beralih di antara mereka. GitHub mengambil yang pertama yang cocok, sehingga Anda selalu tampil sebagai pengguna 'rumah' Anda di GitHub, tanpa ada cara untuk mengunggah sesuatu ke proyek yang berjalan.

Mengizinkan ssh-add -dmenerapkan kunci yang dimuat secara otomatis (dan ssh-add -t Xmengubah masa pakai kunci yang dimuat secara otomatis), akan memulihkan perilaku yang diharapkan sebagian besar pengguna.


Lebih tepatnya, tentang masalah ini:

Pelakunya adalah gpg-keyring-daemon:

  • Ini merongrong operasi normal ssh-agent, sebagian besar hanya sehingga bisa muncul kotak cantik di mana Anda dapat mengetikkan frasa sandi untuk kunci ssh terenkripsi.
  • Dan itu menelusuri .sshdirektori Anda , dan secara otomatis menambahkan kunci yang ditemukannya ke agen Anda.
  • Dan itu tidak akan membiarkan Anda menghapus kunci-kunci itu.

Bagaimana kita membenci ini? Mari kita tidak menghitung cara - hidup ini terlalu singkat.

Kegagalan diperparah karena klien ssh yang lebih baru secara otomatis mencoba semua kunci di ssh-agent Anda saat menghubungkan ke host.
Jika ada terlalu banyak, server akan menolak koneksi.
Dan karena gnome-keyring-daemon telah memutuskan untuk dirinya sendiri berapa banyak kunci yang Anda inginkan untuk dimiliki oleh ssh-agent Anda, dan telah memuatnya secara otomatis, DAN TIDAK AKAN MEMBIARKAN ANDA MENGHAPUSKAN MEREKA, Anda bersulang.

Bug ini masih dikonfirmasi di Ubuntu 14.04.4, baru-baru ini dua hari yang lalu (21 Agustus 2014)


Solusi yang mungkin:

  • Lakukan ssh-add -Duntuk menghapus semua kunci yang Anda tambahkan secara manual . Ini juga mengunci kunci yang ditambahkan secara otomatis, tetapi tidak banyak digunakan karena gnome-keyringakan meminta Anda untuk membuka kunci ketika Anda mencoba melakukan a git push.
  • Arahkan ke ~/.sshfolder Anda dan pindahkan semua file utama Anda kecuali yang ingin Anda identifikasi ke dalam folder terpisah yang disebut cadangan. Jika perlu Anda juga dapat membuka kuda laut dan menghapus kunci dari sana.
  • Sekarang Anda harus bisa melakukannya git pushtanpa masalah.

Solusi lain:

Yang benar-benar ingin Anda lakukan adalah mematikan gpg-keyring-daemonsemuanya.
Buka System --> Preferences --> Startup Applications, dan batalkan pilihan kotak " SSH Key Agent (Gnome Keyring SSH Agent)" - Anda harus menggulir ke bawah untuk menemukannya.

Anda masih akan mendapatkan ssh-agent, hanya sekarang ia akan berperilaku waras: tidak ada kunci yang dimuat secara otomatis, Anda menjalankan ssh-add untuk menambahkannya, dan jika Anda ingin menghapus kunci, Anda bisa. Bayangkan itu.

Komentar ini sebenarnya menyarankan:

Solusinya adalah menjaga gnome-keyring-managerdari tidak pernah memulai, yang anehnya sulit akhirnya dicapai dengan menghapus izin eksekusi file program.


Ryan Lue menambahkan kasus sudut lain yang menarik di komentar :

Dalam hal ini membantu siapa pun: Saya bahkan mencoba menghapus id_rsadan id_rsa.pubfile sama sekali, dan kuncinya masih muncul.

Ternyata gpg-agentcaching mereka di ~/.gnupg/sshcontrolfile ; Saya harus menghapusnya secara manual dari sana.

Itu adalah kasus ketika parakeygrip telah ditambahkan seperti di sini .

VONC
sumber
1
Opsi lain di Ubuntu 14-16 adalah menggunakan gui 'Kata Sandi dan kunci' (Anda dapat mencari ssh untuk menemukannya). Pilih misalnya kunci OpenSS, lalu klik kanan pada tombol dan pilih hapus. Anda mungkin perlu me-restart sistem Anda untuk melihatnya dihapus.
user3257693
2
Mengapa info ini tentang ssh-agentdan ssh-addjawaban yang dipilih? Poster asli mengatakan dia ingin remove the old SSH key directly on the server and upload a new one. Kedengarannya dia ingin mengedit ~/.ssh/authorized_keyspada remote host.
H2ONaCl
1
Jawaban ini menuntun saya untuk memecahkan masalah yang muncul dengan ssh forwarding diaktifkan. Pergi dari mesin Ubuntu 16,04 ke sistem debian di mana semua kredensial ssh sedang diteruskan git cloneadalah menggunakan kunci pertama dalam rantai bukannya versi dalam file konfigurasi pada kotak Ubuntu. Kunci buruk disedot secara otomatis dan diteruskan ke kotak Debian.
redfive
1
Ini adalah rasa sakit yang nyata di belakang. Saya sedang mengerjakan proyek perusahaan dan dikontrak untuk bekerja di bawah perusahaan lain. Ini hanya menambah waktu terbuang untuk mengelola keduanya. Saya berharap perbaikan segera hadir!
joshlsullivan
1
Dalam hal ini membantu siapa pun: Saya bahkan mencoba menghapus id_rsadan id_rsa.pubfile sama sekali, dan kuncinya masih muncul. Ternyata gpg-agent sedang menyimpannya dalam ~/.gnupg/sshcontrolfile; Saya harus menghapusnya secara manual dari sana.
Ryan Lue
10

Jika Anda mencoba melakukan operasi terkait ssh dan mendapatkan kesalahan berikut:

$ git fetch
no such identity: <ssh key path>: No such file or directory

Anda dapat menghapus kunci ssh yang hilang dari agen ssh Anda dengan yang berikut ini:

$ eval `ssh-agent -s`  # start ssh agent
$ ssh-add -D <ssh key path>  # delete ssh key
Derek Soike
sumber
9

Kecuali jika saya salah paham, Anda kehilangan .sshdirektori yang berisi kunci pribadi Anda di mesin lokal Anda dan karenanya Anda ingin menghapus kunci publik yang ada di server dan yang memungkinkan login berbasis kunci. Dalam hal ini, itu akan disimpan dalam .ssh/authorized_keysfile di direktori home Anda di server. Anda dapat mengedit file ini dengan editor teks dan menghapus baris yang relevan jika Anda dapat mengidentifikasinya (bahkan lebih mudah jika hanya itu entri!). Saya harap kunci itu bukan satu-satunya metode akses Anda ke server dan Anda memiliki cara lain untuk masuk dan mengedit file. Anda dapat secara manual menambahkan kunci publik baru ke authorised_keysfile atau menggunakan ssh-copy-id. Apa pun itu, Anda perlu mengatur kata sandi untuk akun Anda di server, atau beberapa identitas lain atau metode akses untuk sampai ke authorized_keysfile di server.

ssh-addmenambahkan identitas ke agen ssh Anda yang menangani pengelolaan identitas Anda secara lokal dan "koneksi ke agen diteruskan melalui login jarak jauh SSH, dan dengan demikian pengguna dapat menggunakan hak istimewa yang diberikan oleh identitas di mana saja dalam jaringan dengan cara yang aman." (halaman manual), jadi saya tidak berpikir itu yang Anda inginkan dalam kasus ini. Tidak ada cara untuk mendapatkan kunci publik Anda ke server tanpa Anda memiliki akses ke server tersebut melalui login ssh sejauh yang saya tahu.

Tim
sumber
Saya menghapus file ini dan saya masih bisa terhubung. Jadi jelas tidak ada di sini ... Itu adalah kunci yang ditambahkan secara otomatis tetapi masih belum ada di mana pun.
Larry
5

Saya membuka aplikasi "Kata Sandi dan Kunci" di Unity saya dan menghapus kunci yang tidak diinginkan dari Kunci Aman -> kunci OpenSSH Dan mereka secara otomatis telah dihapus dari ssh-agent-l juga.

Anton Balashov
sumber
2
Berhati-hatilah karena ini juga menghapus mereka dari direktori~/.ssh
Peter V. Mørch
1

Saya dapat mengkonfirmasi bahwa bug ini masih ada di Ubuntu 19.04. Solusi yang disarankan oleh @VonC bekerja dengan sempurna, meringkas untuk versi saya:

  • Klik pada tab Aktivitas di sudut kiri atas
  • Pada kotak pencarian yang muncul, mulailah mengetik "aplikasi startup"
  • Klik ikon "Aplikasi Startup"
  • Pada kotak yang muncul, pilih aplikasi pengelola kunci gnome (tidak dapat mengingat nama persis pada GUI tetapi cukup khas) dan hapus.

Apa yang saya lakukan selanjutnya adalah mencoba ssh-add -Dlagi, dan setelah reboot ssh-add -lmemberi tahu saya Agen tidak memiliki identitas. Saya mengkonfirmasi bahwa saya masih ssh-agentmenjalankan daemon ps aux | grep agent. Jadi saya menambahkan kunci yang paling sering saya gunakan dengan GitHub ( ssh-add ~/.ssh/id_ecdsa) dan semuanya baik-baik saja!

Sekarang saya dapat melakukan operasi normal dengan repositori saya yang paling sering digunakan, dan jika saya kadang-kadang memerlukan akses ke repositori lain yang menggunakan kunci RSA, saya hanya mendedikasikan satu terminal untuk itu export GIT_SSH_COMMAND="ssh -i /home/me/.ssh/id_rsa.pub". Terpecahkan! Kredit diberikan ke @VonC karena menunjukkan bug dan solusinya.

Nagev
sumber
1

Periksa kunci .ssh atau tidak di sistem Anda

  1. Buka folder -> / Pengguna / administrator /.ssh/id_ed25519.pub

Jika Tidak dari

  1. Buka Terminal.

Lewat di terminal

  1. Periksa pengguna -> ssh -T [email protected]

Hapus Kunci .ssh yang ada

  1. Hapus Kunci .ssh yang ada -> rm ~ / .ssh / github_rsa.pub

Membuat baru

  1. Buat Kunci .ssh Baru -> ssh-keygen -t rsa -b 4096 -C "[email protected]"

  2. Kunci publik telah disimpan di "/ Pengguna / administrator /.ssh/id_ed25519.pub."

  3. Buka jalur tersimpan kunci Publik.
  4. Salin .ssh Key -> GitLab Account -> Setting -> SSH Key -> Add key
  5. Tes lagi dari terminal -> ssh -T [email protected]
Niraj Paul
sumber
0

Solusi untuk saya (OpenSuse Leap 42.3, KDE) adalah mengubah nama folder ~/.gnupg yang ternyata berisi kunci dan profil yang di-cache. Setelah KDE keluar / masuk, ssh-add / agent berjalan kembali dan folder dibuat dari awal, tetapi semua kunci lama sudah tidak ada.

Saya tidak berhasil dengan pendekatan lain.

Doug0
sumber