Ответ 1
Вы можете попытаться использовать expect. Посмотрите на автоматизацию mysql_secure_installation или на мою модификацию.
Я пытаюсь автоматизировать 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
Но это дает мне ошибку "Извините, вы не можете использовать пустой пароль здесь", но на экране я использовал клавишу возврата для первого вопроса.
Вы можете попытаться использовать expect. Посмотрите на автоматизацию mysql_secure_installation или на мою модификацию.
Я наткнулся на этот вопрос, но решил запустить запросы вручную с помощью 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
Так как 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"
просто блокирует все это через несколько секунд после этой установки.
Я просто сделал это на CentOS 6.7 со следующим:
mysql_secure_installation <<EOF
y
secret
secret
y
y
y
y
EOF
Вы можете попробовать следующее:
echo -e "\ny\ny\nabc\nabc\ny\ny\ny\ny" | ./usr/bin/mysql_secure_installation