Cómo establecer la contraseña de root mySQL usando Ansible

Cómo establecer la contraseña de root mySQL usando Ansible
La mayoría de las distribuciones de Linux, incluidas Centos/Rhel y Ubuntu/Debian, no establecen la contraseña de root de MySQL automáticamente. Como la contraseña de root MySQL no se establece automáticamente, uno puede iniciar sesión en la consola MySQL como la raíz sin ninguna contraseña. Esto no es muy bueno para la seguridad.

En Centos/Rhel, puede ejecutar fácilmente el mysql_secure_installation Comando para configurar una contraseña de root. Pero en Ubuntu 20.04 LTS, este método no funciona, ya que MySQL utiliza un complemento de autenticación diferente para el raíz usuario.

Este artículo le mostrará cómo configurar una contraseña de root MySQL en Centos 8 y Ubuntu 20.04 distribuciones LTS Linux utilizando módulos Ansible.

Requisitos previos


Si desea probar los ejemplos incluidos en este artículo,

1) Debe tener Ansible instalado en su computadora.

2) Debe tener al menos un host CentOS/RHEL 8 o un Ubuntu 20.04 host LTS configurado para la automatización Ansible.

Hay muchos artículos sobre Linuxhint dedicados a instalar Ansible y configurar hosts para Automatización Ansible. Puede verificarlos si es necesario.

Configuración de un directorio de proyecto

Antes de avanzar más, estableceremos un nuevo directorio de proyectos Ansible, solo para mantener las cosas un poco organizadas.

Para crear el directorio del proyecto mysql-root-pass/ y todos los subdirectorios requeridos (en su directorio de trabajo actual), ejecute el siguiente comando:

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

Una vez que se crea el directorio del proyecto, navegue al directorio del proyecto, de la siguiente manera:

$ CD MySQL-Root-Pass/

Crear un Hospedadores archivo de inventario, como sigue:

$ nano anfitriones

Agregue los nombres de IP o DNS de host de su CentOS/RHEL 8 o Ubuntu 20.04 Hosts LTS en el archivo de inventario (un host por línea), como se muestra en la captura de pantalla a continuación.

Una vez que haya terminado, guarde el archivo presionando + X, seguido por Y y .

Aquí, he creado dos grupos, Centos8, y ubuntu20. El Centos8 El grupo tiene el nombre DNS de mi host Centos 8, VM3.notekita.comunicarse; y el ubuntu20 El grupo tiene el nombre DNS de mi Ubuntu 20.04 anfitrión LTS, VM7.notekita.comunicarse.

Crear un archivo de configuración ansible ansible.CFG En su directorio de proyecto, como sigue:

$ nano ansible.CFG

Escriba las siguientes líneas en el ansible.CFG archivo:

[Valores predeterminados]
inventario = hosts
host_key_checking = falso

Una vez que haya terminado, guarde el ansible.CFG Archivo presionando + X, seguido por Y y .

Intenta hacer ping a todos los hosts que has agregado en tu Hospedadores archivo de inventario, como sigue:

$ ansible all -u ansible -m ping

Como puede ver, el host My Centos 8 (VM3.notekita.com) y ubuntu 20.04 LTS Host (VM7.notekita.com) son accesibles.

Instalación de MySQL y configurando la contraseña de root en CentOS/RHEL 8

Esta sección le mostrará cómo instalar el servidor de base de datos MySQL y configurar una contraseña de root en CentOS 8 usando Ansible. El mismo procedimiento debe funcionar en RHEL 8.

Crea el nuevo libro de jugadas Ansible install_mysql_centos8.yaml en el Libros de jugadas/ Directorio, como sigue:

$ Nano Playbooks/install_mysql_centos8.yaml

Escriba las siguientes líneas en el install_mysql_centos8.yaml archivo:

- Anfitriones: Centos8
Usuario: Ansible
hecho realidad
tareas:
- Nombre: Actualizar el caché del repositorio del paquete DNF
DNF:
update_cache: verdadero
- Nombre: Instale el servidor MySQL en Centos 8
DNF:
Nombre: mysql-server
Estado: presente
- Nombre: Instale el cliente MySQL en Centos 8
DNF:
Nombre: mysql
Estado: presente
- Nombre: Asegúrese de que el servicio mySQLD se esté ejecutando
servicio:
Nombre: mysqld
Estado: comenzó
habilitado: verdadero

- Nombre: Instale la biblioteca Python3-Pymysql
DNF:
Nombre: Python3-Pymysql
Estado: presente

Una vez que haya terminado, presione + X, seguido por Y y , Para salvar el install_mysql_centos8.yaml archivo.

La línea de abajo le dice a Ansible que ejecute el libro de jugadas install_mysql_centos8.yaml en cada anfitrión en el Centos8 grupo.

Aquí, he definido 5 tareas.

La primera tarea actualiza el caché del repositorio del paquete DNF de CentOS 8 utilizando el Ansible DNF módulo.

La segunda tarea instala el paquete de servidor MySQL servidor mysql Usando el Ansible DNF módulo.

La tercera tarea instala el paquete de cliente MySQL mysql Usando el Ansible DNF módulo.

La cuarta tarea asegura que el mysqld El servicio se está ejecutando y que se ha agregado al inicio del sistema para que se inicie automáticamente en el arranque.

La quinta tarea instala la biblioteca MySQL Python 3 pymysql. Esto se requiere para acceder a MySQL desde Ansible.

Ejecutar el install_mysql_centos8.yaml Libro de jugadas, como sigue:

$ Ansible-Playbook Playbooks/install_mysql_centos8.yaml

Como puedes ver, el libro de jugadas install_mysql_centos8.yaml corrió con éxito.

En mi anfitrión CentOS 8, puedo acceder a MySQL como el raíz Usuario sin contraseña, como puede ver en la captura de pantalla a continuación:

$ sudo mysql -u root

Ahora que el servidor MySQL está instalado, es hora de configurar una contraseña de root para el servidor MySQL.

Crear el nuevo archivo de variable de grupo Centos8 (en el Group_vars/ directorio) para el Centos8 grupo, como sigue:

$ nano group_vars/centos8

Agregar una nueva variable mysql_pass con la contraseña de root (en mi caso, secreto) le gustaría establecer, como se muestra en la captura de pantalla a continuación.

Una vez que haya terminado, presione + X, seguido por Y y , Para guardar el archivo.

Crea un nuevo libro de jugadas set_root_pass_centos8.yaml Con el siguiente comando:

$ Nano Playbooks/set_root_pass_centos8.yaml

Escriba las siguientes líneas en el set_root_pass_centos8.yaml archivo:

- Anfitriones: Centos8
Usuario: Ansible
hecho realidad
tareas:
- Nombre: Establecer contraseña de root mySQL
mysql_user:
Login_host: 'localhost'
Login_user: 'root'
contraseña de inicio de sesión: "
Nombre: 'raíz'
Contraseña: 'mysql_pass'
Estado: presente

Una vez que haya terminado, presione + X, seguido por Y y , Para salvar el set_root_pass_centos8.yaml archivo.

Este libro de jugadas usa el mysql_user Módulo ansible para establecer una contraseña de root mySQL.

El Login_host, Login_user, y contraseña de inicio de sesión opciones de la mysql_user El módulo Ansible se utilizan para establecer el nombre de host de inicio de sesión, nombre de usuario y contraseña de inicio de sesión mySQL actual, respectivamente. Por defecto, el nombre host de inicio de sesión mysql (Login_host) es el hostil, el nombre de usuario de inicio de sesión (Login_user) es el raíz, y el inicio de sesión contraseña (contraseña de inicio de sesión) esta vacio (") en Centos 8.

El contraseña opción del mysql_user El módulo Ansible se usa para establecer una nueva contraseña de root de MySQL, aquí. La contraseña de root mySQL será el valor del mysql_pass variable de grupo que se estableció anteriormente.

Ejecutar el libro de jugadas set_root_pass_centos8.yaml Con el siguiente comando:

$ Ansible-Playbook Playbooks/set_root_pass_centos8.yaml

El libro de jugadas se ejecutó con éxito, como se ve en la captura de pantalla a continuación:

Como puede ver, ya no puedo iniciar sesión en el servidor MySQL sin una contraseña de root.

Para iniciar sesión en el servidor mysql como el raíz Usuario con una contraseña, ejecute el siguiente comando en su host CentOS 8:

$ sudo mysql -u root -p

Escriba la contraseña de root que ha establecido usando Ansible y presione .

Debe iniciarse sesión en el servidor MySQL como el raíz usuario.

Instalación de MySQL y configurando la contraseña de root en Ubuntu 20.04 LTS

Esta sección le mostrará cómo instalar el servidor de base de datos MySQL y configurar una contraseña de root en Ubuntu 20.04 LTS usando Ansible.

Crea un nuevo libro de jugadas Ansible install_mysql_ubuntu20.yaml en el Libros de jugadas/ Directorio, como sigue:

$ Nano Playbooks/install_mysql_ubuntu20.yaml

Escriba las siguientes líneas en el install_mysql_ubuntu20.yaml archivo:

- Anfitriones: Ubuntu20
Usuario: Ansible
hecho realidad
tareas:
- Nombre: Actualizar el caché del repositorio de paquetes apt
apto:
update_cache: verdadero
- Nombre: Instale el servidor MySQL en Ubuntu 20.04 LTS
apto:
Nombre: mysql-server
Estado: presente
- Nombre: Instale el cliente MySQL en Ubuntu 20.04 LTS
apto:
Nombre: mysql-client
Estado: presente
- Nombre: Asegúrese de que el servicio mySQL se esté ejecutando
servicio:
Nombre: mysql
Estado: comenzó
habilitado: verdadero
- Nombre: Instale la biblioteca Python3-Pymysql
apto:
Nombre: Python3-Pymysql
Estado: presente

Una vez que haya terminado, presione + X, seguido por Y y , Para salvar el install_mysql_ubuntu20.yaml archivo.

La siguiente línea le dice a Ansible que ejecute el libro de jugadas install_mysql_ubuntu20.yaml en cada anfitrión en el ubuntu20 grupo:

Aquí, he definido 5 tareas.

La primera tarea actualiza el caché del repositorio de paquetes APT de Ubuntu 20.04 lts usando el ansible apto módulo.

La segunda tarea instala el paquete de servidor MySQL servidor mysql Usando el Ansible apto módulo.

La tercera tarea instala el paquete de cliente MySQL mysql Usando el Ansible apto módulo.

La cuarta tarea asegura que el mysql El servicio se está ejecutando y que se ha agregado al inicio del sistema para que se inicie automáticamente en el arranque.

La quinta tarea instala la biblioteca MySQL Python 3 pymysql. Esto se requiere para acceder a MySQL desde Ansible.

Ejecutar el install_mysql_ubuntu20.yaml Libro de jugadas, como sigue:

$ Ansible-Playbook Playbooks/install_mysql_ubuntu20.yaml

Como puedes ver, el libro de jugadas install_mysql_ubuntu20.yaml corrió con éxito.

En mi ubuntu 20.04 LTS Host, puedo acceder a MySQL como el raíz Usuario sin contraseña, como puede ver en la captura de pantalla a continuación.

$ sudo mysql -u root

Ahora que el servidor MySQL está instalado, es hora de configurar una contraseña de root para el servidor MySQL.

Crear un nuevo archivo variable de grupo ubuntu20 (en el Group_vars/ directorio) para el ubuntu20 grupo, como sigue:

$ nano group_vars/ubuntu20

Agregar una nueva variable, mysql_pass, con la contraseña de root (en mi caso, muy secreto) que le gustaría establecer, como se muestra en la captura de pantalla a continuación.

Una vez que haya terminado, presione + X, seguido por Y y , Para guardar el archivo.

Crea un nuevo libro de jugadas set_root_pass_ubuntu20.yaml Con el siguiente comando:

$ Nano Playbooks/set_root_pass_ubuntu20.yaml

Escriba las siguientes líneas en el set_root_pass_ubuntu20.yaml archivo:

- Anfitriones: Ubuntu20
Usuario: Ansible
hecho realidad
tareas:
- Nombre: Cambie el complemento de autenticación del usuario root de MySQL a mysql_native_password
shell: mysql -u root -e 'actualizar mysql.user set plugin = "mysql_native_password"
Donde user = "root" y host = "localhost" '
- Nombre: privilegios de descarga
shell: mysql -u root -e 'privilegios de descarga'
- Nombre: Establecer contraseña de root mySQL
mysql_user:
Login_host: 'localhost'
Login_user: 'root'
contraseña de inicio de sesión: "
Nombre: 'raíz'
Contraseña: 'mysql_pass'
Estado: presente

Una vez que haya terminado, presione + X, seguido por Y y , Para salvar el set_root_pass_ubuntu20.yaml archivo.

Aquí, he definido tres tareas.

La primera tarea cambia el complemento de autenticación del MySQL raíz usuario de auth_socket a mysql_native_password.

La segunda tarea recarga todos los privilegios.

La tercera tarea usa el mysql_user Módulo ansible para establecer una contraseña de root mySQL.

En la tercera tarea, el Login_host, Login_user, y contraseña de inicio de sesión opciones de la mysql_user El módulo Ansible se utilizan para establecer el nombre de host de inicio de sesión, nombre de usuario y contraseña de inicio de sesión mySQL actual, respectivamente. Por defecto, el nombre host de inicio de sesión mysql (Login_host) es hostil, el nombre de usuario de inicio de sesión (Login_user) es raíz, y el inicio de sesión contraseña (contraseña de inicio de sesión) esta vacio (") en el sistema.

Aquí el contraseña opción del mysql_user El módulo Ansible se usa para establecer una nueva contraseña de root de MySQL. La contraseña de root mySQL será el valor del mysql_pass variable de grupo, que establecí anteriormente, en el Group_vars/Ubuntu20 archivo.

Ejecutar el libro de jugadas set_root_pass_ubuntu20.yaml Con el siguiente comando:

$ Ansible-Playbook Playbooks/set_root_pass_ubuntu20.yaml

El libro de jugadas se ejecutó con éxito, como puede ver en la captura de pantalla a continuación:

Como puede ver, ya no puedo iniciar sesión en el servidor MySQL sin una contraseña de root.

$ sudo mysql -u root

Para iniciar sesión en el servidor MySQL como usuario raíz con la contraseña establecida, ejecute el siguiente comando en su Ubuntu 20.04 LTS Host:

$ sudo mysql -u root -p

Escriba la contraseña de root que ha establecido usando Ansible y presione .

Debe iniciarse sesión en el servidor MySQL como usuario root.

Conclusión

Este artículo le mostró cómo instalar el servidor MySQL y establecer una contraseña de root MySQL en CentOS 8 y Ubuntu 20.04 distribuciones LTS Linux usando Ansible. Este artículo usó el mysql_user Módulo Ansible para configurar la contraseña de root de MySQL. Puede usar este módulo para cambiar la contraseña de root de MySQL, crear nuevos usuarios de MySQL y antes de muchas más funciones de administración de usuarios.

Para más información sobre el mysql_user Módulo, verifique la documentación oficial del módulo mysql_user.