Подтвердить что ты не робот

Автоматизация mysql_secure_installation с помощью команды echo через оболочку script

Я пытаюсь автоматизировать mysql_secure_installation script с автоматическим ответом. Мой код выглядит следующим образом:

echo "& y y abc abc y y y y" | ./usr/bin/mysql_secure_installation

Фактические вопросы, которые я автоматизирую, следующие:

Enter current password for root (enter for none): <enter>
Set root password? [Y/n] y
New password: abc
Re-enter new password: abc
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] y
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y

Но это дает мне ошибку "Извините, вы не можете использовать пустой пароль здесь", но на экране я использовал клавишу возврата для первого вопроса.

4b9b3361

Ответ 2

Я наткнулся на этот вопрос, но решил запустить запросы вручную с помощью Bash script:

#!/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

Ответ 3

Так как mysql_secure_installation является всего лишь Bash script, просто посмотрите исходный код, как показано здесь. Посмотрите на строки, которые читаются, do_query (обратите внимание, что дополнительное пространство, которое я разместил после do_query; нужно найти запросы по сравнению с функцией), а затем вы можете найти эти команды.

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;

Обратите внимание, что для этого примера у меня установлен пароль на root, но вы можете изменить его, чтобы соответствовать вашим потребностям настройки. В любом случае, возьмите эту просто кучу команд MySQL и сохраните ее в файле с именем mysql_secure_installation.sql.

Завершив это, просто запустите следующую команду с помощью script, чтобы защитить установку MySQL:

mysql -sfu root < "mysql_secure_installation.sql"

Ошибки молчания s и f заставляют команды продолжать, даже если один задыхается. u относится к имени пользователя, которое сразу же следует за ним, которое в этом случае явно root.

Запустите это в развертывании script, где MySQL устанавливается изначально без пароля, и вы все настроены на его блокировку без какого-либо взаимодействия с клавиатурой.

PS: Этот script был объединен для обеспечения установки MySQL на Ubuntu 14.04, который был установлен с набором export DEBIAN_FRONTEND=noninteractive, а фактическая команда установки установлена ​​на sudo -E aptitude install -y --assume-yes -q mysql-server mysql-client. Выполнение этого приведет к чистой установке MySQL на Ubuntu без пароля; который хорош для сценариев развертывания. Этот mysql -sfu root < "mysql_secure_installation.sql" просто блокирует все это через несколько секунд после этой установки.

Ответ 4

Я просто сделал это на CentOS 6.7 со следующим:

mysql_secure_installation <<EOF

y
secret
secret
y
y
y
y
EOF

Ответ 5

Вы можете попробовать следующее:

echo -e "\ny\ny\nabc\nabc\ny\ny\ny\ny" | ./usr/bin/mysql_secure_installation