GNU/Linux >> Tutoriales Linux >  >> Linux

Automatice mysql_secure_installation con el comando echo a través de un script de shell

Acabo de hacer esto en CentOS 6.7 con lo siguiente:

mysql_secure_installation <<EOF

y
secret
secret
y
y
y
y
EOF

Desde mysql_secure_installation es solo un script Bash, solo revise el código fuente sin procesar como se muestra aquí. Busque las líneas que dicen, do_query (tenga en cuenta que el espacio adicional que coloqué después de do_query; necesita encontrar consultas versus la función) y luego puede encontrar estos comandos.

UPDATE mysql.user SET Password=PASSWORD('root') WHERE User='root';
DELETE FROM mysql.user WHERE User='';
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
DROP DATABASE IF EXISTS test;
DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';
FLUSH PRIVILEGES;

Tenga en cuenta que para este ejemplo, tengo la contraseña establecida en root pero siéntase libre de cambiar eso para que coincida con sus necesidades de configuración. De todos modos, toma esa pila de comandos de MySQL y guárdala en un archivo llamado mysql_secure_installation.sql .

Una vez hecho esto, simplemente ejecute el siguiente comando a través de un script para asegurar la instalación de MySQL:

mysql -sfu root < "mysql_secure_installation.sql"

El s silencia los errores y el f fuerza a los comandos a continuar incluso si uno se ahoga. El u se relaciona con el nombre de usuario que le sigue inmediatamente que, en este caso, es claramente root .

Ejecute eso en un script de implementación donde MySQL se instala inicialmente sin una contraseña y está listo para bloquearlo sin ninguna interacción con el teclado.

PD:este script se creó para asegurar una instalación de MySQL en Ubuntu 14.04 que se instaló con el export DEBIAN_FRONTEND=noninteractive set y el comando de instalación real se establece en sudo -E aptitude install -y --assume-yes -q mysql-server mysql-client . Hacer eso instalará MySQL en Ubuntu sin contraseña; lo cual es bueno para los scripts de implementación. Este mysql -sfu root < "mysql_secure_installation.sql" simplemente lo bloquea todo en segundos después de que ocurre la instalación.


Me topé con esta pregunta pero decidí ejecutar las consultas manualmente a través de un script Bash:

#!/bin/bash

# Make sure that NOBODY can access the server without a password
mysql -e "UPDATE mysql.user SET Password = PASSWORD('CHANGEME') WHERE User = 'root'"
# Kill the anonymous users
mysql -e "DROP USER ''@'localhost'"
# Because our hostname varies we'll use some Bash magic here.
mysql -e "DROP USER ''@'$(hostname)'"
# Kill off the demo database
mysql -e "DROP DATABASE test"
# Make our changes take effect
mysql -e "FLUSH PRIVILEGES"
# Any subsequent tries to run queries this way will get access denied because lack of usr/pwd param

Puede intentar usar expect, que automatiza las aplicaciones interactivas. Mire esto automatizando mysql_secure_installation o mi modificación.


Linux
  1. ¿Comportamiento inesperado de un script de Shell?

  2. ¿Script de shell con función y parámetro como variables?

  3. ¿Ejecutar script con argumentos como usuario?

  4. Comando Echo con Ejemplos Prácticos

  5. ¿Es posible hacer que un script bash shell interactúe con otro programa de línea de comandos?

Comando Echo en Linux (con ejemplos)

Comando Echo en Linux con ejemplos

Comando runuser de Linux - Ejecutar Shell con ID de usuario/grupo especificado

Cómo ejecutar un comando de Shell con Python

Modificar cuentas de usuario con el comando Usermod

¿Cómo ejecutar un comando en un script de Shell?