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