Mesin virtual server baru saya dikonfigurasikan untuk masuk secara root melalui ssh dengan kata sandi. Saya ingin playbook Ansible saya mengkonfigurasi ulang untuk menggunakan kunci saja dan menonaktifkan login root dengan kata sandi saat dijalankan, jadi saya perlu sesuatu seperti ini:
- coba masuk dengan kunci
jika tidak bisa masuk dengan kunci:
- login dengan kata sandi
- tambahkan kunci ke otor_keys
- nonaktifkan login root dengan kata sandi
- secara opsional sambungkan kembali menggunakan kunci
lakukan tugas lain
Bagaimana saya bisa mencapai itu?
EDIT : Agar lebih jelas, saya tidak bertanya bagaimana cara menambahkan kunci atau menonaktifkan root, itu hanya untuk konteks. Saya bertanya bagaimana cara mundur ke kata sandi jika tidak dapat mengautentikasi dengan kunci. Dengan --ask-pass
atau ansible_ssh_pass
set, Ansible bahkan tidak akan mencoba menggunakan otentikasi kunci publik
ssh
authentication
ansible
petr0
sumber
sumber
Jawaban:
Anda dapat mencoba
PreferredAuthentications
opsi, mengaturnya kepublickey,password
. Defaultnya meliputi ini dalam urutan ini, bersama dengan opsi lain, sehingga mungkin pengaturan ini. Menambahkannya melalui-o
atau klienssh_config
dapat mencegah hal ini.Anda mungkin dapat menggunakan skrip wrapper. Misalnya, dengan ini dalam
key_or_password.sh
danpass.sh
yang memberikan kata sandi, menjalankanbash key_or_password.sh root@host
akan mencoba publickey diikuti oleh login kata sandi non-interaktif.Log menunjukkan metode mana yang berhasil, misalnya
sumber
Inilah yang saya lakukan jika
ansible_user
berbeda untuk 'jalankan pertama' dari buku pedoman (misalnya jika Anda hanya memilikiroot
pengguna dan Anda akan mengatur pengguna baru dengan kunci SSH):ansible_pass
seperti yang Anda lakukan jika Anda menggunakan kata sandi login (ingat untuk menggunakan Vault) ini harus menjadi kata sandi pengguna yang Anda gunakan untuk 'jalankan pertama' dari buku pedoman.ansible_user
ke nama pengguna pengguna yang ingin Anda gunakan setelah dijalankan pertama kali saat Anda mengatur pengguna dengan benar di server.ansible_user_first_run
untuk pengguna yang akan Anda gunakan untuk 'jalankan pertama' dari buku pedoman, misalnyaroot
.ignore_errors
danchanged_when: False
ansible_user
ke nilaiansible_user_first_run
Berikut kodenya:
Catatan: Layak
transport = ssh
diatur karena paramiko secara tak terduga dapat gagal masuk ke server dalam beberapa konfigurasi (misalnya ketika server diatur untuk tidak menerima kata sandi, dan Anda mencoba terlebih dahulu dengan kunci lalu kata sandi ... aneh!) Juga transportasi ssh lebih cepat, jadi tetap layak.Catatan lebih lanjut: Jika Anda menggunakan metode ini, Anda perlu menentukan
gather_facts: false
dalam file definisi playbook Anda sehingga tugas-tugas pengaturan / pengumpulan fakta tidak berjalan secara otomatis sebelum Anda sampai ke tahap pengujian kata sandi. Jika Anda memerlukan salah satu fakta yang mungkin, Anda perlu secara eksplisit memanggilsetup
peran Anda sebelum mengakses data yang biasanya tersedia di tempat-tempat seperti ituansible_devices
, dll. Salah satu cara yang baik untuk melakukan ini adalah dengan meneleponsetup
denganwhen
klausa yang memeriksa untuk melihat apakah fakta yang Anda gunakan kosong atau tidak sebelum Anda menyebutnya dalam peran Anda.sumber
gather_facts: no
untuk menghentikan kemungkinan mencoba terhubung ketika meluncurkan playbook :)Anda dapat menggunakannya
--ask-pass
saat menjalankan playbook yang memungkinkan.Untuk tugas-tugas lain yang Anda minta, ini dapat dicapai dengan berbagai cara, misalnya, menyalin modul.
Menonaktifkan login root juga bisa dilakukan misalnya. dengan templating
sshd_conf
atau memasukkan baris dalam file conf.sumber