Bash与Expect脚本交互实现MySQL安全安装自动化
自动完成MySQL安全配置的Expect脚本实现
刚好我之前做批量装机脚本时也碰到过这个需求,用Expect脚本就能完美自动应答mysql_secure_installation的所有交互问题,完全不需要人工干预。下面是具体实现:
第一步:先安装Expect工具
不同发行版的安装命令略有不同,先确保系统上装了Expect:
- Debian/Ubuntu系:
sudo apt update && sudo apt install expect -y - RHEL/CentOS系:
sudo yum install expect -y
第二步:编写Expect脚本
创建一个名为mysql_secure_setup.exp的文件,内容如下(记得把YOUR_MYSQL_ROOT_PASSWORD替换成你要设置的实际密码):
#!/usr/bin/expect # 设置超时时间,避免脚本卡住 set timeout 10 # 启动mysql_secure_installation命令 spawn sudo mysql_secure_installation # 1. 输入当前root密码(无密码直接回车) expect "Enter current password for root (enter for none):" send "\r" # 2. 是否设置root密码?选Y expect "Set root password? \[Y/n\]" send "Y\r" # 3. 输入新的root密码 expect "New password:" send "YOUR_MYSQL_ROOT_PASSWORD\r" # 4. 确认新密码 expect "Re-enter new password:" send "YOUR_MYSQL_ROOT_PASSWORD\r" # 5. 是否移除匿名用户?选Y expect "Remove anonymous users? \[Y/n\]" send "Y\r" # 6. 是否禁止root远程登录?选Y(如果需要远程连接可以改成n,这里按统一硬编码来) expect "Disallow root login remotely? \[Y/n\]" send "Y\r" # 7. 是否删除测试数据库?选Y expect "Remove test database and access to it? \[Y/n\]" send "Y\r" # 8. 是否重新加载权限表?选Y expect "Reload privilege tables now? \[Y/n\]" send "Y\r" # 等待脚本执行完成 expect eof
第三步:给脚本加执行权限并在Bash脚本中调用
先给Expect脚本添加可执行权限:
chmod +x mysql_secure_setup.exp
然后在你的批量装机Bash脚本里,直接调用这个Expect脚本就行:
# 调用自动配置脚本 ./mysql_secure_setup.exp
小提示
- 如果你是在MySQL 8.0+版本上使用,有些交互提示可能略有不同,但大体逻辑一致,你可以根据实际输出调整expect里的匹配字符串
- 密码硬编码在脚本里要注意安全,批量装机完成后可以考虑清理脚本或者加密存储密码(不过你要求硬编码统一,这个就按需求来)
内容的提问来源于stack exchange,提问作者Rhys Clarke
相关产品推荐
相关产品推荐

