Echo 또는 sed는 ks 파일에서 mysql_secure 스크립트를 생성합니다.

Echo 또는 sed는 ks 파일에서 mysql_secure 스크립트를 생성합니다.

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

관련 정보