KS 파일(자동 운영 체제 설치를 위한 Kickstart)을 생성하겠습니다. ks 파일을 사용하여 mariadb를 설치했습니다. 그런데 mysql_secure 스크립트를 실행하는 데 문제가 있는 것 같습니다.
내 생각은 mysql_secure 스크립트와 동일한 단계를 수행하는 스크립트를 ks 파일에 생성한 다음 systemd.service를 생성하여 스크립트를 시작하는 것입니다.
하지만 이제 스크립트를 이와 같이 에코하면 작은따옴표와 큰따옴표에 많은 문제가 발생합니다.
echo '#!/bin/bash
FILE=/root/mysqlsecure
if [ -f $FILE ];
then
echo "File $FILE exists, mysql is safe!"
else
echo "File $FILE does not exists, secure mysql"'> /root/mysqlsec_skript.sh
echo mysqladmin -u root password '"'secret'"' >> /root/mysqlsec_skript.sh
echo mysql -u root -p'"'secret'"' -e '"'UPDATE mysql.user SET Password=PASSWORD(\'secret\') WHERE User=\'root\''"' >> /root/mysqlsec_skript.sh
echo mysql -u root -p'"'secret'"' -e '"'DELETE FROM mysql.user WHERE User=\'root\' AND Host NOT IN (\'localhost\', \'127.0.0.1\', \'::1\')'"' >> /root/mysqlsec_skript.sh
echo mysql -u root -p'"'secret'"' -e '"'DELETE FROM mysql.user WHERE User=\'\''"' >> /root/mysqlsec_skript.sh
echo mysql -u root -p'"'secret'"' -e '"'DELETE FROM mysql.db WHERE Db=\'test\' OR Db=\'test\_%\''"' >> /root/mysqlsec_skript.sh
echo mysql -u root -p'"'secret'"' -e '"'FLUSH PRIVILEGES'"'>> /root/mysqlsec_skript.sh
echo touch /root/mysqlsecure >> /root/mysqlsec_skript.sh
echo fi >> /root/mysqlsec_skript.sh
chmod +x /root/mysqlsec_skript.sh
첫 번째 줄만 에코됩니다. " echo mysqladmin -u root 비밀번호 '"'secret'"' >> /root/mysqlsec_skript.sh" 다른 줄은 mysqlsec_skript.sh에 추가되지 않습니다.
누군가 이스케이프 문제를 해결하도록 도와주거나 스크립트를 올바르게 생성할 수 있는 다른 도구(예: "sed")를 사용할 수 있습니까?
저의 서투른 영어 실력을 용서해 주시고 도움을 주셔서 감사합니다!
답변1
내가 당신의 반향을 모두 이해했는지는 모르겠지만 아마도 당신이 원하는 것일 겁니다. mysqlsec_skript.sh 파일에 원하는 내용을 정확히 입력하세요.여기에 있는 문자열, "<<'endofileindicator'" 다음 줄에서 시작하고 선택한 endoffileindicator만 포함하는 줄 앞에서 끝나는 여러 줄 문자열입니다. 파일 끝 표시로 단일 문자 "!"를 사용했습니다. 따라서 cat
명령은 "!"만 나올 때까지 모든 것을 읽습니다. (공백은 허용되지 않음) 대상에 복사하세요.
cat <<'!' > /root/mysqlsec_skript.sh
#!/bin/bash
FILE=/root/mysqlsecure
if [ -f $FILE ]
then
echo "File $FILE exists, mysql is safe!"
else
echo "File $FILE does not exists, secure mysql"
mysqladmin -u root password 'secret'
mysql -u root -p'secret' -e "UPDATE mysql.user SET Password=PASSWORD('secret') WHERE User='root'"
mysql -u root -p'secret' -e "DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1')"
mysql -u root -p'secret' -e "DELETE FROM mysql.user WHERE User=''"
mysql -u root -p'secret' -e "DELETE FROM mysql.db WHERE Db='test' OR Db='test\_%'"
mysql -u root -p'secret' -e "FLUSH PRIVILEGES"
touch /root/mysqlsecure
fi
!
chmod +x /root/mysqlsec_skript.sh