echo ou sed fora de um arquivo ks para gerar um script mysql_secure

0

vou criar um arquivo KS (Kickstart para instalação automatizada do SO). Eu instalo o mariadb com o arquivo ks. Mas parece um problema para executar o script mysql_secure.

Minha idéia é gerar um script no arquivo ks que executará as mesmas etapas como o script mysql_secure e, em seguida, criará um systemd.service para iniciar este script.

Mas agora eu tenho muitos problemas com as aspas simples e duplas se faço eco do meu script assim:

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

só ecoará a primeira linha "echo mysqladmin -u senha de root '"' segredo '"' > > / root / mysqlsec_skript.sh" as outras linhas não anexadas ao mysqlsec_skript.sh

Alguém poderia me ajudar a corrigir o escape ou usar uma outra ferramenta como "sed" que o script iria corrigir criado?

Por favor, desculpe o meu mau inglês e obrigado pela ajuda!

    
por user2944635 18.08.2015 / 14:59

1 resposta

1

Eu não tenho certeza se entendi todos os seus ecos, mas isso pode ser o que você quiser. Coloque exatamente o que você deseja ter no arquivo mysqlsec_skript.sh dentro de uma string aqui , ou seja, uma string multilinha que começa na linha depois de um "< < 'endoffileindicator'" e termina pouco antes uma linha que consiste apenas no indicador de fim de curso escolhido. Eu usei o single char "!" como endoffileindicator. Portanto, o comando cat lê tudo até a linha com apenas "!" (sem espaços permitidos) e copia para o seu destino.

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
    
por 18.08.2015 / 20:51