IT story

쉘 스크립트를 통해 echo 명령으로 mysql_secure_installation 자동화

hot-time 2021. 1. 5. 19:14
반응형

쉘 스크립트를 통해 echo 명령으로 mysql_secure_installation 자동화


자동 응답으로 mysql_secure_installation 스크립트를 자동화하려고합니다. 내 코드는 다음과 같습니다.

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 스크립트를 통해 수동으로 쿼리를 실행하기로 결정했습니다.

#!/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단지 배쉬 스크립트, 단지 확인 다음과 같이 원시 소스 코드를 . 읽은 줄 을 찾으면 ( 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.

완료되면 스크립트를 통해 다음 명령을 실행하여 MySQL 설치를 보호하십시오.

mysql -sfu root < "mysql_secure_installation.sql"

s침묵 오류와 f힘은 명령이 경우에도 하나 개의 초크를 계속합니다. u즉시에 명확-되는 케이스이다 그것은 다음에 이름에 관한 것이다 root.

MySQL이 처음에 암호없이 설치된 배포 스크립트에서 실행하고 키보드 상호 작용없이 모두 잠그도록 설정합니다.

추신 :이 스크립트는 export DEBIAN_FRONTEND=noninteractiveset과 함께 설치된 Ubuntu 14.04에서 MySQL 설치를 보호하기 위해 함께 작성되었으며 실제 설치 명령은 sudo -E aptitude install -y --assume-yes -q mysql-server mysql-client. 이렇게하면 암호없이 Ubuntu에 MySQL이 완전히 설치됩니다. 배포 스크립트에 적합합니다. 이것은 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

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

@JakeGould의 답변을 기반으로 한 새로운 mysql5.7 설치를위한 자동화 된 스크립트. Centos 7.5.1804에서 잘 작동합니다.


MySql 설치 후 간단한 명령을 사용하여 루트 암호를 변경하고 있지만 위의 error (signal 9 kill)

(FATAL: Chef::Exceptions::ChildConvergeError: Chef run process terminated by signal 9 (KILL)) Though the command works and password is changed the error is confusing.
script "change password" do
interpreter "bash"
user "root"
cwd "/tmp"
code <<-EOH
#MYSQL
root_temp_pass=$(grep 'A temporary password' /mysql/log/mysqld.log |tail -1 |awk '{split($0,a,": "); print a[2]}')

#Login as root change password
mysql -uroot -p"$root_temp_pass" -Be "ALTER USER 'root'@'localhost' IDENTIFIED BY 'Czt732ck#';" --connect-expired-password
EOH
end

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


  1. In Windows OS just search for 'mysql_secure_installation' application usually found in Drive:\MySQL_Install-DIR\bin\
  2. By pressing WindowKey + R just run the command 'Drive:\MySQL_Install-DIR\bin\mysql_secure_installation'

When you run this command a window will pop up that will walk you through the process of securing your MySQL installation. That's it!

ReferenceURL : https://stackoverflow.com/questions/24270733/automate-mysql-secure-installation-with-echo-command-via-a-shell-script

반응형