it-swarm-id.com

Apa perbedaan antara file Authorized_key dan known_hosts untuk SSH?

Saya belajar dasar-dasar protokol SSH. Saya bingung antara isi 2 file berikut:

  1. ~/.ssh/authorized_keys: Menyimpan daftar kunci publik resmi untuk server. Ketika klien terhubung ke server, server mengotentikasi klien dengan memeriksa kunci publik yang ditandatangani yang disimpan dalam file ini

  2. ~/.ssh/known_hosts: Berisi kunci Host DSA dari server SSH yang diakses oleh pengguna. File ini sangat penting untuk memastikan bahwa klien SSH menghubungkan server SSH yang benar.

Saya tidak yakin apa artinya ini. Tolong bantu.

190
Ankit

known_hosts file memungkinkan klien mengotentikasi server, untuk memeriksa apakah itu tidak terhubung ke peniru. authorized_keys file memungkinkan server mengautentikasi pengguna.

Otentikasi server

Salah satu hal pertama yang terjadi ketika koneksi SSH sedang dibuat adalah bahwa server mengirimkan kunci publiknya ke klien, dan membuktikan (terima kasih kepada kriptografi kunci publik ) kepada klien bahwa ia mengetahui kunci pribadi terkait. Ini mengotentikasi server: jika bagian protokol ini berhasil, klien tahu bahwa server adalah yang diklaimnya.

Klien dapat memeriksa apakah server tersebut adalah server yang dikenal, dan bukan server jahat yang mencoba untuk mengirimkannya sebagai server yang benar. SSH hanya menyediakan mekanisme sederhana untuk memverifikasi keabsahan server: ia mengingat server yang sudah Anda sambungkan, di ~/.ssh/known_hosts file di mesin klien (ada juga file di seluruh sistem /etc/ssh/known_hosts). Pertama kali Anda terhubung ke server, Anda perlu memeriksa dengan beberapa cara lain bahwa kunci publik yang disajikan oleh server benar-benar kunci publik dari server yang ingin Anda sambungkan. Jika Anda memiliki kunci publik dari server yang akan Anda sambungkan, Anda dapat menambahkannya ke ~/.ssh/known_hosts pada klien secara manual.

Ngomong-ngomong, known_hosts dapat berisi semua jenis kunci publik yang didukung oleh implementasi SSH, tidak hanya DSA (juga RSA dan ECDSA).

Otentikasi server harus dilakukan sebelum Anda mengirim data rahasia apa pun ke dalamnya. Khususnya, jika otentikasi pengguna melibatkan kata sandi, kata sandi tidak boleh dikirim ke server yang tidak diautentikasi.

Otentikasi pengguna

Server hanya mengizinkan pengguna jarak jauh masuk jika pengguna itu dapat membuktikan bahwa mereka memiliki hak untuk mengakses akun itu. Bergantung pada konfigurasi server dan pilihan pengguna, pengguna dapat menyajikan salah satu dari beberapa bentuk kredensial (daftar di bawah ini tidak lengkap).

  • Pengguna dapat memberikan kata sandi untuk akun yang ia coba masuki; server kemudian memverifikasi bahwa kata sandi itu benar.
  • Pengguna dapat menyajikan kunci publik dan membuktikan bahwa ia memiliki kunci pribadi yang terkait dengan kunci publik itu. Ini adalah metode yang persis sama yang digunakan untuk mengotentikasi server, tetapi sekarang pengguna mencoba membuktikan identitasnya dan server memverifikasi itu. Upaya login diterima jika pengguna membuktikan bahwa ia mengetahui kunci privat dan kunci publik ada dalam daftar otorisasi akun (~/.ssh/authorized_keys di server).
  • Jenis metode lain melibatkan pendelegasian bagian dari pekerjaan otentikasi pengguna ke mesin klien. Ini terjadi di lingkungan yang terkendali seperti perusahaan, ketika banyak mesin berbagi akun yang sama. Server mengotentikasi mesin klien dengan mekanisme yang sama yang digunakan sebaliknya, kemudian bergantung pada klien untuk mengotentikasi pengguna.

Kedua file tersebut digunakan oleh SSH tetapi untuk tujuan yang sama sekali berbeda, yang dapat dengan mudah menjelaskan kebingungan Anda.

Kunci Resmi

Secara default SSH menggunakan akun pengguna dan kata sandi yang dikelola oleh OS Host. (Ya, sebenarnya dikelola oleh PAM tetapi perbedaan itu mungkin tidak terlalu berguna di sini.) Apa artinya ini adalah ketika Anda mencoba untuk terhubung ke SSH dengan nama pengguna 'bob' dan beberapa kata sandi program server SSH akan meminta OS "Saya mendapatkan orang ini bernama 'bob' yang memberi tahu saya kata sandinya adalah 'wonka'. Dapatkah saya membiarkannya masuk?" Jika jawabannya ya, maka SSH memungkinkan Anda untuk mengotentikasi dan Anda melanjutkan jalan merry Anda.

Selain kata sandi, SSH juga akan membiarkan Anda menggunakan apa yang disebut kriptografi kunci publik untuk mengidentifikasi Anda. Algoritma enkripsi spesifik dapat bervariasi, tetapi biasanya RSA atau DSA , atau yang lebih baru ECDSA . Bagaimana pun ketika Anda mengatur kunci Anda, menggunakan ssh-keygen program, Anda membuat dua file. Satu yang merupakan kunci pribadi Anda dan satu yang merupakan kunci publik Anda. Nama-nama itu cukup jelas. Dengan desain kunci publik dapat berserakan seperti biji dandelion di angin tanpa mengorbankan Anda. Kunci pribadi harus selalu dijaga kerahasiaannya.

Jadi yang Anda lakukan adalah meletakkan kunci publik Anda di authorized_keys file. Kemudian ketika Anda mencoba untuk terhubung ke SSH dengan nama pengguna 'bob' dan kunci pribadi Anda, ia akan menanyakan OS "Saya mendapat nama orang ini 'bob', dapatkah ada di sini?" Jika jawabannya ya, SSH akan memeriksa kunci pribadi Anda dan memverifikasi apakah kunci publik di authorized_keys file adalah pasangannya. Jika kedua jawaban itu ya, maka Anda diizinkan masuk.

Host yang dikenal

Sama seperti bagaimana authorized_keys file digunakan untuk mengotentikasi pengguna known_hosts file digunakan untuk mengotentikasi server. Setiap kali SSH dikonfigurasi pada server baru, selalu menghasilkan kunci publik dan pribadi untuk server, seperti yang Anda lakukan untuk pengguna Anda. Setiap kali Anda terhubung ke server SSH, itu menunjukkan kunci publiknya, bersama dengan bukti bahwa ia memiliki kunci pribadi yang sesuai. Jika Anda tidak memiliki kunci publiknya, maka komputer Anda akan memintanya dan menambahkannya ke dalam known_hosts file. Jika Anda memiliki kunci, dan itu cocok, maka Anda terhubung langsung. Jika kunci tidak cocok, maka Anda mendapat peringatan jahat yang besar. Di sinilah segalanya menjadi menarik. 3 situasi yang biasanya terjadi ketidakcocokan utama adalah:

  1. Kunci berubah di server. Ini bisa dari menginstal ulang OS atau pada beberapa OS kunci dibuat ulang saat memperbarui SSH.
  2. Nama host atau alamat IP yang Anda sambungkan dulu milik server lain. Ini bisa berupa penugasan kembali alamat, DHCP , atau yang serupa.
  3. Berbahaya serangan manusia-di-tengah sedang terjadi. Ini adalah hal terbesar yang dicoba untuk melindungi Anda dari pemeriksaan kunci.

Dalam kedua kasus tersebut, known_hosts dan authorized_keys, program SSH menggunakan kriptografi kunci publik untuk mengidentifikasi klien atau server.

37
Scott Pack

Tentang File Aman yang Mengandung Kunci Publik

Untuk membantu Anda memahami perbedaan "known_hosts" dan "otor_keys", berikut adalah beberapa konteks yang menjelaskan bagaimana file-file tersebut masuk ke dalam "ssh". Ini adalah penyederhanaan berlebihan; ada banyak kemampuan dan komplikasi untuk "ssh" daripada yang disebutkan di sini.

Asosiasi berada di Sumber Tepercaya

Meskipun telah dikatakan bahwa nilai-nilai kunci publik "dapat dengan aman berserakan seperti biji di angin," perlu diingat bahwa itu adalah gardner, bukan pod biji, yang memutuskan biji mana yang akan didirikan di kebun. Meskipun kunci publik bukanlah rahasia, diperlukan perlindungan yang ketat untuk menjaga hubungan kunci yang dipercaya dengan kunci yang diautentikasi. Tempat-tempat yang dipercayakan untuk membuat asosiasi ini mencakup daftar "known_hosts", "otor_keys", dan "Certificate Certificate".

Sumber Tepercaya yang Digunakan oleh "ssh"

Agar kunci publik relevan dengan "ssh," kunci tersebut harus didaftarkan sebelumnya, dan disimpan dalam file aman yang sesuai. (Kebenaran umum ini memiliki satu pengecualian penting, yang akan dibahas kemudian.) Server dan klien masing-masing memiliki daftar kunci publik yang disimpan dengan aman; login akan berhasil hanya jika masing-masing pihak terdaftar dengan yang lain.

  • "known_hosts" berada di klien
  • "official_keys" berada di server

File aman klien disebut "known_hosts", dan file aman server disebut "berwenang_kunci". File-file ini serupa karena masing-masing memiliki teks dengan satu kunci publik per baris, tetapi mereka memiliki perbedaan yang halus dalam format dan penggunaan.

Pasangan kunci digunakan untuk Otentikasi

Pasangan kunci publik-swasta digunakan untuk melakukan "kriptografi asimetris." Program "ssh" dapat menggunakan kriptografi asimetris untuk otentikasi, di mana entitas harus menjawab tantangan untuk membuktikan identitasnya. Tantangan dibuat dengan penyandian dengan satu kunci, dan dijawab dengan mendekode dengan kunci lainnya. (Perhatikan bahwa cryptogrophy asimetris hanya digunakan selama fase login; lalu "ssh" (TSL/SSL) beralih ke bentuk enkripsi lain untuk menangani aliran data.)

Satu Pasangan Kunci untuk Server, Lainnya untuk Klien

Di "ssh", kedua belah pihak (klien dan server) saling curiga; ini merupakan peningkatan dari pendahulunya menjadi "ssh," yang merupakan "telnet". Dengan "telnet", klien diminta untuk memberikan kata sandi, tetapi server tidak diperiksa. Kurangnya pemeriksaan memungkinkan serangan "manusia di tengah" terjadi, dengan konsekuensi bencana bagi keamanan. Sebaliknya, dalam proses "ssh", klien tidak menyerahkan informasi sampai server pertama menjawab tantangan.

Langkah-langkah dalam Otentikasi "ssh"

Sebelum berbagi informasi masuk, klien "ssh" pertama-tama menghilangkan kesempatan untuk serangan orang-di-tengah dengan menantang server untuk membuktikan "Apakah Anda benar-benar seperti saya kira?" Untuk membuat tantangan ini, klien perlu mengetahui kunci publik yang terkait dengan server target. Klien harus menemukan nama server di file "known_hosts"; kunci publik terkait berada di baris yang sama, setelah nama server. Hubungan antara nama server dan kunci publik harus dijaga agar tidak diganggu gugat; oleh karena itu izin pada file "known_hosts" harus 600 - tidak ada orang lain yang bisa menulis (atau membaca).

Setelah server melakukan otentikasi, ia mendapat kesempatan untuk menantang klien. Otentikasi akan melibatkan salah satu kunci publik yang ditemukan di "otor_keys". (Ketika tidak ada tombol yang berfungsi, proses "sshd" mundur pada otentikasi gaya kata sandi.)

Format File

Jadi untuk "ssh", seperti proses masuk lainnya, ada daftar "teman", dan hanya mereka yang ada di daftar yang diizinkan untuk mencoba melewati tantangan. Untuk klien, file "known_hosts" adalah daftar teman yang dapat bertindak sebagai server (host); ini terdaftar berdasarkan nama. Untuk server, daftar teman yang setara adalah file "berwenang_kunci"; tetapi tidak ada nama dalam file itu, karena kunci publik itu sendiri bertindak seperti pengidentifikasi. (Server tidak peduli dari mana masuknya, tetapi hanya kemana arahnya. Klien berusaha untuk mengakses akun tertentu, nama akun ditentukan sebagai parameter ketika "ssh" dipanggil. Ingat bahwa "berwenang_keys "File khusus untuk akun itu, karena file tersebut di bawah direktori home akun itu.)

Meskipun ada banyak kemampuan yang dapat diekspresikan dalam entri konfigurasi, penggunaan dasar, paling umum memiliki parameter berikut. Perhatikan bahwa parameter dipisahkan oleh karakter spasi.

Untuk "known_hosts":

{server-id} ssh-rsa {public-key-string} {comment}

Untuk "berwenang_kunci":

ssh-rsa {public-key-string} {comment}

Perhatikan bahwa token ssh-rsa menunjukkan bahwa algoritma yang digunakan untuk penyandian adalah "rsa". Algoritma lain yang valid termasuk "dsa" dan "ecdsa". Oleh karena itu, token yang berbeda mungkin menggantikan ssh-rsa ditampilkan di sini.

Biarkan "ssh" Secara Otomatis Mengkonfigurasi Entri "known_hosts"

Dalam kedua kasus, jika kunci publik tidak ditemukan dalam file yang aman, maka enkripsi asimetris tidak terjadi. Seperti disebutkan sebelumnya, ada satu pengecualian untuk aturan ini. Pengguna diizinkan untuk secara sadar memilih mengambil risiko terhadap kemungkinan serangan man-in-the-middle dengan masuk ke server yang tidak terdaftar dalam file "known_hosts" pengguna. Program "ssh" memperingatkan pengguna, tetapi jika pengguna memilih untuk maju, klien "ssh" memungkinkannya "hanya sekali ini." Untuk memastikan hal itu terjadi sekali saja, proses "ssh" secara otomatis mengkonfigurasi file "known_hosts" dengan informasi yang diperlukan dengan meminta server untuk kunci-publik, dan kemudian menuliskannya ke dalam file "known_hosts". Pengecualian ini benar-benar merongrong keamanan dengan membiarkan musuh memberikan asosiasi nama server dengan kunci publik. Risiko keamanan ini diperbolehkan karena membuat segalanya jadi lebih mudah bagi banyak orang. Tentu saja, metode yang benar dan aman bagi pengguna untuk secara manual menyisipkan baris dengan nama server dan kunci publik ke dalam file "known_hosts" sebelum mencoba masuk ke server. (Tetapi untuk situasi berisiko rendah, pekerjaan tambahan mungkin tidak ada gunanya.)

Hubungan Satu-ke-Banyak

Entri dalam file "known_hosts" klien memiliki nama server dan kunci publik yang berlaku untuk mesin server. Server memiliki kunci privat tunggal yang digunakan untuk menjawab semua tantangan, dan entri "known_hosts" klien harus memiliki kunci publik yang cocok. Oleh karena itu, semua klien yang pernah mengakses server tertentu akan memiliki entri kunci publik yang identik dalam file "known_hosts" mereka. Relasi 1: N adalah kunci publik server dapat muncul di banyak file "known_hosts" klien.

Entri dalam file "berwenang_kunci" mengidentifikasi bahwa klien yang ramah diizinkan untuk mengakses akun. Teman mungkin menggunakan pasangan kunci publik-swasta yang sama untuk mengakses beberapa server yang berbeda. Ini memungkinkan satu pasangan kunci untuk mengotentikasi ke semua server yang pernah dihubungi. Setiap akun server yang ditargetkan akan memiliki entri kunci publik yang identik dalam file "berwenang_kunci" mereka. Relasi 1: N adalah bahwa kunci publik satu klien dapat muncul dalam file "otor_keys" untuk beberapa akun di beberapa server.

Terkadang, pengguna yang bekerja dari beberapa mesin klien akan mereplikasi pasangan kunci yang sama; biasanya ini dilakukan ketika pengguna bekerja di atas meja dan pangkuan atas. Karena mesin klien mengautentikasi dengan kunci yang identik, mereka akan cocok dengan entri yang sama di server "berwenang_kunci".

Lokasi Kunci Pribadi

Untuk sisi server, proses sistem, atau daemon, menangani semua permintaan masuk "ssh" yang masuk. Daemon ini bernama "sshd". Lokasi kunci pribadi tergantung pada instalasi SSL, misalnya Apple menempatkannya pada /System/Library/OpenSSL, tetapi setelah menginstal versi OpenSSL Anda sendiri, lokasi akan menjadi /opt/local/etc/openssl.

Untuk sisi klien, Anda memanggil "ssh" (atau "scp") saat Anda membutuhkannya. Baris perintah Anda akan menyertakan berbagai parameter, yang salah satunya secara opsional menentukan kunci privat mana yang akan digunakan. Secara default, pasangan kunci sisi klien sering disebut $HOME/.ssh/id_rsa dan $HOME/.ssh/id_rsa.pub.

Ringkasan

Intinya adalah bahwa "known_hosts" dan "otor_keys" mengandung kunci publik, tetapi ...

  • known_hosts - klien memeriksa apakah Host adalah asli
  • authorized_key - Host memeriksa apakah login klien diizinkan
1
IAM_AL_X