Saya sedang menyiapkan server MySQL dan ingin dapat mengatur mysql-root
kata sandi selama instalasi.
Dengan bantuan internet saya datang dengan solusi ini:
- name: Set MySQL root password before installing
debconf: name='mysql-server' question='mysql-server/root_password' value='{{mysql_root_pwd | quote}}' vtype='password'
- name: Confirm MySQL root password before installing
debconf: name='mysql-server' question='mysql-server/root_password_again' value='{{mysql_root_pwd | quote}}' vtype='password'
- name: Install Mysql
apt: pkg=mysql-server state=latest
mysql_root_pwd
adalah variabel yang dimuat dari Ansible Vault. Ini berjalan dengan baik, tetapi sekarang di server ada banyak baris di log:
Apr 10 14:39:59 servername ansible-debconf: Invoked with value=THEPASSWORD vtype=password question=mysql-server/root_password name=mysql-server unseen=None
Apr 10 14:39:59 servername ansible-debconf: Invoked with value=THEPASSWORD vtype=password question=mysql-server/root_password_again name=mysql-server unseen=None
Bagaimana saya bisa menghentikan Ansible dari menulis kata sandi teks yang jelas ke file log?
Perilaku yang diamati tampaknya menjadi bug dalam modul debconf. Saya mengajukan laporan bug .
Pengguna bcoca di github menunjukkan bahwa seseorang dapat menggunakan
no_log: true
arahan dalam tugas, yang mengatur kata sandi, untuk mencegah pencatatan. Ini adalah solusi, yang berfungsi untuk saya sampai bug diperbaiki.sumber
ERROR: no_log is not a legal parameter in an Ansible task or handler
sudo apt-add-repository ppa:ansible/ansible
,sudo apt-get update
,sudo apt-get install ansible
Saya menyelesaikannya dengan memutakhirkan versi Ansible ke 1.6.1
sumber
Sesuai dokumen Ansible :
Kedengarannya seperti pengaturan
log_path
pada node kontrol Anda akan menghasilkan tidak memiliki log pada node tujuan.sumber
vtype='password'
. Itu harus cukup eksplisit IMHO? Saya berasumsi bahwa pesan log juga dibuat oleh modul debconf.Ada cara yang lebih baik daripada hanya no_log: Benar
Seperti yang Anda lihat, Anda perlu menambahkan:
Dan kemudian buat output dari hasil perintah dengan regex_replace, di mana:
Dengan pendekatan ini, Anda tidak hanya akan menyembunyikan kata sandi dan login, tetapi juga mendapatkan output dari operasi Anda
sumber
Ini merupakan tambahan untuk jawaban TheDESTROS dari utas ini:
wrapper-script.sh.j2
Anda memerlukan sedikit kode lebih sedikit dan dapat tetap menjalankan perintah di log Anda. Hanya ada satu peringatan, jika rahasia ada di perintah stdout. Jika Anda ingin menghindari templat eksternal,
copy
modul dengan parametercontent
mungkin membantu menulis skrip pembungkus kecil dengan cepat.sumber
The
no_log: true
pendekatan adalah untuk digunakan sebagai lalu-resor jika upaya lain gagal karena akan membuat pelaksanaan tugas benar-benar buram dan Anda akan memiliki petunjuk ketika gagal.Praktik keamanan merekomendasikan pemberian kredensial dari stdin atau ketika tidak memungkinkan menggunakan file kredensial (atau bahkan yang dapat dieksekusi).
Berikut adalah contoh tentang cara melakukan login podman yang aman dengan menghindari memaparkan kata sandi:
Dengan ini, rahasianya tidak akan diekspos,
result
tetapi Anda masih dapat melihat output dari perintah.Sebagian besar alat yang membutuhkan login memang menerapkan salah satu pendekatan yang lebih aman yang disebutkan. Menggunakan kredensial pada kode CLI seperti memiliki
123456
kata sandi bank Anda.sumber