쉘 스크립트를 통해 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=noninteractive
set과 함께 설치된 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
- In Windows OS just search for 'mysql_secure_installation' application usually found in Drive:\MySQL_Install-DIR\bin\
- 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
'IT story' 카테고리의 다른 글
CTE에서 테이블의 레코드 업데이트 (0) | 2021.01.05 |
---|---|
git 및 bitbucket과 함께 자신의 사용자 이름 / 비밀번호 사용 (0) | 2021.01.05 |
파일에서 AngularJs의 변수로 HTML 템플릿로드 (0) | 2021.01.05 |
작업 단위 + 리포지토리 패턴 : 비즈니스 트랜잭션 개념의 몰락 (0) | 2020.12.31 |
MySQL : 인라인 하위 쿼리에서 여러 열 반환 (0) | 2020.12.31 |