Como definir a senha do MySQL Root usando Ansible

Como definir a senha do MySQL Root usando Ansible
A maioria das distribuições Linux, incluindo CentOS/Rhel e Ubuntu/Debian, não define a senha do MySQL Root automaticamente. Como a senha do MySQL Root não é definida automaticamente, pode -se fazer login no console MySQL como a raiz sem nenhuma senha. Isso não é muito bom para a segurança.

No CentOS/Rhel, você pode executar facilmente o mysql_secure_installation comando para configurar uma senha root. Mas no Ubuntu 20.04 LTS, esse método não funciona, pois o MySQL usa um plugin de autenticação diferente para o raiz do utilizador.

Este artigo mostrará como configurar uma senha do MySQL Root no CentOS 8 e Ubuntu 20.04 Distribuições LTS Linux usando módulos Ansible.

Pré -requisitos


Se você quiser experimentar os exemplos incluídos neste artigo,

1) Você deve ter o Ansible instalado em seu computador.

2) Você deve ter pelo menos um host do CentOS/RHEL 8 ou um Ubuntu 20.04 Host LTS configurado para Ansible Automation.

Existem muitos artigos sobre Linuxhint dedicados à instalação do Ansible e configurando hosts para Ansible Automation. Você pode verificar isso se necessário.

Configurando um diretório de projeto

Antes de seguirmos em frente, configuraremos um novo diretório de projeto Ansible, apenas para manter as coisas um pouco organizadas.

Para criar o diretório do projeto mysql-root-pass/ E todos os subdiretos necessários (em seu diretório de trabalho atual), execute o seguinte comando:

$ mkdir -pv mysql-root-pass/playbooks, host_vars, group_vars

Depois que o diretório do projeto for criado, navegue até o diretório do projeto, como segue:

$ CD mysql-root-pass/

Criar uma anfitriões Arquivo de inventário, como segue:

$ nano hosts

Adicione os nomes IP do host ou DNS do seu CentOS/Rhel 8 ou Ubuntu 20.04 Hosts LTS no arquivo de inventário (um host por linha), como mostrado na captura de tela abaixo.

Depois de terminar, salve o arquivo pressionando + X, seguido pela Y e .

Aqui, eu criei dois grupos, CENTOS8, e Ubuntu20. O CENTOS8 Grupo tem o nome DNS do meu host CentOS 8, VM3.NodeKite.com; e a Ubuntu20 Grupo tem o nome DNS do meu Ubuntu 20.04 Host LTS, VM7.NodeKite.com.

Crie um arquivo de configuração Ansible Ansible.cfg No seu diretório de projeto, como segue:

$ Nano Ansible.cfg

Digite as seguintes linhas no Ansible.cfg arquivo:

[Padrões]
inventário = hosts
host_key_checking = false

Depois de terminar, salve o Ansible.cfg arquivo pressionando + X, seguido pela Y e .

Tente ping em todos os hosts que você adicionou em seu anfitriões Arquivo de inventário, como segue:

$ Ansible All -u Ansible -M Ping

Como você pode ver, o host My Centos 8 (VM3.NodeKite.com) e Ubuntu 20.04 Host LTS (VM7.NodeKite.com) são acessíveis.

Instalando o MySQL e configurando a senha raiz no CentOS/RHEL 8

Esta seção mostrará como instalar o MySQL Database Server e configurar uma senha root no CentOS 8 usando Ansible. O mesmo procedimento deve funcionar no RHEL 8.

Crie o novo manual Ansible Install_Mysql_Centos8.Yaml no Playbooks/ Diretório, como segue:

$ Nano Playbooks/Install_Mysql_Centos8.Yaml

Digite as seguintes linhas no Install_Mysql_Centos8.Yaml arquivo:

- Hosts: CentOS8
Usuário: Ansible
tornar verdade
tarefas:
- Nome: Atualizar cache do repositório de pacotes DNF
DNF:
update_cache: true
- Nome: Instale o MySQL Server no CentOS 8
DNF:
Nome: MySQL-Server
Estado: presente
- Nome: Instale o MySQL Client no CentOS 8
DNF:
Nome: MySQL
Estado: presente
- Nome: Verifique se o serviço MySQLD está em execução
serviço:
Nome: MySqld
Estado: começou
ativado: true

- Nome: Instale a Biblioteca Python3-Pymysql
DNF:
Nome: Python3-Pymysql
Estado: presente

Depois de terminar, pressione + X, seguido pela Y e , Para salvar o Install_Mysql_Centos8.Yaml arquivo.

A linha abaixo diz Ansible para executar o manual Install_Mysql_Centos8.Yaml Em todos os anfitriões no CENTOS8 grupo.

Aqui, eu defini 5 tarefas.

A primeira tarefa atualiza o cache do repositório de pacote DNF do CentOS 8 usando o Ansible DNF módulo.

A segunda tarefa instala o pacote MySQL Server MySQL-Server usando o Ansible DNF módulo.

A terceira tarefa instala o pacote do cliente MySQL mysql usando o Ansible DNF módulo.

A quarta tarefa garante que o mysqld O serviço está em execução e que foi adicionado à inicialização do sistema para iniciar automaticamente na inicialização.

A quinta tarefa instala a biblioteca Python 3 MySQL pymysql. Isso é necessário para acessar o MySQL da Ansible.

Execute o Install_Mysql_Centos8.Yaml Manual, como segue:

$ Ansible-Playbook Playbooks/Install_Mysql_Centos8.Yaml

Como você pode ver, o manual Install_Mysql_Centos8.Yaml correu com sucesso.

No meu host do CentOS 8, posso acessar o mysql como o raiz Usuário sem senha, como você pode ver na captura de tela abaixo:

$ sudo mysql -u root

Agora que o servidor MySQL está instalado, é hora de configurar uma senha root para o servidor MySQL.

Crie o novo arquivo variável de grupo CENTOS8 (no group_vars/ diretório) para o CENTOS8 Grupo, como segue:

$ nano group_vars/CentOS8

Adicione uma nova variável mysql_pass com a senha raiz (no meu caso, segredo) você gostaria de definir, conforme mostrado na captura de tela abaixo.

Depois de terminar, pressione + X, seguido pela Y e , Para salvar o arquivo.

Crie um novo manual SET_ROOT_PASP_CENTOS8.Yaml com o seguinte comando:

$ nano Playbooks/set_root_pass_Centos8.Yaml

Digite as seguintes linhas no SET_ROOT_PASP_CENTOS8.Yaml arquivo:

- Hosts: CentOS8
Usuário: Ansible
tornar verdade
tarefas:
- Nome: Definir senha do MySQL Root
mysql_user:
login_host: 'localhost'
login_user: 'root'
senha de login: "
Nome: 'raiz'
Senha: 'mysql_pass'
Estado: presente

Depois de terminar, pressione + X, seguido pela Y e , Para salvar o SET_ROOT_PASP_CENTOS8.Yaml arquivo.

Este manual usa o mysql_user Módulo Ansible para definir uma senha do MySQL Root.

O login_host, login_user, e senha de login opções do mysql_user Módulo Ansible são usados ​​para definir o nome atual do host MySQL Login, nome de usuário e senha, respectivamente. Por padrão, o MySQL Login HostName (login_host) é o LocalHost, o nome de usuário de login (login_user) é o raiz, e o login senha (senha de login) está vazia () no CentOS 8.

O senha opção do mysql_user Módulo Ansible é usado para definir uma nova senha do MySQL Root, aqui. A senha do MySQL Root será o valor do mysql_pass variável de grupo que foi definida mais cedo.

Execute o manual SET_ROOT_PASP_CENTOS8.Yaml com o seguinte comando:

$ Ansible-Playbook Playbooks/Set_Root_Pass_Centos8.Yaml

O manual foi executado com sucesso, como visto na captura de tela abaixo:

Como você pode ver, não posso mais fazer login no servidor MySQL sem uma senha root.

Para fazer login no servidor MySQL como o raiz Usuário com uma senha, execute o seguinte comando no seu host do CentOS 8:

$ sudo mysql -u root -p

Digite a senha raiz que você definiu usando Ansible e pressione .

Você deve estar conectado ao servidor MySQL como o raiz do utilizador.

Instalando o MySQL e configurando a senha root no Ubuntu 20.04 LTS

Esta seção mostrará como instalar o MySQL Database Server e configurar uma senha root no Ubuntu 20.04 LTS usando Ansible.

Crie um novo manual Ansible install_mysql_ubuntu20.Yaml no Playbooks/ Diretório, como segue:

$ nano Playbooks/install_mysql_ubuntu20.Yaml

Digite as seguintes linhas no install_mysql_ubuntu20.Yaml arquivo:

- Hosts: Ubuntu20
Usuário: Ansible
tornar verdade
tarefas:
- Nome: Atualizar cache do repositório de pacote APT
APT:
update_cache: true
- Nome: Instale o MySQL Server no Ubuntu 20.04 LTS
APT:
Nome: MySQL-Server
Estado: presente
- Nome: Instale o MySQL Client no Ubuntu 20.04 LTS
APT:
Nome: MySQL-Client
Estado: presente
- Nome: Verifique se o serviço MySQL está em execução
serviço:
Nome: MySQL
Estado: começou
ativado: true
- Nome: Instale a Biblioteca Python3-Pymysql
APT:
Nome: Python3-Pymysql
Estado: presente

Depois de terminar, pressione + X, seguido pela Y e , Para salvar o install_mysql_ubuntu20.Yaml arquivo.

A linha a seguir diz a Ansible para executar o manual install_mysql_ubuntu20.Yaml Em todos os anfitriões no Ubuntu20 grupo:

Aqui, eu defini 5 tarefas.

A primeira tarefa atualiza o cache do repositório do pacote apt do Ubuntu 20.04 LTS usando o Ansible apt módulo.

A segunda tarefa instala o pacote MySQL Server MySQL-Server usando o Ansible apt módulo.

A terceira tarefa instala o pacote do cliente MySQL mysql usando o Ansible apt módulo.

A quarta tarefa garante que o mysql O serviço está em execução e que foi adicionado à inicialização do sistema para iniciar automaticamente na inicialização.

A quinta tarefa instala a biblioteca Python 3 MySQL pymysql. Isso é necessário para acessar o MySQL da Ansible.

Execute o install_mysql_ubuntu20.Yaml Manual, como segue:

$ Ansible-Playbook Playbooks/install_mysql_ubuntu20.Yaml

Como você pode ver, o manual install_mysql_ubuntu20.Yaml correu com sucesso.

No meu Ubuntu 20.04 host LTS, eu posso acessar o mysql como o raiz Usuário sem senha, como você pode ver na captura de tela abaixo.

$ sudo mysql -u root

Agora que o servidor MySQL está instalado, é hora de configurar uma senha root para o servidor MySQL.

Crie um novo arquivo de variável de grupo Ubuntu20 (no group_vars/ diretório) para o Ubuntu20 Grupo, como segue:

$ nano group_vars/ubuntu20

Adicione uma nova variável, mysql_pass, com a senha raiz (no meu caso, Extemcret) que você gostaria de definir, conforme mostrado na captura de tela abaixo.

Depois de terminar, pressione + X, seguido pela Y e , Para salvar o arquivo.

Crie um novo manual set_root_pass_ubuntu20.Yaml com o seguinte comando:

$ nano Playbooks/set_root_pass_ubuntu20.Yaml

Digite as seguintes linhas no set_root_pass_ubuntu20.Yaml arquivo:

- Hosts: Ubuntu20
Usuário: Ansible
tornar verdade
tarefas:
- Nome: Altere o plug -in de autenticação do Usuário ROOT MySQL para MySQL_native_password
shell: mysql -u root -e 'atualize mysql.Definir do usuário plugin = "mysql_native_password"
Onde user = "root" e host = "localhost" '
- Nome: Privilégios Flush
Shell: Mysql -u Root -e 'Privilégios de Flush'
- Nome: Definir senha do MySQL Root
mysql_user:
login_host: 'localhost'
login_user: 'root'
senha de login: "
Nome: 'raiz'
Senha: 'mysql_pass'
Estado: presente

Depois de terminar, pressione + X, seguido pela Y e , Para salvar o set_root_pass_ubuntu20.Yaml arquivo.

Aqui, eu defini três tarefas.

A primeira tarefa altera o plugin de autenticação do MySQL raiz usuário de auth_socket para mysql_native_password.

A segunda tarefa recarrega todos os privilégios.

A terceira tarefa usa o mysql_user Módulo Ansible para definir uma senha do MySQL Root.

Na terceira tarefa, o login_host, login_user, e senha de login opções do mysql_user Módulo Ansible são usados ​​para definir o nome atual do host MySQL Login, nome de usuário e senha, respectivamente. Por padrão, o MySQL Login HostName (login_host) é LocalHost, o nome de usuário de login (login_user) é raiz, e o login senha (senha de login) está vazia () no sistema.

Aqui o senha opção do mysql_user Módulo Ansible é usado para definir uma nova senha do MySQL Root. A senha do MySQL Root será o valor do mysql_pass variável de grupo, que eu defini anteriormente, no group_vars/ubuntu20 arquivo.

Execute o manual set_root_pass_ubuntu20.Yaml com o seguinte comando:

$ Ansible-Playbook Playbooks/set_root_pass_ubuntu20.Yaml

O manual foi executado com sucesso, como você pode ver na captura de tela abaixo:

Como você pode ver, não posso mais fazer login no servidor MySQL sem uma senha root.

$ sudo mysql -u root

Para fazer login no servidor MySQL como o usuário root com a senha definida, execute o seguinte comando no seu Ubuntu 20.04 Host LTS:

$ sudo mysql -u root -p

Digite a senha raiz que você definiu usando Ansible e pressione .

Você deve estar conectado ao servidor MySQL como o usuário root.

Conclusão

Este artigo mostrou como instalar o servidor MySQL e definir uma senha do MySQL Root no CentOS 8 e Ubuntu 20.04 Distribuições LTS Linux usando Ansible. Este artigo usou o mysql_user Módulo Ansible para configurar a senha do MySQL Root. Você pode usar este módulo para alterar a senha do MySQL Root, criar novos usuários do MySQL e, portanto, muitas outras funções de gerenciamento de usuários.

Para mais informações sobre o mysql_user Módulo, verifique a documentação oficial do módulo MySQL_USER.