Bagaimana kunci publik "dikirim" ke server, dan bagaimana kunci pribadi "digunakan" untuk SSH?

11

Ada dua mesin Linux, A dan B. Script berjalan pada Kebutuhan untuk dapat SSH ke B. Jadi A menghasilkan kunci publik (mungkin ssh-keygen-generated id_rsa.pub), dan kemudian menggunakan kunci pribadi masing-masing (lagi, mungkin id_rsa) untuk membuat koneksi SSH.

Jika sesuatu yang saya katakan di atas salah atau menyesatkan, silakan mulai dengan mengoreksi saya!

Dengan asumsi saya kurang lebih tepat sasaran:

  • Bagaimana A "memberi" B kunci publik ( id_rsa.pub)? Apakah ini harus berupa proses manual, atau dapatkah itu dilakukan secara otomatis? Kalau manual, bagaimana prosesnya? Jika otomatis, apa perintahnya? Ketika B "mendapatkan" kunci publik ini, ke mana ia pergi atau disimpan?
  • Ketika memulai koneksi SSH ke B, bagaimana A "menggunakan" kunci privat ( id_rsa) sebagai bagian dari koneksi itu?
pengguna3178622
sumber
3
Mengapa penjelasan downvote tidak? Ini menunjukkan penelitian, adalah SSCCE , dan setahu saya, bukan duplikat. Jika Anda tidak setuju, dan menganggap ini duplikat, berikan tautan ke pertanyaan yang menurut Anda duplikat!
user3178622
Meskipun saya tidak mengundurkan diri dan tidak menganggap pertanyaan ini buruk, mungkin Stack Keamanan Informasi akan menjadi tempat yang lebih cocok.
MC10
3
Saya juga tidak memilih, tetapi saya mengerti mengapa seseorang melakukannya. Ini adalah metode login yang banyak digunakan, sementara saya setuju bahwa hasil pencarian Google berantakan dengan cara membuatnya berfungsi, dan bukan cara kerjanya artikel .. Dimungkinkan untuk menemukan info yang Anda cari.
Tyson
5
Gagasan SSCCE tidak benar-benar berlaku untuk pertanyaan yang bukan tentang kode.
Scott
2
Bukan duplikat tetapi terkait: superuser.com/questions/383732/how-does-ssh-encryption-work . Mungkin menjawab bagian kedua dari pertanyaan (bagaimana kunci pribadi digunakan)
Jay

Jawaban:

5

ssh-keygenmenghasilkan kunci publik dan kunci pribadi, yang awalnya hanya berada secara lokal. Memberikan kunci publik ke host lain adalah sesuatu yang perlu dilakukan pengguna secara manual, baik dengan mengirimkannya ke seseorang yang bertanggung jawab untuk server B, atau jika Anda memiliki akun dengan kata sandi, Anda bisa login dan menaruhnya di sana sendiri. Untuk mengizinkan login tanpa kata sandi ke server B, Anda perlu menambahkan kunci publik Anda ke file ~ / .ssh / Authorized_key di server B (satu kunci publik per baris, bisa ada sejumlah kunci dalam file ini). Ada perintah linux ssh-copy-idyang akan menyalin ID untuk Anda dan memasukkannya ke dalam file.

Secara default, ssh akan menggunakan file ~ / .ssh / id_XXX sebagai kunci pribadi Anda. XXX dapat berupa rsa, dsa, atau protokol apa pun yang menghasilkan kunci. IIRC, dsa sudah tua dan tidak boleh digunakan. Jika Anda ingin menggunakan kunci pribadi yang berbeda, Anda bisa menentukannya di perintah ssh Anda menggunakan -i. Selama kunci privat yang digunakan cocok dengan kunci publik pada mesin jarak jauh (dalam file Authorized_key untuk akun pengguna yang Anda masuki), maka Anda tidak perlu memberikan kata sandi.

BamaPookie
sumber
Terima kasih @BamaPookie - beberapa tindak lanjut: (1) ketika ssh-keygendijalankan, Anda menyebutkan bahwa dua tombol "berada hanya secara lokal"? Dimana?!? Seperti, apa folder dapat menavigasi ke dan melihat id_rsa.pubdan id_rsa? (2) Saya pikir ssh-addadalah perintah untuk menambahkan kunci publik authorized_keys, bukan? Apa perbedaan antara ssh-copy-iddan ssh-add? Terima kasih lagi!
user3178622
2
@ user3178622 re '1' Saya tidak memilikinya di depan saya tetapi sepertinya ~/.ssh/id_rsa re '2', ssh-add bukan untuk menambahkan ke berwenang_kunci, itu untuk menambahkan ke gantungan kunci .. Saya belum pernah menggunakan ssh -Tapi. ssh-add berkaitan dengan memungkinkan Anda untuk tidak harus memasukkan frasa sandi setiap kali Anda menggunakan kunci yang memerlukan frasa sandi. Jadi jika kunci ssh Anda tidak memerlukan keyphrase maka saya kira tidak ada alasan untuk menggunakan ssh-add dan saya pikir Anda masih perlu menggunakan ssh-copy-id atau melakukan manual menyalin kunci publik ke authorized_keys
barlop
2
ssh-keygen akan bertanya kepada Anda di mana harus menyimpan file, tetapi lokasi default di ~ / .ssh / ssh-copy-id menyalin kunci publik ke host jarak jauh. ssh-add menambahkan kunci pribadi ke keyring lokal Anda. Menambahkan kunci pribadi ke keyring lokal Anda berarti bahwa itu akan diperiksa secara default ketika mencoba koneksi ssh (yaitu, tanpa harus menentukannya dengan -i).
BamaPookie
1
@BamaPookie Di mana Anda menulis "Menambahkan kunci pribadi ke keyring lokal Anda berarti bahwa itu akan diperiksa secara default ketika mencoba koneksi ssh (yaitu, tanpa harus menentukannya dengan -i)." <--- Perlu diperjelas bahwa Saya pikir maksud Anda itu mengubah kunci privat default yang dipilih, sehingga alih-alih menjadi id_rsa, itu dari keyring. (Tentu saja, tanpa ssh-add Anda masih tidak perlu menentukan kunci pribadi dengan -i, itu masih akan memiliki default, hanya default yang berbeda).
barlop
3

Ada dua mesin Linux, A dan B. Script yang berjalan pada A harus dapat SSH menjadi B. Jadi A menghasilkan kunci publik (mungkin id_rsa.pub.pub yang dihasilkan ssh-keygen), dan kemudian menggunakan kunci privasinya masing-masing ( lagi, mungkin id_rsa) untuk membuat koneksi SSH.

Jika sesuatu yang saya katakan di atas salah atau menyesatkan, silakan mulai dengan mengoreksi saya!

Dengan asumsi saya kurang lebih tepat sasaran:

ya

tetapi B membutuhkan kunci publik A untuk dicantumkan dalam file B's berwenang_ke agar A dapat terhubung ke B

Anda juga dapat menghapus id_rsa.pub dan ssh ke B dan itu masih akan berfungsi, karena kunci publik dibuat segar dengan setiap koneksi ssh dan tidak disimpan dalam id_rsa.pub

Bagaimana A "memberi" B kunci publiknya (id_rsa.pub)? Apakah ini harus berupa proses manual, atau dapatkah itu dilakukan secara otomatis? Kalau manual, bagaimana prosesnya? Jika otomatis, apa perintahnya?

manual - sesuatu seperti

dari-

cat ~/.ssh/id_rsa.pub | ssh USER@HOST "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

atau bahkan lebih manual, untuk memecah perintah

A $ cat id_rsa.pub | ssh user@host 'cat>~/a.a'

lalu pada B, pastikan ~ / .ssh ada kemudian lakukan cat a.a >> ~/.ssh/authorized_keys

dan Anda dapat memberi otorisasi pada tombol B sebelum dan sesudah untuk memastikan kunci terdaftar.

Atau Anda dapat mengirim email id_rsa.pub ke akun email, lalu dari B, B dapat memeriksa email dan menambahkan konten id_rsa.pub ke file otor_keys-nya

secara otomatis

Perintah ssh-copy-id

Anda harus bisa ssh in, jadi Anda perlu akses kata sandi

Alih-alih melakukan ssh user @ host Anda melakukan ssh-copy-id user @ host dan Anda diminta kata sandi, Anda memasukkannya, Anda masuk, itu akan menyalin kunci publik lebih dari. Dan lain kali Anda melakukan ssh user @ host, ia akan menggunakan kunci.

Ketika B "mendapatkan" kunci publik ini, ke mana ia pergi atau disimpan?

Kunci B ~ / .ssh /otorized_

Ketika memulai koneksi SSH ke B, bagaimana A “menggunakan” kunci privatnya (id_rsa) sebagai bagian dari koneksi itu?

baik, saya tidak tahu banyak tentang itu, dari atas kepala saya, tetapi apa pun yang dienkripsi dengan satu kunci dapat didekripsi dengan kunci lainnya, dan mengidentifikasi diri Anda sedikit berbeda dengan mengirim data .. dan mungkin ada sesuatu tentang kunci sementara juga.

barlop
sumber
Terima kasih @barlop! Silakan lihat pertanyaan saya di bawah jawaban BamaPookie; Saya memiliki pertanyaan yang sama untuk Anda!
user3178622