Singkat cerita: Perusahaan besar lama, banyak server UNIX / Linux.
Saya mewarisi tanggung jawab untuk banyak skrip yang tersisa beberapa tahun yang lalu. Salah satunya adalah skrip yang akan dijalankan setiap $ X jumlah bulan untuk memperbarui secara global kata sandi root di semua server kami.
Script itu berantakan dari Script dan Harapkan Shell, dan itu bekerja pada kepercayaan SSH yang diatur antara semua server kami dan server perintah-dan-kontrol pusat.
Masalahnya adalah, skripnya berantakan. Perintah Expect mencoba untuk menjelaskan setiap versi "passwd" yang mungkin ada pada kotak UNIX / Linux di luar sana - dan mereka sedikit berbeda.
Saat kami memperluas dan meningkatkan banyak infrastruktur kami, skrip menjadi sangat tidak terkelola.
Pertanyaan saya adalah: Apakah ada cara yang lebih baik untuk melakukan ini? Dengan asumsi sudah ada kepercayaan SSH yang sudah mapan, apa cara terbaik untuk mengubah kata sandi root di 3000+ server secara bersamaan?
sudo
dan menghapus kata sandi root sama sekali bukan opsi, bukan?Jawaban:
Gunakan Puppet .
Wayang sangat fleksibel, mudah dirawat dan menggunakan SSL. Mungkin terdengar sedikit berlebihan dan Anda harus melakukan upaya ekstra untuk membangun sistem Wayang.
Tapi. Kemungkinan besar ini bukan pembaruan massal terakhir yang akan Anda lakukan pada mesin ini. Wayang akan dan tidak menghemat banyak waktu Anda ketika sebenarnya apa pun prosedur pembaruan massal dimulai dan skrip sangat mudah dibaca / digunakan kembali.
Setidaknya ini bekerja untuk saya beberapa tahun yang lalu dan masih saya dapat menggunakan kembali beberapa resep wayang (alias skrip). Saya juga telah menggunakannya di lingkungan yang sedikit lebih kecil hanya memastikan bahwa setiap mesin benar-benar memiliki kondisi yang diketahui .
Saya telah membuktikannya berkali-kali (di banyak perusahaan) bahwa semua skrip penempatan yang dikustomisasi menjadi susah payah setelah beberapa saat atau ketika lelaki berikutnya masuk. Dan selama Anda membawa ponsel, skrip lama akan dan memang menghantui Anda.
Jika Anda berpikir ini benar-benar terdengar bagus, inilah tutorial Wayang yang bagus dengan lingkungan virtual yang disertakan untuk membantu Anda memulai.
sumber
user{"root":}
untuk mengatur password. Sebaliknya, gunakanexec{"chpasswd -e ..."}
, yang jauh lebih aman.pip install ansible
di kotak GNU / Linux, buat daftar host danansible -m user -a "password=$crpyt"
. Tidak diperlukan agen. Mengelola GNU / Linux, AIX dan Solaris di luar kotak.Saya telah menggunakan modul Perl Authen :: PAM on Solaris dengan sukses besar. Berikut contoh skrip:
sumber
Jika Anda dapat menulis Perl, modul Net :: OpenSSH :: Parallel memungkinkan untuk menulis skrip yang melakukan aksi secara paralel pada host jarak jauh melalui SSH dengan mudah.
Ini berisi contoh skrip untuk mengubah kata sandi yang dapat Anda gunakan sebagai basis. Karena tampaknya Anda memiliki lingkungan yang heterogen, Anda ingin mengelompokkan host berdasarkan jenis dan menggunakan sub penanganan dialog yang berbeda untuk masing-masing.
sumber
Saya tidak tahu tentang "terbaik", dan apakah mungkin untuk semua mesin non-Linux * nix dalam campuran Anda, tetapi apakah Anda sudah melihat wayang atau cfengine untuk kegiatan semacam ini?
Ada juga alat komersial (sangat mahal) untuk manajemen identitas di luar sana, dua yang pernah saya lihat / gunakan di masa lalu adalah Oracle Identity Manager dan Novel yang setara.
sumber
Setelah terus meneliti ini, saya telah belajar beberapa hal ...
Pertama dan terutama, ini adalah tugas yang sangat menjengkelkan untuk diotomatisasi, terutama di banyak lingkungan yang berbeda. Jawaban yang paling benar untuk pertanyaan ini mungkin @ tomi's: use Puppet.
Akhirnya saya berharap untuk membuat Wayang mengelola infrastruktur, tetapi menyebarkan ke server UNIX seluruh perusahaan untuk perubahan kata sandi root saat ini bukan pilihan yang layak.
Setelah membaca banyak halaman manual dan banyak Google-fu, saya berhasil membuat skrip yang melingkupi daftar server target, membuka koneksi SSH, dan menjalankan salah satu dari yang berikut:
Itu sedikit lebih banyak daripada hanya menjalankan perintah-perintah itu, tetapi yang di atas adalah yang bekerja dengan ajaib.
Saya tidak dapat menemukan cara sederhana untuk mengubah kata sandi pada Solaris secara non-iteratif - jadi kami terpaksa memodifikasi
/etc/shadow
dengan cepat.sumber
/dev/null
sebelum Anda melakukannya.Baru-baru ini saya telah melakukan ini Menggunakan Bash Script ..
sumber
Ini solusi saya sejauh ini. masih perlu melihat apakah itu berfungsi pada banyak sistem
sumber
Anda bisa menggunakan pdsh untuk menjalankan perintah pada banyak host sekaligus.
sumber
passwd
berbeda pada versi berbeda yang disebutkan.pw
tidak selalu tersedia ....passwd
selalu interaktif pengguna.passwd
di RHEL Linux setidaknya memiliki--stdin
parameterSelain boneka: SaltStack Pendekatan lain - mengotomatisasi eksekusi menggunakan SSH libs baik secara berurutan atau paralel menggunakan Fabric http://docs.fabfile.org/en/1.6/ , Capistrano atau yang serupa yang tidak memerlukan banyak waktu / upaya untuk digunakan.
sumber
Dua pilihan:
Gunakan boneka
Gunakan run deck. Run deck adalah server yang memungkinkan Anda untuk mengeksekusi perintah pada ratusan mesin secara bersamaan. Anda dapat mengelompokkan mesin ke dalam grup, untuk menjalankan perintah hanya pada sebagian mesin.
http://rundeck.org
sumber
Saya pikir format
/etc/shadow
file cukup standar di distro linux. Bisakah Anda menulis skrip awk sederhana untuk memperbarui kata sandi.cat /etc/shadow| awk -v pass='NEWPASSHASH' -v now=`date '+%s'` 'BEGIN{ OFS=FS=":"} /^root/ {$2=pass; $3=now} {print}' > /tmp/shadow && mv /tmp/shadow /etc/shadow
Saya akan memastikan untuk mengujinya sehingga Anda tidak mengunci diri Anda;)
sumber