Dua opsi - yang pertama, seperti yang Anda katakan dalam jawaban Anda sendiri, adalah mengatur variabel lingkungan ANSIBLE_HOST_KEY_CHECKING
ke False.
Cara kedua untuk mengaturnya adalah dengan meletakkannya di file ansible.cfg, dan itu opsi yang sangat berguna karena Anda dapat mengaturnya secara global (pada tingkat sistem atau pengguna, dalam /etc/ansible/ansible.cfg
atau ~/.ansible.cfg
), atau dalam file konfigurasi di direktori yang sama sebagai buku pedoman yang Anda jalankan.
Untuk melakukannya, buat ansible.cfg
file di salah satu lokasi itu, dan sertakan ini:
[defaults]
host_key_checking = False
Anda juga dapat mengatur banyak default berguna lainnya di sana, seperti apakah akan mengumpulkan fakta atau tidak di awal permainan, apakah akan menggabungkan hash yang dideklarasikan di beberapa tempat atau mengganti satu dengan yang lain, dan seterusnya. Ada daftar besar seluruh opsi di sini di dokumen Ansible.
Edit: catatan tentang keamanan.
Validasi kunci host SSH adalah lapisan keamanan yang berarti untuk host yang gigih - jika Anda terhubung ke mesin yang sama berkali-kali, berharga untuk menerima kunci host secara lokal.
Untuk instance EC2 yang berumur panjang, masuk akal untuk menerima kunci host dengan tugas yang dijalankan hanya sekali pada pembuatan awal instance:
- name: Write the new ec2 instance host key to known hosts
connection: local
shell: "ssh-keyscan -H {{ inventory_hostname }} >> ~/.ssh/known_hosts"
Tidak ada nilai keamanan untuk memeriksa kunci host pada instance yang Anda berdiri secara dinamis dan menghapus tepat setelah eksekusi playbook, tetapi ada nilai keamanan dalam memeriksa kunci host untuk mesin yang persisten. Jadi, Anda harus mengelola pemeriksaan kunci host secara berbeda per lingkungan logis.
- Biarkan pemeriksaan diaktifkan secara default (dalam
~/.ansible.cfg
)
- Nonaktifkan memeriksa kunci host di direktori kerja untuk playbook yang Anda jalankan terhadap instance sesaat (di
./ansible.cfg
samping playbook untuk tes unit terhadap VM gelandangan, otomatisasi untuk instance EC2 berumur pendek)
known_hosts
file lokal Anda untuk SSH dan Dapat mengenali mesin. Gagal melakukannya, terutama dengan menonaktifkan pemeriksaan kunci host, menurunkan keamanan SSH menjadi hampir nol, dan memungkinkan serangan MITM. Banyak mesin yang merasa berada dalam "jaringan internal" sebenarnya terhubung ke Internet, di mana satu respons DNS yang lebih cepat memungkinkan Anda berbicara dengan penyerang daripada target Anda.ssh-keyscan <ip list>
pada mesin tepercaya (bagi saya, ini adalah host benteng / lompatan) di dalam jaringan yang sama, dan menempatkan hasilnya diknown_hosts
Untuk mengatur host tepercaya itu, AWS memaparkan kunci host di log startup di instance, jadi memburu kunci itu adalah satu langkah manual yang tidak pernah saya hentikan jika saya melakukan rekreasi penuh terhadap lingkungan saya. Tetapi tuan rumah itu biasanya tidak perlu dihapus. Ini bisa membantu.Saya menemukan jawabannya, Anda perlu mengatur variabel lingkungan
ANSIBLE_HOST_KEY_CHECKING
untukFalse
. Sebagai contoh:sumber
maju ke nikobelia
Bagi mereka yang menggunakan jenkins untuk menjalankan buku bermain, saya baru saja menambahkan ke pekerjaan jenkins saya sebelum menjalankan anbook-playbook the variable environment environment ANSIBLE_HOST_KEY_CHECKING = Salah Misalnya, ini:
sumber
Mengubah
host_key_checking
kefalse
untuk semua host adalah ide yang sangat buruk.Satu-satunya waktu Anda ingin mengabaikannya, adalah pada "kontak pertama", yang akan diselesaikan oleh dua tugas ini:
Jadi kami hanya mematikan kunci host memeriksa jika kami tidak memiliki kunci host di
known_hosts
file kami .sumber
Anda bisa melewatinya sebagai argumen baris perintah saat menjalankan playbook:
ansible-playbook play.yml --ssh-common-args='-o StrictHostKeyChecking=no'
sumber
Jika Anda tidak ingin mengubah
ansible.cfg
atau,playbook.yml
maka Anda bisa mengatur variabel lingkungan:sumber
Gunakan parameter bernama validate_certs untuk mengabaikan validasi ssh
Dengan melakukan ini, ia mengabaikan proses validasi ssh
sumber
validate_certs
parameter hanya memberitahu boto tidak memvalidasi AWS API HTTPS cert. Itu tidak mempengaruhi verifikasi kunci SSH.Saya tahu pertanyaan telah dijawab dan itu benar juga, tetapi hanya ingin menautkan dokumen yang memungkinkan di mana dijelaskan dengan jelas kapan dan mengapa masing-masing cek harus ditambahkan: host-key-checking
sumber
Sebagian besar masalah muncul ketika Anda ingin menambahkan host baru ke inventaris dinamis (melalui modul add_host) di playbook. Saya tidak ingin menonaktifkan pemeriksaan sidik jari host secara permanen sehingga solusi seperti menonaktifkannya di file konfigurasi global tidak ok untuk saya. Mengekspor var seperti
ANSIBLE_HOST_KEY_CHECKING
sebelum menjalankan playbook adalah hal lain yang harus dilakukan sebelum menjalankan yang perlu diingat.Lebih baik menambahkan file konfigurasi lokal dalam direktori yang sama dengan playbook. Buat file dengan nama
ansible.cfg
dan rekatkan teks berikut:Tidak perlu ingat untuk menambahkan sesuatu di env vars atau menambah
ansible-playbook
opsi. Sangat mudah untuk meletakkan file ini ke git repo yang dimungkinkan.sumber