Я пишу сценарий, в котором хочу запустить mysql_secure_installation
сценарий и давать соответствующие ответы на каждое приглашение. Я пробовал использовать эхо вот так:
echo -e "\n\n$db_pass\n$db_pass\n\n\n\n\n" | /usr/bin/mysql_secure_installation
Это не работает полностью. Кажется, что он правильно отвечает на последние 5 вопросов, но он не отвечает правильно на первые 3 (это на CentOS 6.5
коробка). Вот результат:
In order to log into MySQL to secure it, we'll need the current
password for the root user. If you've just installed MySQL, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
stty: standard input: Invalid argument
Enter current password for root (enter for none):
stty: standard input: Invalid argument
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MySQL
root user without the proper authorisation.
Set root password? [Y/n] ... skipping.
Он должен отправить ответ, когда его попросят ввести пароль root. Затем он должен отправить еще один ответ, когда его попросят установить пароль root. Однако, как видно из вывода, этого не происходит.
Что мне нужно сделать, чтобы это работало должным образом?
Вы не можете этого сделать. Если вы хотите взаимодействовать со скриптом, вы должны использовать что-то вроде ожидать (1) - здесь в SF и в более широком Интернете есть примеры того, как это сделать.
Вы можете подражать большей части mysql_secure_Installation с участием
/usr/bin/mysql -uroot -e "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; FLUSH PRIVILEGES;"
Все, что вам нужно сделать после этого, - это установить пароль root.
это отчет об ошибке на сайте разработчиков MySQL решает проблему mysql_secure_installation
требуется интерактивный сеанс пользователя.
Там есть хорошее обсуждение, в котором есть несколько советов и примеров использования expect
как обходной путь. Лучший совет, который, по-видимому, касается вашего желания запускать сценарий в неинтерактивном режиме (то есть без прямого взаимодействия с пользователем), - это ответ Даниэля ван Идена, который предоставляет следующее expect
сценарий:
#!/usr/bin/expect --
spawn /usr/local/mysql/bin/mysql_secure_installation
expect "Enter current password for root (enter for none):"
send "\r"
expect "Set root password?"
send "y\r"
expect "New password:"
send "password\r"
expect "Re-enter new password:"
send "password\r"
expect "Remove anonymous users?"
send "y\r"
expect "Disallow root login remotely?"
send "y\r"
expect "Remove test database and access to it?"
send "y\r"
expect "Reload privilege tables now?"
send "y\r"
puts "Ended expect script."
Кроме того, похоже, что общая проблема базовых установок MySQL с незащищенными материалами похоже, адресовано в MySQL 5.6.8 но только для новых установок через RPM или установки исходного кода, которые выполняются с --random-password
вариант:
Новые операции установки RPM (не обновления) вызывают mysql_install_db с параметром --random-passwords. Как следствие, при установке RPM, начиная с этой версии, их корневые учетные записи будут защищены и не будут иметь учетные записи анонимных пользователей. (Операции установки с использованием RPM для небьющейся сети Linux не затронуты, потому что они не используют mysql_install_db.)
Для операций установки с использованием двоичного дистрибутива .tar.gz или исходного дистрибутива вы можете вызвать mysql_install_db с параметром --random-passwords вручную, чтобы сделать вашу установку MySQL более безопасной. Это рекомендуется, особенно для сайтов с конфиденциальными данными.