Automate mysql_secure_installation with echo command via a shell script

后端 未结 11 1029
无人共我
无人共我 2020-12-12 12:46

I am trying to automate mysql_secure_installation script with automated response. My code is as follows :

echo \"& y y abc abc y y y y\" | ./usr/bin/mysq         


        
相关标签:
11条回答
  • 2020-12-12 13:02

    You can try to use expect. Look at this automating mysql_secure_installation or at my modification.

    0 讨论(0)
  • 2020-12-12 13:07

    I stumbled upon this question but decided to run the queries manually through a 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
    
    0 讨论(0)
  • 2020-12-12 13:09
    sudo mysql -e "SET PASSWORD FOR root@localhost = PASSWORD('123');FLUSH PRIVILEGES;" 
    
    printf "123\n n\n n\n n\n y\n y\n y\n" | sudo mysql_secure_installation
    

    Enter current password for root (enter for none)? (I have 123 set for root)

    Switch to unix_socket authentication? n

    Change the root password? n

    Remove anonymous users? n

    Disallow root login remotely? y

    Remove test database and access to it? y

    Reload privilege tables now? y

    Version: mysql Ver 15.1 Distrib 10.4.6-MariaDB, for osx10.14 (x86_64) using readline 5.1

    0 讨论(0)
  • 2020-12-12 13:14

    Here is an automated script for a fresh MySQL 5.7 installation based on @JakeGould's answer. Works fine on CentOS 7.5.1804.

    yum localinstall -y https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm
    yum install -y mysql-community-server
    
    # start mysql service
    service mysqld start
    
    # get Temporary root Password
    root_temp_pass=$(grep 'A temporary password' /var/log/mysqld.log |tail -1 |awk '{split($0,a,": "); print a[2]}')
    
    echo "root_temp_pass:"$root_temp_pass
    
    # mysql_secure_installation.sql
    cat > mysql_secure_installation.sql << EOF
    # Make sure that NOBODY can access the server without a password
    UPDATE mysql.user SET Password=PASSWORD('yourrootpass') WHERE User='root';
    # Kill the anonymous users
    DELETE FROM mysql.user WHERE User='';
    # disallow remote login for root
    DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
    # Kill off the demo database
    DROP DATABASE IF EXISTS test;
    DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';
    # Make our changes take effect
    FLUSH PRIVILEGES;
    EOF
    
    mysql -uroot -p"$root_temp_pass" --connect-expired-password <mysql_secure_installation.sql
    
    0 讨论(0)
  • 2020-12-12 13:15

    Just tested this on Ubuntu Bionic 18.04LTS

    Step #1

    export MYPWD="D33Ps3CR3T";
    export NEWPWD="D33P3Rs3CR3T";
    

    Step #2

    # First time **ever**
    sudo mysql_secure_installation 2>/dev/null <<MSI
    
    n
    y
    ${MYPWD}
    ${MYPWD}
    y
    y
    y
    y
    
    MSI
    
    # Did it work?
    mysql -u root -p${MYPWD} -e "SELECT 1+1";
    # -------
    

    Step #3

    # Every subsequent time
    sudo mysql_secure_installation 2>/dev/null <<MSI2
    ${MYPWD}
    n
    y
    ${NEWPWD}
    ${NEWPWD}
    y
    y
    y
    y
    
    MSI2
    
    # Just in case (optional) ....
    sudo service mysql restart
    
    # Did it work?
    mysql -u root -p${NEWPWD} -e "SELECT 1+1";
    
    

    You should be able to cut'n paste steps #2 & #3 directly into a terminal, after editing the before and after passwords from step #1.

    Notes

    • If a root password has already been set step #2 will fail, so go to step #3
    • It's just a heredoc fed into the command
    • sudo is obligatory.
    • MSI has no particular meaning (it's collision avoidance; I use EOF elsewhere in the script)
    • MYPWD == NEWPWD is allowed
    • 2>/dev/null hides the warning "stty: 'standard input': Inappropriate ioctl for device"
    • You can use &>/dev/null for fully silent mode.
    0 讨论(0)
  • I use following lines. Works fine for AWS Linux AMI 2018

    db_root_password=Password4root
    cat <<EOF | mysql_secure_installation
    y
    0
    $db_root_password
    $db_root_password
    y
    y
    y
    y
    y
    EOF
    
    0 讨论(0)
提交回复
热议问题