Saya mencoba menulis buku pedoman yang memungkinkan untuk bootstrap server saya. Secara default di Linode saya hanya bisa login sebagai root dengan kata sandi, jadi playbook saya login sebagai root, membuat pengguna non-root dengan kunci SSH, dan menonaktifkan SSH root dan kata sandi.
Ini masalah karena saya sekarang tidak bisa menjalankan buku pedoman itu lagi karena login root dinonaktifkan! Saya ingin playbook idempoten dan tidak perlu menambah dan menghapus host setelah bootstrap.
Jawaban:
Saya suka melakukannya dengan cara ini:
Saya mencoba untuk terhubung ke host jarak jauh dengan pengguna saya yang mungkin. Jika ini tidak mungkin (pada jalankan pertama), saya terhubung sebagai root dan membuat pengguna yang memungkinkan bersama dengan
authorized_keys
file dansudo
haknya.Pada menjalankan selanjutnya, menghubungkan sebagai pengguna yang mungkin bekerja, sehingga blok tugas dapat dilewati.
Setelah host jarak jauh di-bootstrap, saya bisa melanjutkan dengan pengguna yang mungkin dan
become
:sumber
remote_user
di buku pedoman Anda setelah menjalankan pertama kali? Itu bukan idempoten. Saya harap saya kehilangan sesuatu.bootstrap.yml
dansite.yml
, di manasite.yml
termasukbootstrap.yml
sebelum yang lainnya). Jika tugas pertamabootstrap.yml
gagal, semua tugas lain dari permainan ini dilewati dansite.yml
diambil alih."skip_reason": "Conditional result was False"
. Menjalankan permainan dengan-vvv
menunjukkan panggilan ssh kembali"msg": "non-zero return code", "rc": 255,
when
kondisi:when: not "OK" in check_ansible_user.stdout
Saya akan melakukan hal berikut:
sshd_config
(saya akan cenderung menyarankan Anda mengelola seluruh file, menggunakantemplate
, tetapi itu terserah Anda), dan menonaktifkan login rootUntuk peran pertama (yang dasar), saya cenderung menggunakan sesuatu seperti:
Untuk konfigurasi SSH, saya akan menggunakan:
Ketergantungan peran Ansible didokumentasikan di sini .
Anda juga bisa menggunakan pemesanan dalam buku pedoman Anda untuk melakukan ini.
Saya memiliki beberapa hal yang mungkin pada github (dari mana diambil di atas), jika Anda ingin melihatnya dalam konteks
sumber
Jika Anda membuat server Anda pada Linode dengan modul linode Anda bisa mendaftarkan
return value
darilinode
tugas dan termasuk tugas-tugas bootstrap dengan kondisi memeriksa outout dari tugas linode. Itu harus idempoten. Coba sesuatu seperti ini:bootstrap.yml
akan berisi semua tugas yang diperlukan untuk menonaktifkan login ssh root dan sebagainya.sumber
Mungkin Anda bisa memodifikasi
ansible_ssh_user
dalam persediaan setelah Anda dinyalakan tuan rumah?sumber