Sistem terbaik untuk mengelola kunci ssh? [Tutup]

42

Saya punya beberapa komputer klien (yaitu laptop, desktop, dll.), Dan saya terhubung ke beberapa mesin server yang saya kelola, dan saya masuk ke semuanya melalui SSH. Saya bisa membayangkan beberapa skema mengelola kunci ssh yang masuk akal, dan saya ingin tahu tentang apa yang dilakukan orang lain.

Opsi 1: Satu keypair publik / pribadi global.

Saya akan menghasilkan satu kunci publik / privat, dan meletakkan kunci privat pada setiap mesin klien, dan kunci publik pada setiap mesin server.

Opsi 2: Satu keypair per mesin server.

Saya akan menghasilkan satu keypair pada setiap mesin server, dan meletakkan setiap kunci pribadi pada mesin klien saya.

Opsi 3: Satu keypair per mesin klien.

Setiap mesin klien akan memiliki kunci pribadi yang unik, dan setiap mesin server akan memiliki kunci publik untuk setiap mesin klien yang ingin saya hubungkan.

Opsi 4: Satu keypair per pasangan klien / server

Benar-benar berlebihan?

Mana yang terbaik? Apakah ada opsi lain? Kriteria apa yang Anda gunakan untuk mengevaluasi konfigurasi yang tepat?

slacy
sumber

Jawaban:

33

Saya menggunakan Opsi 3: Satu keypair per mesin klien dan itu paling masuk akal bagi saya. Berikut ini beberapa alasannya:

  • Jika klien dikompromikan maka kunci itu (dan hanya kunci itu) perlu dihapus dari server.
  • Cukup fleksibel untuk memutuskan apa yang bisa saya akses dari mana, tanpa memberikan akses selimut ke semua server dari semua klien.
  • Sangat mudah. Hanya ada 1 kunci untuk ssh-add, tidak ada kebingungan.
  • Mudah diatur dan dikelola melalui Opsi 4

Opsi 4 bagus, tetapi terlalu banyak bekerja. Opsi 3 memberi Anda 98% di sana dengan lebih sedikit kerumitan.

dwc
sumber
4
Saya gagal melihat poin Opsi 4. Ini tidak ada gunanya sama sekali.
niXar
26

Saya menggunakan solusi yang sedikit lebih rumit tetapi sangat fleksibel karena saya ingin mempertahankan beberapa pemisahan dalam kunci identitas SSH yang digunakan untuk server jaringan rumah, server kantor, server klien jaringan konsultasi dan berbagai sistem lainnya yang saya miliki akunnya.

Sekarang yang mengatakan saya bekerja dari workstation Linux hampir secara eksklusif jadi saya memiliki kunci USB yang setup menggunakan enkripsi LUKS dan window manager X11 saya bersama dengan daemon HAL mendeteksi drive terenkripsi LUKS dan meminta frasa sandi dekripsi ketika dimasukkan dan mencoba untuk dipasang. Dengan menyimpan ini pada drive terenkripsi seperti yang saya lakukan, saya tidak pernah menyimpan kunci SSH saya di workstation apa pun.

Saya kemudian memiliki konfigurasi berikut di ~/.ssh/configfile saya :

Host *
    Protocol 2
    IdentityFile %d/.ssh/keys.d/id_rsa.%l
    IdentityFile %d/.ssh/keys.d/id_dsa.%l
    IdentityFile %d/.ssh/keys.d/%u@%l

The % d diterjemahkan menjadi direktori home user dengan OpenSSH dan di ~ / .ssh direktori Saya telah menciptakan keys.d sebagai symlink ke jalur direktori pada USB drive dienkripsi bila benar dipasang.

The % l ekspresi diterjemahkan menjadi nama host dan mesin klien lokal % u akan diterjemahkan ke nama klien lokal.

Apa yang dilakukan konfigurasi ini adalah memungkinkan SSH untuk mencari kunci menggunakan 3 ekspresi berbeda. Sebagai contoh jika nama pengguna jdoeklien lokal saya dan nama mesin klien lokal saya jika examplehostitu akan terlihat dalam urutan berikut sampai menemukan kunci yang keduanya ada dan diterima oleh server jauh.

/home/jdoe/.ssh/keys.d/id_rsa.examplehost
/home/jdoe/.ssh/keys.d/id_dsa.examplehost
/home/jdoe/.ssh/keys.d/jdoe@examplehost

Anda bahkan dapat menggunakan ekspresi % r untuk mencari kunci khusus untuk nama pengguna server jarak jauh atau % h untuk nama host server jarak jauh seperti % u dan % l digunakan.

Pembaruan: Sekarang saya benar-benar menggunakan gnu-gpg gnu-agent dengan kompatibilitas ssh-agent untuk hanya membaca dan menggunakan kunci otentikasi dari smartcard OpenPGP v2 saya.

Jeremy Bouse
sumber
Wow, solusi bagus, terima kasih! Saya suka konfigurasi universal di ~ / .ssh / config
slacy
Terbukti dengan sendirinya cukup nyaman untuk menjaga hal-hal yang terpisah untuk pekerjaan, server jaringan klien pribadi dan konsultasi ... Saya tidak ingin menggabungkan otentikasi antara mereka tetapi juga ingin mudah bagi saya.
Jeremy Bouse
Luar biasa! Saya sangat suka yang ini.
balu
Saya berasumsi Anda menggunakan kunci USB yang berbeda untuk mesin klien yang berbeda. Kalau tidak, apa gunanya kunci terpisah jika semuanya disimpan di tempat yang sama? Jika terjadi pelanggaran, Anda harus mencabut semuanya. Kecuali (dan mungkin) saya kehilangan sesuatu ini sepertinya menyulitkan.
Halil Özgür
@ HalilÖzgür, Ya saya melakukan konsultasi dan tidak selalu ingin menggunakan kunci yang sama. Karena kunci USB dienkripsi dan tidak terhubung ke komputer mana pun kecuali saya memerlukannya untuk membuat sambungan, tidak ada kekhawatiran server dilanggar dan frasa sandi untuk mendekripsi sistem file drive cukup lama untuk membuat kunci pencabutan cukup sederhana.
Jeremy Bouse
6

Saya akan menghilangkan kedua opsi Anda 1s (yang saya duga satu seharusnya menjadi opsi 2 ;-) karena kunci pribadi adalah data sensitif, dan masuk akal untuk menyimpannya di tempat sesedikit mungkin. Saya pribadi tidak akan pernah menyalin kunci pribadi dari satu komputer ke komputer lain (atau bahkan dari satu file ke komputer lain di komputer yang sama), kecuali mungkin untuk membuat cadangan. Meskipun tidak seperti kebanyakan kunci enkripsi, jika kunci SSH hilang itu bukan akhir dunia (cukup buat yang baru, Anda tidak kehilangan data apa pun).

David Z
sumber
Ya, diganti namanya menjadi "Opsi 2" yang tepat. Saya suka aturan "jangan pernah menyalin kunci pribadi." Itu aturan yang bagus.
slacy
1

Opsi 3 dan gunakan sesuatu seperti Wayang untuk menangani manajemen kunci.

diq
sumber
Apakah ini reductivelabs.com/trac/puppet/wiki/PuppetIntroduction tautan ke Puppet?
Andy
Ya itu saja. Pastikan untuk memeriksa beberapa contoh di situs ini. Membantu melihat apa yang telah dilakukan orang lain - tidak perlu menemukan kembali roda.
diq
1

Opsi 3.

Ini juga memungkinkan Anda untuk mengontrol server mana yang dapat diakses klien. mis. jika klien X membutuhkan akses ke server A dan B, tetapi C atau D, Anda menyalinnya kunci publik hanya untuk host tersebut.

pgs
sumber