Eu provisionei meu servidor com o playbook Ansible. Eu usei o playbook root/bedrock-Ansible .
Uma das tarefas era configurar o servidor mysql junto com a senha do usuário root do mysql.
Agora preciso urgentemente alterar essa senha. Os passos que dei:
- Atualizei variáveis para funções do Ansible
- Executei o comando
ansible-playbook -i hosts/staging server.yml
para reprovisionar o servidor
Todas as tarefas foram executadas conforme o esperado (sem alterações), mas o script falhou
[mariadb | Set root user password]
com esta mensagem:
msg: unable to connect to database, check login_user and login_password are correct or ~/.my.cnf has the credentials
Meu palpite é que uma vez que a senha de root do MySQL foi definida, o reprovisionamento do servidor não pode alterar essa senha.
É possível alterar a senha de root do MySQL reprovisionando o servidor com o Ansible? Quais são minhas opções?
O problema que você tem é que o Ansible está tentando usar a mesma senha de root para fazer login, pois você deseja alterá-la para:
Obviamente, isso nunca funcionará se você quiser usar esse jogo para alterá-lo.
Em vez disso, você deve alterar o jogo acima para algo como:
E, em seguida, atualize os arquivos de inventário relevantes para adicionar essa nova variável.
Então o seu
group_vars/production
agora deve conter:Parece que este manual usa a senha de root no
roles/mariadb/tasks/main.yml
manual e tambémroles/wordpress-setup/tasks/database.yml
, então, você pode querer executar o manual inteiroserver.yml
para garantir que ele esteja configurado corretamente.Você pode fazer mau uso de ~/.my.cnf para poder alterar a senha-raiz do mysql.
O truque é ter uma tarefa "Set root password" (nr.1), que irá definir a senha. Depois, você tem uma tarefa, que cria um ~/.my.cnf com as credenciais corretas (nr.2).
Em um novo sistema, ~/.my.cnf não está presente. A tarefa nr.1 criará mysql-root-user com as credenciais fornecidas. Em um sistema atual, as credenciais de ~/.my.cnf são usadas para fazer login e definir a senha para mysql_root_password . A tarefa nr.2 criará ~/.my.cnf , ou substituirá as credenciais antigas existentes ~/.my.cnf por novas.
A grande vantagem desta abordagem é ter apenas uma variável "mysql_root_password", que é sempre a correta do ponto de vista de um playbook. No(s) sistema(s) atual(is), ~/.my.cnf é um tipo de armazenamento para credenciais mysql locais atuais.
com client.my.cnf.j2:
Leitura adicional
Notas relevantes de ansible-mysql_user_module-documentation :
Nota 1:
Nota 2:
Para a próxima pessoa que vier à procura de respostas por aqui. Embora a resposta aceita seja verdadeira, você deve ser mais diligente se estiver usando o MySQL 5.7 porque não há login anônimo permitido no mysqld no modo daemonizado (serviço). Em vez disso, você DEVE raspar o /var/log/mysqld.log para obter uma senha TEMPORÁRIA que alguém decidiu criar e usá-la no login_password=ydaetskcoR. Esse foi um recurso que eles decidiram implementar na versão 5.7 do repositório dev, portanto, se você quiser evitá-lo, use uma versão mais antiga (5.6).
Documentação aqui: 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/
Dê uma olhada neste Módulo Ansible, ele fornece uma maneira fácil e idempotente para
mysql_secure_installation
o AnsibleExemplo - com uma nova instalação do MySQL
Exemplo - Alterar uma senha de root existente
você pode encontrar um exemplo completo no seguinte Link
https://github.com/eslam-gomaa/mysql_secure_installation_Ansible
Existe um playbook Ansible usado para proteger o MySQL.
https://github.com/dev-sec/ansible-mysql-hardening
Isso não apenas alterou a senha do root, mas também executa algumas etapas adicionais para proteger o servidor.
Dê uma olhada no arquivo leia-me.