使用echo命令通过shell脚本自动执行mysql_secure_installation

我正在尝试自动响应mysql_secure_installation脚本的自动化。 我的代码如下:

echo "& yy abc abc yyyy" | ./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 

但它给了我一个错误“对不起,你不能在这里使用一个空的密码”,但在我用来按第一个问题的返回键的屏幕。

你会尝试使用期望 。 看看这个自动化的mysql_secure_installation或者我的修改 。

我偶然发现了这个问题,但决定通过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 

由于mysql_secure_installation只是一个Bash脚本,请查看原始代码,如下所示 。 查找读取的行, do_query (请注意,我在do_query之后放置了额外的空间;需要查找与函数相关的查询),然后可以find这些命令。

 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的文件中。

完成后,只需通过脚本运行以下命令来保护MySQL的安装:

 mysql -sfu root < "mysql_secure_installation.sql" 

即使一个人窒息,沉默的错误也会使命令继续下去。 u涉及到紧随其后的用户名,在这种情况下显然是root

在一个部署脚本中运行这个脚本,在这个脚本中最初没有安装密码,并且你都被设置为在没有任何键盘交互的情况下将其locking。

PS:这个脚本放在一起,以确保安装在Ubuntu 14.04上的MySQL安装与export DEBIAN_FRONTEND=noninteractive设置,实际安装命令设置为sudo -E aptitude install -y --assume-yes -q mysql-server mysql-client 。 这样做会干净地在Ubuntu上安装MySQL而不需要密码; 这对部署脚本很好。 这个mysql -sfu root < "mysql_secure_installation.sql"只是在发生安装之后的几秒钟内locking它。

我只是在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