Środowisko: centos7 + mariadb5.5.64.
Pokażę informacje o instalacji na ekranie, kiedy należy uruchomićmysql_secure_installation
.
# mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
Set root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
... Success!
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] y
... Success!
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] y
... Success!
By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] y
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] y
... Success!
Cleaning up...
All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!
Piszę skrypt automatyzacji oczekujący na zainstalowanie mariadb.
vim secure.exp
set timeout 60
spawn mysql_secure_installation
expect {
"Enter current password for root (enter for none): " {send "\r";exp_continue}
"Set root password? [Y/n] " {send "y\r";exp_continue}
"New password:" {send "123456\r";exp_continue}
"Re-enter new password:" {send "123456\r";exp_continue}
"Remove anonymous users? [Y/n]" {send "y\r";exp_continue}
"Disallow root login remotely? [Y/n]" {send "y\r";exp_continue}
"Remove test database and access to it? [Y/n]" {send "y\r";exp_continue}
"Reload privilege tables now? [Y/n]" {send "y\r";exp_continue}
}
Aby wykonać /usr/bin/expect secure.exp
, napotkałem błąd:
spawn mysql_secure_installation
invalid command name "Y/n"
while executing
"Y/n"
invoked from within
"expect {
"Enter current password for root (enter for none): " {send "\r";exp_continue}
"Set root password? [Y/n] " {send "y\r";exp..."
(file "secure.exp" line 3)
Nie ma sensu pisać jak poniżej:
set timeout 60
spawn mysql_secure_installation
expect {
"Enter current password for root (enter for none): " {send "\r";exp_continue}
"Set root password? \\[Y/n] " {send "y\r";exp_continue}
"New password:" {send "123456\r";exp_continue}
"Re-enter new password:" {send "123456\r";exp_continue}
"Remove anonymous users? \\[Y/n]" {send "y\r";exp_continue}
"Disallow root login remotely? \\[Y/n]" {send "y\r";exp_continue}
"Remove test database and access to it? \\[Y/n]" {send "y\r";exp_continue}
"Reload privilege tables now? \\[Y/n]" {send "y\r";exp_continue}
}
Ten sam błąd:
invalid command name "Y/n"
while executing
"Y/n"
invoked from within
"expect {
"Enter current password for root (enter for none): " {send "\r";exp_continue}
"Set root password? \\[Y/n] " {send "y\r";exp_conti..."
(file "secure.exp" line 3)
Jak naprawić mój skrypt exp?
[ ... ]
jest podstawieniem polecenia, które jest jak powłoka$( ... )
. Więc"Set root password? [Y/n] "
powinno być zapisane jako"Set root password? \\[Y/n] "
.Odpowiedzi:
Skrypty te czekają na opcjonalne wyjście (
timeout -1
oznacza „brak limitu czasu”) i potrafią rozróżniać różne odpowiedzi, zgodnie z wymaganiamiyum install
imysql_secure_installation
. Za pomocą#!/bin/expect -f
shebang skrypty można wykonywać, gdy są ustawione nachmod +x
.A) Na początek
mariadb_yum.exp
(wymagasu
lubsudo
):B) A następnie
mariadb_sec.exp
(nie wymagasudo
):W celu debugowania - lub w celu potwierdzenia odpowiedzi, można uruchomić na
expect
poziomie dziennikastrace 4
. Jest to prawdopodobnie tak renomowane, jak źródło, jeśli chodzi o pisanieexpect
skryptów, ponieważ ładnie pokazuje, co się dzieje i, co najważniejsze, w jakiej kolejności rzeczy się dzieją:set exp_internal 1
Można użyć instrukcji, aby uzyskać dane wyjściowe dla dopasowania wyrażenia regularnego.Możliwym źródłem nieporozumień może być odradzanie procesów - ponieważ można spawnować kilka procesów na różnych hostach, np.
ssh
lokalnie, a następnieyum
imysql_secure_installation
zdalnie. Dodano$spawn_id
do skryptu; dolneclose
wywołanie może być zbędne, ponieważ jest jużEOF
(tylko w celu pokazania, jakspawn
i jakclose
przetwarzać):Wniosek:
mariadb_sec.exp
skrypt można prawdopodobnie ulepszyć, np. gdy najpierw nie wysyłasz hasła i nie widzisz, co się dzieje - a następnie wysyłasz hasłoERROR 1045
(jeśli hasło zostało już ustawione wcześniej). Można zapisać, aby założyć, że hasło należy ustawić dopiero po zainstalowaniu serwera (z wyjątkiem tego, żeyum reinstall
daje ten sam wynik). Po prostu nie miałem pustego kontenera CentOS do przetestowania wszystkich przypadków. Chyba że działa wroot
powłoce, przekazanie obu rodzajów haseł do jednego skryptu byłoby wymagane do zautomatyzowania tego od instalacji do późniejszej instalacji.Prawdopodobnie warto zauważyć, że na GCE
sudo
nie pytałby o hasło; istnieją niewielkie różnice w zależności od środowiska, ponieważ te obrazy kontenerów CentOS zachowują się inaczej. W takim przypadku (ponieważ nie masu
wykrycia lub wykrycia obrazu kontenera)mariadb_yum.exp
skrypt może utknąć na30
kilka sekund, a następnie kontynuować.Najbardziej renomowanymi źródłami, jakie mogę zaoferować, są
expect
podręcznik napisany przez Don Libes @ NIST i podręcznik TCL / TK dlaexpect
, a także jego projekt SourceForge, zwany przypadkowoexpect
.źródło
Nawiasy kwadratowe służą nie tylko do zastępowania poleceń, ale są również specjalne dla wzorców globu .
Możesz użyć
-exact
przełącznika, unikając nawiasów kwadratowych w cudzysłowie:Lub użyj nawiasów klamrowych zamiast cudzysłowów:
Do Twojej wiadomości możesz wygenerować oczekiwany skrypt za pomocą
autoexpect
:Spowoduje to wygenerowanie skryptu expect wywołanego
script.exp
w bieżącym katalogu roboczym.źródło