J'ai provisionné mon serveur avec le playbook Ansible. J'ai utilisé le playbook root / bedrock-Ansible .
L'une des tâches consistait à configurer le serveur mysql avec le mot de passe de l'utilisateur root mysql.
Maintenant, j'ai un besoin urgent de changer ce mot de passe. Les étapes que j'ai prises:
- J'ai mis à jour des variables pour les rôles Ansible
- J'ai exécuté la commande
ansible-playbook -i hosts/staging server.yml
afin de réapprovisionner le serveur
Toutes les tâches ont été exécutées comme prévu (aucune modification), mais le script a échoué
[mariadb | Set root user password]
avec ce message:
msg: unable to connect to database, check login_user and login_password are correct or ~/.my.cnf has the credentials
Je suppose qu'une fois le mot de passe racine MySQL défini, le réapprovisionnement du serveur ne peut pas modifier ce mot de passe.
Est-il possible de changer le mot de passe root de MySQL en réapprovisionnant le serveur avec Ansible? Quelles sont mes options?
mysqladmin
- mais c'était avant de voir votre réponseVous pouvez abuser de ~ / .my.cnf pour pouvoir changer le mot de passe racine mysql.
L'astuce consiste à avoir une tâche "Définir le mot de passe root" (nr.1), qui définira le mot de passe. Ensuite, vous avez une tâche, qui crée un ~ / .my.cnf avec les informations d'identification correctes (nr.2).
Sur un nouveau système, ~ / .my.cnf n'est pas présent. La tâche n ° 1 créera mysql-root-user avec des informations d'identification données. Sur un système actuel, les informations d'identification de ~ / .my.cnf sont utilisées pour se connecter et définir le mot de passe sur mysql_root_password . La tâche n ° 2 créera ~ / .my.cnf , ou remplacera les anciennes informations d'identification existantes ~ / .my.cnf par de nouvelles.
Le gros avantage de cette approche est de n'avoir qu'une seule variable "mysql_root_password", qui est toujours la bonne du point de vue d'un playbook. Sur le ou les systèmes actuels, ~ / .my.cnf est une sorte de stockage pour les identifiants mysql locaux actuels.
avec client.my.cnf.j2:
Lectures complémentaires
Notes pertinentes de ansible-mysql_user_module-documentation :
Note 1:
Note 2:
la source
mysql --database mysql --execute "select host from user where user = 'root';"
. Ce message fait la même chose que cette réponse mais a un code pour définir tous les mots de passe.Pour la prochaine personne qui vient chercher des réponses ici. Bien que la réponse acceptée soit vraie, vous devez être très diligent si vous utilisez MySQL 5.7 car il n'y a pas de connexion anonyme autorisée dans mysqld en mode démon (service). Au lieu de cela, vous DEVEZ gratter le /var/log/mysqld.log pour un mot de passe TEMPORAIRE que quelqu'un a décidé de créer et d'utiliser sur le login_password = ydaetskcoR. C'est une fonctionnalité qu'ils ont décidé d'implémenter sur la version 5.7 du référentiel de développement, donc si vous voulez l'éviter, utilisez une version plus ancienne (5.6).
Documentation ici: https://dev.mysql.com/doc/refman/5.7/en/server-options.html#option_mysqld_initialize-insecure
http://mysqlserverteam.com/initialize-your-mysql-5-7-instances-with-ease/
la source
Il existe un playbook Ansible utilisé pour renforcer MySQL.
https://github.com/dev-sec/ansible-mysql-hardening
Cela a non seulement changé le mot de passe root, mais effectue également quelques étapes supplémentaires pour durcir le serveur.
Jetez un œil au fichier Lisez-moi.
la source