Di mana kunci SSH pribadi / publik saya di UNIX?

16

Saya mulai memahami bagaimana RSA dan sistem kunci publik / swasta bekerja, dan saya bertanya-tanya di mana kunci SSH pribadi dan publik saya disimpan. Ketika saya pergi ke direktori home saya, dan saya browse direktori .ssh saya (cd .ssh), saya hanya melihat file "known_hosts", yang saya kira berisi kunci publik dari berbagai server SSH jarak jauh yang saya tahu.

Di mana saya dapat menemukan kunci-kunci ini? Saya bahkan tidak ingat membuat mereka, tetapi karena saya sudah membuat koneksi ssh sebelumnya, mereka pasti ada di suatu tempat.

Saya menggunakan OpenSSH_5.2p1 dengan MAC OS 10.6.

Terima kasih!

Michael Eilers Smith
sumber

Jawaban:

14

~/.ssh/id_rsadan ~/id_rsa.pubbiasanya. Tapi itu tidak mengikuti bahwa ssh harus membuat pasangan dan menyimpannya: ssh pada dasarnya menggunakan protokol SSL, yang menetapkan kunci sesi menggunakan algoritma pertukaran kunci Diffie / Hellman atau beberapa varian. Itu berarti jabat tangan mengatur koneksi menghasilkan kunci sesi dan membuangnya ketika sesi selesai.

Baca tentang algoritme, ini cukup bagus: menggunakan matematika yang cukup sederhana, itu membuat kunci yang dikenal untuk kedua ujung koneksi tanpa pernah mengirim kunci melalui koneksi.

Charlie Martin
sumber
Apakah itu berarti bahwa jika saya tidak pernah diminta untuk membuat kunci SSH RSA tidak pernah digunakan? Dengan kata lain, bahwa beberapa algoritma asimetris digunakan untuk membagikan kunci sesi, tetapi bahwa kunci publik / pribadi sementara untuk koneksi tidak disimpan di komputer saya?
Benar sekali. Sebenarnya, enkripsi itu simetris - algoritma asimetris tidak cocok untuk streaming. Diffie-Hellman digunakan untuk menghasilkan kunci sesi untuk enkripsi simetris. Jika Anda menggunakan pasangan kunci publik / pribadi, pasangan itu digunakan dalam jabat tangan lain untuk membuat kunci sesi untuk algoritma simetris.
Charlie Martin
@mieli: Tidak. Awalnya tidak pernah dibuat. publickeyhanya satu metode otentikasi yang mungkin banyak; jika Anda cukup login menggunakan passwordatau keyboard-interactive, kata sandi itu sendiri dikirim. (Catatan: Jangan membingungkan kunci pengguna, kunci host, dan kunci sesi.)
user1686
@grawity kami sebagian besar setuju di sini tapi mari kita sedikit berhati-hati. Pertukaran kunci Diffie-Hellman terkait dengan RSA dan algoritma enkripsi asimetris lainnya dan pada dasarnya asimetris, karena kedua sisi pertukaran memiliki "setengah" dari perjanjian akhirnya. Mereka memang memiliki dua bagian kunci, dan kunci akhirnya dan proses yang tepat untuk membangunnya dibuang di akhir sesi. Mereka bukan, bagaimanapun, bagian publik dan pribadi dari pasangan RSA.
Charlie Martin
4

Kunci ssh publik dan pribadi pribadi Anda biasanya disimpan di:

$HOME/.ssh/id_dsa     (private key)
$HOME/.ssh/id_dsa.pub (public key)

Atau mereka bisa id_rsadan id_rsa.pubjika Anda membuat kunci RSA daripada kunci DSA (OpenSSH mendukung kedua bentuk).

Tetapi fakta bahwa Anda telah membuat koneksi ssh sebelumnya tidak menyiratkan bahwa Anda memiliki kunci ssh. Jika sshperintah tidak dapat menemukan kunci pribadi Anda, itu akan meminta Anda untuk kata sandi untuk sistem jarak jauh. Ini kurang aman daripada menggunakan kunci.

Anda biasanya harus membuat kunci pribadi ssh Anda dengan frasa sandi. Jika Anda membuatnya tanpa frasa sandi, seseorang yang mendapatkan salinan kunci pribadi Anda dapat menyamar sebagai Anda. ssh-agentmemungkinkan Anda menggunakan kunci dengan frasa sandi tanpa harus memasukkan kembali frasa sandi Anda setiap kali menggunakannya.

Keith Thompson
sumber
2

Jika Anda tidak membuat keypair, Anda mungkin tidak memilikinya .

Lalu lintas SSH2 dienkripsi dengan kunci sesi simetris yang dibuat menggunakan DH, algoritma ECDH atau pertukaran kunci GSSAPI. Baik kunci host maupun kunci pengguna tidak digunakan untuk mengenkripsi data - satu-satunya tujuan mereka adalah otentikasi .

Sekarang ingat bahwa SSH mendukung beberapa metode otentikasi: selain itu publickey, hampir semua server menerima yang sederhana passworddan / atau keyboard-interactive, di mana tidak ada pembuatan atau penggunaan kunci - kata sandi hanya dikirim ke server jarak jauh untuk verifikasi.

Dengan kata lain, "karena saya sudah membuat koneksi ssh sebelumnya, mereka pasti ada di suatu tempat" tidak benar - keypair pengguna tidak diperlukan untuk membuat koneksi.


Jika Anda benar-benar membuat keypair, kemungkinan akan di ~/.ssh/id_*- misalnya, id_rsauntuk keypair RSA default, id_ecdsauntuk ECDSA, id_dsauntuk DSA. Meskipun file-file ini mengandung bagian privat dan publik dari keypair, bagian publik biasanya secara otomatis diekstraksi menjadi id_*.pubfile terpisah untuk kenyamanan ( id_rsa.pubuntuk id_rsadan seterusnya).

pengguna1686
sumber