Saya menemukan pertanyaan ini ketika mencoba menjawabnya sendiri. Setelah beberapa pencarian dan percobaan, saya menemukan beberapa opsi lain untuk ini. Saya akan melewatkan bagian tentang mendistribusikan kunci sebagai alternatif karena Matt Simmons membahasnya. Juga, saya tahu ada saat-saat itu tidak cukup baik. Sebagai contoh, jika Anda GitHub dan harus menyimpan jutaan kunci publik terhadap satu pengguna, terus memperbarui file SSH Authorized_keys dan menjaganya agar tetap disinkronkan di puluhan hingga ratusan kotak tepi yang tidak layak atau tidak diinginkan.
Begitu,
Pertama-tama, RedHat (dan varian) memiliki tambalan yang didukung untuk OpenSSH yang menambahkan opsi AuthorizedKeysCommand
dan AuthorizedKeysCommandRunAs
. Patch telah digabung hulu di openssh 6.2. Mengutip dari halaman manual :
Perintah ResmiKeys
Menentukan program yang akan digunakan untuk pencarian kunci publik pengguna. Program akan dipanggil dengan argumen pertama nama pengguna yang diotorisasi, dan harus menghasilkan pada output standar garis AuthorizedKeys (lihat AUTHORIZED_KEYS dalam sshd (8)). Secara default (atau ketika diatur ke string kosong) tidak ada menjalankan AuthorizedKeysCommand. Jika AuthorizedKeysCommand tidak berhasil mengotorisasi pengguna, otorisasi jatuh ke AuthorizedKeysFile. Perhatikan bahwa opsi ini hanya memiliki efek dengan PubkeyAuthentication diaktifkan.
AuthorizedKeysCommandRunAs
Menentukan pengguna yang akunnya menjalankan AuthorizedKeysCommand. String kosong (nilai default) berarti pengguna yang diotorisasi digunakan.
Dalam eksperimen saya malam ini, saya menemukan bahwa di luar kotak, ini tidak berfungsi karena kebijakan SELinux default. Anda dapat menyiasatinya dengan mematikan penegakan SELinux dengan setenforce 0
. Karena memutar SELinux mungkin adalah ide yang buruk , Anda justru dapat menghasilkan kebijakan yang benar. Dalam kasus saya, itu sesederhana mencoba masuk dengan AuthorizedKeysCommand
opsi yang diatur /etc/ssh/sshd_config
dan kemudian menggunakan audit2allow -a -M local && semodule -i local.pp
. Ini pada dasarnya melihat melalui log audit dan menemukan hal-hal yang dicegah dan menghasilkan pengecualian untuk mereka. Jika Anda mungkin memiliki barang-barang lain di sana yang mungkin masuk daftar putih, Anda mungkin harus mempelajari lebih lanjut audit2allow
untuk memastikan Anda mendapatkan kebijakan baru yang tepat.
Ada berbagai tambalan lain (mungkin kurang teruji dan tepercaya) di luar sana untuk menambahkan fungsi serupa. Misalnya ada, openssh-script-auth . Anda juga dapat menemukan tambalan yang digunakan RedHat dan menerapkannya secara langsung. Pertarungan cepat Googling mengungkap https://launchpadlibrarian.net/89063205/openssh-5.3p1-authorized-keys-command.patch dan https://launchpadlibrarian.net/10/103838151/openssh-authorized-keys-command.patch yang merupakan berdasarkan versi RH tetapi yang telah diperbarui untuk versi OpenSSH yang lebih baru.
Patch OpenSSH untuk melakukan pencarian kunci langsung dari beberapa toko (mis. Seperti GitHub dan CodeBaseHQ dan yang lainnya telah melakukannya). GitHub belum membuka patch ini, sepengetahuan saya, tapi saya tahu di masa lalu saya telah menemukan versi untuk pencarian kunci MySQL dan PostgreSQL. Saya mencoba untuk menemukan mereka lagi sekarang tetapi belum beruntung.
Ada juga beberapa opsi berbasis FUSE. Misalnya ada LPKFuse yang memungkinkan Anda menyajikan kunci publik dari LDAP dengan mengubah AuthorizedKeysFile
lokasi menjadi satu di sistem file LPKFuse. LPKFuse FS membuat file virtual yang isinya didukung oleh bidang dari server direktori.
Secara keseluruhan, saya pikir opsi # 1 sejauh ini adalah yang terbaik karena secara resmi didukung oleh RedHat. Selain itu, ini memungkinkan Anda untuk menempatkan logika apa pun yang Anda suka dalam skrip itu (termasuk berbicara ke database) dalam bahasa apa pun yang Anda inginkan.