[LinuxFocus-icon]
Strona G��wna  |  Mapa Serwisu  |  Indeks  |  Szukaj

Nowo�ci | Archiwum | Linki | O Nas
Ten dokument jest dost�pny w nast�puj�cych j�zykach: English  Castellano  Deutsch  Francais  Italiano  Nederlands  Russian  Turkce  Polish  

[Photo of the Author]
Erdal Mutlu
<erdal(at)linuxfocus.org>

O Autorze:

Erdal jest jednym z tureckich redaktor�w LF. Obecnie pracuje jako administrator systemu w Linotype Library. Od czas�w akademickich jest wielkim fanem Linuksa i aktywnie rozwija ten system.



Translated to Polish by:
Rados�aw Weso�owski <wesolek(at)box43.gnet.pl>

Zawarto��:

 

Wykorzystanie ssh i scp do automatyzacji prac administracyjnych�

[Illustration]

Notka:

Cz�sto zdarza si� tak, �e administrujesz du�� liczb� system�w z rodziny Linux/Unix, zazwyczaj s� one podobnie skonfigurowane. Na pewno zauwa�y�e�, �e podczas codziennej pracy wykonujesz sporo podobnych czynno�ci na ka�dym z tych system�w. Z ca�� pewno�ci� przyda Ci si� kilka przedstawionych poni�ej skrypt�w automatyzuj�cych twoj� prac�. W moich przyk�adach wykorzystam narz�dzia, kt�re wchodz� w sk�ad pakietu ssh.

_________________ _________________ _________________

 

Wprowadzenie

Ide� tego artyku�u jest znalezienie �atwego sposobu na skopiowanie plik�w z komputera, na kt�rym pracujemy, na inne serwery lub maszyny w sieci, a nast�pnie wykonanie kilku polece� na tych�e systemach na przyk�ad: zainstalowanie pakietu rpm, lub zmiana niekt�rych opcji systemowych. Czasami zdarza si� tak, �e najpierw wykonujemy jakie� polecenia, a nast�pnie pobieramy pliki, kt�re mog� powsta� w wyniku wcze�niej przeprowadzonych operacji.

Do zrozumienia tego artyku�u niezb�dna jest podstawowa wiedza z zakresu programowania w pow�oce systemowej, oraz znajomo�� narz�dzi takich jak: ssh-keygen, ssh-add, ssh, scp, sftp. Darmowa implementacja protoko�u SSH w Linuksie zawieraj�ca wy�ej wymienione narz�dzia tworzy pakiet o nazwie OpenSSH, natomiast zagadnienie programowaniaw pow�oce w systemowej Linuksa zosta�o przedstawione na stronach LF w artykule Shell Programming . Autorami artyku�u s�: Katja i Guido Socher. Oczywi�cie zalecam tak�e przeczytanie odpowiednich stron man.
 

Dlaczego ssh?

Odpowied� jest r�wnie� pytaniem: A dlaczego nie? Jednak u�ywaj�c narz�dzi takich, jak rsh-rcp, czy telnet-ftp nara�amy si� na mo�liwo�� pods�uchu, a jak wiadomo nie jest to trudne w Intranecie, oraz Internecie. Ssh umo�liwia nam bezpieczn�, szyfrowan� transmisj� pomi�dzy hostami w niepewnej sieci. W tym artykule nie zamierzam omawia� korzy�ci wynikaj�cych z u�ywania ssh. Je�eli interesuj� Ci� ten temat to warto przeczyta� artyku� Through the tunnel, kt�rego autorem jest Georges Tarbouriech.  

Kopiowanie plik�w i katalog�w za pomoc� scp

Kopiowanie pliku z naszego lokalnego katalogu na inny system sprowadza si� do wydania nast�puj�cego polecenia:

scp /path/to/the/file/file1 user@remote_host:/remotedir/newfile

W tym przyk�adzie plik o nazwie file1 zostanie skopiowany z lokalnego komputera na komputer o adresie 'remote_host' ( zamiast nazwy mo�esz u�y� adresu IP ) do katalogu '/remoredir'. Plik b�dzie dost�pny pod nazw� 'newfile'. Zostaniesz poproszony o podanie has�a dla u�ytkownika 'user'. Je�eli autentykacja powiedzie si� i zgadzaj� si� prawa dost�pu, plik zostanie skopiowany. Mo�na pomin�� nazw� pliku na docelowej maszynie i wtedy nie zostanie ona zmieniona, mechanizm ten daje ci to mo�liwo�� zmiany nazwy pliku podczas kopiowania. Proces mo�e odbywa� si� tak�e w drug� stron�:

scp user@remote_host:/remotedir/file /path/to/local/folder/newfile

Kolejn� cech� programu scp jest mo�liwo�� kopiowania ca�ych katalog�w. Parametr '-r' okre�laj�cy rekursywne kopiowanie s�u�y w�a�nie do tego celu.

scp -r user@remote_host:/remotedir .

Wydanie powy�szego polecenia spowoduje skopiowanie zawarto�ci katalogu 'remotedir' z hosta 'remote_host' do twojego katalogu domowego,� nazwy pozostan� niezmienione.

Notka:�operacja powiedzie si� tylko wtedy, gdy na 'remote_host' uruchomiony jest demon sshd.  

ssh - zdalne logowanie�

Zamiast u�ywania telnetu lub us�ugi rlogin warto skorzysta� z bezpieczniejszej mo�liwo�ci zdalnego logowania. Z pomoc� przyjdzie ssh:

ssh [email protected]

W zale�no�ci od twojej konfiguracji mo�esz zosta� poproszony o podanie has�a lub has�a-frazy. W powy�szym przyk�adzie ��czymy si� z komputerem 'helvetica.fonts.de' na konto u�ytkownika o nazwie 'erdal'. ssh posiada mn�stwo dodatkowych opcji, kt�re mog� by� wykorzystane w zale�no�ci od potrzeb. Aby dowiedzie� si� wi�cej zapoznaj si� z dokumentacja dost�pn� w twoim systemie (man ssh).  

Wykonywanie polece� u�ywaj�c ssh

ssh umo�liwia wykonywanie r�nych polece� na zdalnej maszynie np.:

ssh [email protected] df -H

Sk�adnia polecenia jest podobna do logowania, z tym, �e po nazwie hosta wyst�puje polecenie, kt�re ma zosta� wykonane ( w naszym przypadku 'df -H' ). Dane wyj�ciowe pojawi� si� na twoim terminalu.  

Po��czenie bez wpisywania has�a

ssh zapewnia wygodny spos�b logowania. Zamiast uwierzytelniania przy pomocy has�a mo�na korzysta� weryfikacji, kt�ra polega na u�yciu pary kluczy (publicznego/prywatnego), jednak zanim rozpoczniesz korzystanie z kluczy, musisz je najpierw wygenerowa�. Narz�dziem, kt�re do tego celu s�u�y jest ssh-keygen. Oto przyk�ad u�ycia:

ssh-keygen -b 1024 -t dsa

Na pocz�tku zostaniesz zapytany o nazw� klucza prywatnego, natomiast nazwa klucza publicznego zwykle jest taka sama jak prywatnego, ale z ko�c�wk� '.pub'. Parametr '-b 1024' okre�la liczb� bit�w u�ytych do wygenerowania klucza. Je�eli zostawisz to miejsce puste, program u�yje standartowej warto�ci. Typ klucza zosta� okre�lony przy pomocy parametru '-t dsa', jednak istniej� inne warto�ci, kt�re mog� zosta� u�yte np. 'rsa1' dla protoko�u w wersji pierwszej, lub 'rsa' i 'dsa' dla protoko�u w wersji drugiej. Zalecam stosowanie drugiej wersji protoko�u SSH, jednak, je�li trafisz na stary serwer wspieraj�cy jedynie pierwsz� wersj� musisz stworzy� klucze u�ywaj�c '-t rsa1'. W sytuacji, kiedy� zaistnieje taka konieczno�ci mo�esz wymusi� u�ywanie wersji 1 lub 2 protoko�u odpowiednio przez parametr '-1', lub '-2'.

Przed rozpocz�ciem u�ywania kluczy, musisz zainstalowa� klucz publiczny na zdalnej maszynie. Powinien on by� przekopiowany lub dodany w nast�puj�ce miejsce: $HOME/.ssh/authorized_keys lub $HOME/.ssh/authorized_keys2. B�d� uwa�ny i nie pomyl wersji protoko�u, 'authorized_keys' to plik u�ywany przez protok� wersji 1, natomiast 'authorized_keys2' dotyczy wersji 2 protoko�u. Je�eli wszystko zrobi�e� dobrze, to przy nast�pnym po��czeniu z tym komputerem zostaniesz poproszony o has�o-fraz�, je�eli si� pomylisz musisz poda� w�a�ciwe has�o u�ytkownika. Mo�esz uwa�asz za s�uszne ograniczenie po��cze� z twoim systemem, do tych, kt�re wykorzystuj� uwierzytelnianie przy pomocy kluczy, nale�y edytowa� plik konfiguracyjny demona sshd (/etc/ssh/sshd_config). Parametr, kt�ry nas interesuje, to 'PasswordAuthentication', zmie� jego warto�� na 'no' (PasswordAuthentication no), a nast�pnie uruchom ponownie demona sshd.

W tym miejscu mo�emy ju� zestawi� bezpieczne po��czenie pomi�dzy komputerami, kopiowa� pliki i wykonywa� polecenia, ale, �eby wykonywa� niekt�re prace automatycznie nale�y wyeliminowa� wpisywanie has�a, lub has�a-frazy. Rozwi�zaniem mo�e by� pisanie w ka�dym skrypcie wymaganego has�a, co zreszt� nie jest dobrym pomys�em. Lepszym rozwi�zaniem, jest u�ycie agenta kluczy, kt�ry zajmie si� tym zadaniem. 'ssh-agent' jest programem, przechowuj�cym prywatne klucze u�ywane do weryfikacji. Aby rozpocz�� korzystanie z niego wykonaj polecenie:

ssh-agent $BASH

a nast�pnie dodaj sw�j prywatny klucz�

ssh-add .ssh/id_dsa

lub

ssh-add .ssh/identity

'id_dsa' odnosi si� do klucza prywatnego typu DSA, natomiast 'identity' ma zastosowanie w przypadku, gdy klucz jest typu RSA1. S� to standardowe nazwy plik�w utworzone podczas generowania przy u�yciu 'ssh-keygen'. Oczywi�cie przed dodaniem twojego klucza zostaniesz poproszony o has�o-fraz�. Mo�esz tak�e zobaczy� wcze�niej dodane klucze:

ssh-add -l

W tym momencie, kiedy spr�bujesz po��czy� si� z serwerem, kt�ry ma tw�j klucz publiczny, po��czenie zostanie zestawione bez twojego udzia�u - 'ssh-agent' zajmie si� procesem autoryzacji.

Kiedy u�ywasz programu 'ssh-agent', tak jak jest to opisane powy�ej, mo�esz z niego korzysta� jedynie na termintalu, z kt�rego wystartowa�e� ssh-agenta. Aby temu zaradzi� czeka Ci� jeszcze troch� pracy, �eby u�atwi� Ci to zadanie stworzy�em prosty skrypt startuj�cy agenta:

#!/bin/sh
#
# Erdal mutlu
#
# Starting an ssh-agent for batch jobs usage.

agent_info_file=~/.ssh/agent_info

if [ -f $agent_info_file ]; then
echo "Agent info file : $agent_info_file exists."
echo "make sure that no ssh-agent is running and then delete this file."
exit 1
fi

ssh-agent | head -2 > $agent_info_file
chmod 600 $agent_info_file
exit 0

Powy�szy skrypt sprawdza istnienie pliku 'agent_info', kt�ry powinien znajdowa� si� w podkatalogu .ssh/ u ka�dego u�ytkownika wykorzystuj�cego ssh. Je�eli plik istnieje u�ytkownik jest ostrzegany i wy�wietlana jest ma�a podpowied�. W przypadku, gdy program 'ssh-agent' nie by� wcze�niej uruchomiony nale�y usun�� ten plik i ponownie uruchomi� skrypt. Zadaniem tego prostego narz�dzia jest uruchomienie ssh-agenta i przechwycenie dw�ch pierwszych linijek, a nast�pnie skopiowanie ich do pliku 'agent_info'. Informacje z tego pliku zostan� p�niej wykorzystane. Kolejnym krokiem jest zmiana uprawnie�, na takie, kt�re pozwol� jedynie w�a�cicielowi pliku na czytanie i zapis.

Kiedy agent jest gotowy do pracy mo�esz dodawa� do niego klucze, lecz najpierw musisz wykona� polecenie, kt�re pomo�e narz�dziom ssh znale�� agenta:

source ~/.ssh/agent_info or . ~/.ssh/agent_info

W celu usprawnienia mo�esz dopisa� kilka poni�szych linijek do swojego pliku .bashrc:

if [ -f .ssh/agent_info ]; then
. .ssh/agent_info
fi

Ostrze�enie: Warto dobrze zabezpieczy� tw�j komputer, gdy� w przeciwnym wypadku w�amywacz uzyskuj�c dost�p do twojego konta bez problemu b�dzie m�g� logowa� si� na inne serwery. Wszystko ma swoj� cen�!�

 

Skrypt

Nadszed� wreszcie czas na wyja�nienia, jak zautomatyzowa� niekt�re prace administracyjne. Idea jest prosta - wykonanie okre�lonych polece� na podanej li�cie host�w, a nast�pnie skopiowanie kilku plik�w, czyli rutynowe czynno�ci. Oto skrypt:

#!/bin/sh

# Installing anything using Secure SHELL and SSH agent
# Erdal MUTLU
# 11.03.2001


##################################################################
# Functions #
##################################################################
### Copy files between hosts
copy_files()
{
if [ $files_file != "files_empty.txt" ];then
cat $files_file | grep -v "#" | while read -r line
do
direction=`echo ${line} | cut -d " " -f 1`
file1=`echo ${line} | cut -d " " -f 2`
file2=`echo ${line} | cut -d " " -f 3`

case ${direction} in
"l2r") : ### From localhost to remote host
echo "$file1 --> ${host}:${file2}"
scp $file1 root@${host}:${file2}
;;
"r2l") : ### From remote host to localhost
echo "${host}:${file2} --> localhost:${file2}"
scp root@${host}:${file1} ${file2}
;;
*)
echo "Unknown direction of copy : ${direction}"
echo "Must be either local or remote."
;;
esac
done
fi
}

### Execute commands on remote hosts
execute_commands()
{
if [ $commands_file != "commands_empty.txt" ];then
cat $commands_file | grep -v "#" | while read -r line
do
command_str="${line}"
echo "Executing $command_str ..."
ssh -x -a root@${host} ${command_str} &
wait $!
echo "Execute $command_str OK."
done
fi
}

### Wrapper function to execute_commands and copy_files functions
doit()
{
cat $host_file | grep -v "#" | while read -r host
do
echo "host=$host processing..."
case "${mode}" in
"1")
copy_files
execute_commands
;;
"2")
execute_commands
copy_files
;;
*)
echo "$0 : Unknown mode : ${mode}"
;;
esac
echo "host=$host ok."
echo "------------------------------------------------------------------"
done
}

##################################################################
### Program starts here
##################################################################

if [ $# -ne 4 ]; then
echo "Usage : $0 mode host_file files_file commands_file"
echo ""
echo "mode is 1 or 2 "
echo " 1 : first copy files and then execute commands."
echo " 2 : first execute commands and then copy files."
echo "If the name of files.txt is files_empty.txt then it is not processed."
echo "If the name of commands.txt is commands_empty.txt then it is
echo "not processed."
exit
fi


mode=$1
host_file=$2
files_file=$3
commands_file=$4

agent_info_file=~/.ssh/agent_info
if [ -f $agent_info_file ]; then
. $agent_info_file
fi

if [ ! -f $host_file ]; then
echo "Hosts file : $host_file does not exist!"
exit 1
fi

if [ $files_file != "files_empty.txt" -a ! -f $files_file ]; then
echo "Files file : $files_file does not exist!"
exit 1
fi

if [ $commands_file != "commands_empty.txt" -a ! -f $commands_file ]; then
echo "Commands file : $commands_file does not exist!"
exit 1
fi

#### Do everything there
doit

Zapiszmy plik jako ainstal.sh (automatyczna instalacja). Uruchamiaj�c program bez �adnych parametr�w otrzymamy wiadomo��:

./ainstall.sh

Usage : ./ainstall.sh mode host_file files_file commands_file

mode is 1 or 2
1 : first copy files and then execute commands.
2 : first execute commands and then copy files.
If the name of files.txt is files_empty.txt then it is not processed.
If the name of commands.txt is commands_empty.txt then it is not
processed.

Zgodnie z wiadomo�ci�, je�eli nie chcesz wykona� �adnej komendy, wtedy jako argumentu dla 'commands_file' u�yj 'commands_empty.txt', natomiast, je�eli nie masz zamiaru kopiowa� plik�w u�yj warto�ci 'files_empty.txt' dla opcji 'files_file'. Nie zawsze przecie� jednocze�nie kopiujesz lub wykonujesz jakie� polecenia.

Zanim zaczn� wyja�nia� skrypt linijka po linijce, zaprezentuj� przyk�ad u�ycia: przypu��my, �e uruchomi�e� zapasowy serwer DNS i chcesz go doda� do pliku '/etc/resolv.conf'. Dla u�atwienia przypu��my r�wnie�, �e wszystkie maszyny maj� taki sam plik 'resolv.conf', jedyn� rzecz� do zrobienia, jest skopiowanie nowego pliku na wszystkie inne komputery.

Na pocz�tek potrzebna Ci b�dzie lista wszystkich host�w, zapiszemy je w pliku 'hosts.txt'. Format pliku jest nast�puj�cy - ka�da linijka zawiera tylko jeden wpis (nazw� lub adres IP). Pryzk�ad:

##########################################################################
#### Ka�da linia zawiera jedn� nazw� lub adres IP komputera. Linie, kt�re
#### rozpoczynaj� si� od znaku # s� ignorowane.
##########################################################################
helvetica.fonts.de
optima.fonts.de
zaphino
vectora
#10.10.10.162
10.10.10.106
193.103.125.43
10.53.103.120

Jak wida� mo�na poda� pe�n� nazw�, lub tylko jej cz�� odpowiadaj�ca nazwie hosta. Nast�pnie konieczne jest stworzenie pliku, w kt�rym znajd� si� nazwy plik�w przeznaczone do kopiowania. Istniej� dwie mo�liwo�ci kopiowania:

Stworzymy list� plik�w przeznaczonych do kopiowania i zapiszmy j� jako np. 'files_file.txt'. Ka�da linia w tym pliku zawiera informacje, kt�re zostan� u�yte do kopiowania pliku. Istniej� dwa kierunki kopiowania: l2r (local to remote) i r2l (remote to local). l2r zostanie zastosowany, kiedy plik ma zosta� umieszczony na zdalnej maszynie, natomiast r2l w przeciwnym przypadku. Kiedy ju� okre�limy kierunek nale�y poda� dwie nazwy plik�w, oddzielone spacj� lub znakiem tabulacji. Pierwszy plik jest kopiowany do lokalizacji znajduj�cej si� pod drug� nazw�, z uwzgl�dnieniem kierunku. Nazw� pliku dla zdalnego systemu nale�y poda� w formie bezwzgl�dnej, w przeciwnym wypadku plik trafi do katalogu domowego roota. Oto przyk�ad:

############################################################################
# Struktura pliku:
# - Znaczenie wpis�w: l2r (localhost to remote) and r2l
# (remote computer to local).
# r2l file1 file2
# znaczy skopiuj file1 z hosta zdalnego (hosty znajduj� si�
# w pliku hosts.txt file) na lokalny komputer jako file2.
# l2r file1 file2
# znaczy skopiuj file1 z lokalnej maszyny na zdalny komputer
# (hosty znajduj� si� w pliku hosts.txt) jako file2
#
# Notka: ca�y proces jest zale�ny od dyrektywy
# okre�laj�cej kierunek.
############################################################################
l2r resolv.conf /etc/resolv.conf

Tak jak widzisz do��czy�em do pliku wyja�nienie struktury. Jest to prosty, lecz skuteczny spos�b na wyja�niaj�cy zawarto��. W naszym przyk�adzie mamy zamiar skopiowa� plik resolv.conf na zdaln� maszyn� pod nazw� '/etc/resolv.conf'. Dla demonstracji zasady dzia�ania skryptu po skopiowaniu zostan� zmienione prawa dost�pu do pliku, a nast�pnie zostanie wy�wietlona jego zawarto��. Polecenia do wykonania umieszczone s� w oddzielnym pliku, nazwijmy go 'commands_file.txt'. Zawarto��:

###########################################################################
# Struktura pliku jest nast�puj�ca: ka�da linia zawiera polecenie do
# wykonania. Polecenia wykonywane s� po kolei.
###########################################################################
chown root.root /etc/resolv.conf
chmod 644 /etc/resolv.conf
cat /etc/resolv.conf

Komendy zawarte w pliku 'command_file.txt' zostan� wykonane na ka�dym ho�cie, kt�rego adres znajduje si� w pliku 'hosts.txt'. Wykonywane s� jedna po drugiej w kolejno�ci wyst�pienia w spisie.

Dobrze, a wi�c mamy wszystkie potrzebne pliki. Pozosta�o nam tylko jeszcze okre�li� tryb, w jakim uruchomimy skrypt, to znaczy, kt�ry z dw�ch plik�w 'commands_file.txt' czy 'files_file.txt' zostanie wykonany pierwszy. Je�eli najpierw chcesz skopiowa� pliki, a nast�pnie wykona� polecenia wybierz tryb 1, w przeciwnym wypadku skorzystaj z drugiego. Mo�emy teraz wykona� nasz skrypt podaj�c odpowiednie opcje:

./ainstall.sh 1 hosts.txt files_file.txt commands_file.txt

Wskaz�wka: Aby u�atwi� sobie prac� warto zmieni� nazw� pliku na tak�, kt�ra jednoznacznie okre�li zawarto��, w naszym przypadku dobrym pomys�em mo�e by� 'files_resolvconf.txt', tak� sam� metod� stosuj� do plik�w hosts.txt, oraz commands.txt.

Nadszed� wreszcie czas, na wyja�nienie skryptu. Program rozpoczyna dzia�anie, od sprawdzenia liczby argument�w, je�eli liczba ta jest r�na od czterech zostanie wy�wietlona pomoc, kiedy wszystko jest w porz�dku poszczeg�lne argumenty przypisywane s� odpowiednim zmiennym. Po sprawdzeniu istnienie pliku '~/.ssh/agent_info' jest on odczytywany. Plik ten zawiera informacj� na temat dzia�ania programu 'ssh-agent'. Je�eli nie korzystasz z agenta, b�dziesz zmuszony wprowadzi� wszystkie has�a r�cznie, co oznacz, �e nie uzyskasz automatyzacji :). Nast�pnie skrypt sprawdza istnienie plik�w zawieraj�cych: adresy host�w, komendy i pliki. Istnieje r�wnie� specjalny test, sprawdzaj�cy wyst�pienie jednej z nazw: 'files_empty.txt' lub 'commands_empty.txt'. Kiedy jako argument podasz jedn� z tych nazw nie ma potrzeby sprawdzania istnienia takiego pliku. Dokona�em drobnej zmiany w kodzie skryptu podczas pisania tego artyku�u, przedtem wygl�da�o to tak:

if [ -f $host_file -a -f $files_file -a -f $commands_file ]; then
echo "$host_file $files_file $commands_file"
doit
else
echo "$host_file or $files_file or $commands_file does not exist"
exit
fi

U�ywaj�c powy�szej wersji konieczne by�o stworzenie plik�w o nazwach: 'files_empty.txt' oraz 'commands_empty.txt', chocia� nie stanowi�o to problemu, poniewa� pracowa�em ca�y czas w tym samym katalogu, postanowi�em to zmieni�. Na ko�cu wywo�uj� funkcj� 'doit', kt�ra rozpoczyna w�a�ciwe dzia�anie skryptu. Funkcja ta przy pomocy p�tli dla ka�dego hosta znajduj�cego si� w '$hosts_file' wywo�uje funkcje 'copy_files' oraz 'execute_commands' w kolejno�ci zale�nej od trybu. Zmienna '$host' zawiera aktualny adres IP lub nazw� komputera. Przyjrzyjmy si� teraz bli�ej funkcji 'copy_files'. W pierwszej kolejno�ci sprawdzana jest warto�� zmiennej 'files_file'. Je�eli zawiera ona 'files_empty.txt', �adna akcja nie zostanie podj�ta, w przeciwnym wypadku ka�da linia zmiennej '$files_file', jest sprawdzana, pobierane s� nast�puj�ce dane 'direction', 'file1' i 'file2' zawieraj�ce kierunek kopiowania, pierwsz� i drug� nazw� pliku. Zgodnie z przyj�tym kierunkiem dane s� kopiowane przy u�yciu programu 'scp'. Sprawd�my jeszcze, co dzieje si� w funkcji 'execute_commands'. Tak samo, jak w poprzedniej funkcji sprawdzane jest istnienie odpowiedniego pliku. Je�eli zmienna ma warto�� 'commands_empty.txt' �adne polecenie nie zostanie wykonane. Kiedy plik istnieje i nie jest pusty wszystkie zawarte w nim polecenia zostan� wykonane jako zadania dzia�aj�ce w tle. Nast�pnie wywo�ana jest komenda 'wait' z parametrem '$!', kt�ra daje nam pewno��, �e kolejne polecenie zostanie wykonane dopiero wtedy, gdy zako�czy si� poprzednie. '$!' reprezentuje ID ostatniego procesu uruchomionego w tle. Proste prawda?������

 

Tworzenie kopii zapasowych

Przedstawi� teraz troch� bardziej zaawansowany przyk�ad u�ycia skryptu. Zostanie on wykorzystany do stworzenia kopii zapasowej plik�w konfiguracyjnych poszczeg�lnych serwer�w. Do tego celu napisa�em ma�y skrypt wykorzystuj�cy ainstall.sh:

#!/bin/sh

server_dir=${HOME}/erdal/sh/ServerBackups

if [ ! -d $server_dir ]; then
echo "Directory : $server_dir does not exists."
exit 1
fi

cd $server_dir

servers=ll_servers.txt
prog=${HOME}/erdal/sh/einstall_sa.sh

cat $servers | grep -v "#" | while read -r host
do
echo $host > host.txt
$prog 1 host.txt files_empty.txt
servers/${host}/commands_make_backup.txt
$prog 1 host.txt files_getbackup.txt commands_empty.txt
mv -f backup.tgz servers/${host}/backup/`date +%Y%m%d`.tgz
rm -f host.txt
done

exit 0

Nale�y za�o�y� specjalny katalog nazwany 'servers', a w tym katalogu musz� znale�� si� dwa pliki: 'files_getbackup.txt' i 'll_servers.txt'. Oto zawarto�� pliku 'files_getbackup.txt':

r2l /root/backup.tgz backup.tgz

'll_servers.txt' zawiera adresy host�w, kt�re maj� by� poddane archiwizacji. Ka�dy host musi posiada� katalog o takiej samej nazwie, a w tym katalogu musi znajdowa� si� plik 'commands_make_backups.txt' zawieraj�cy polecenie tworz�ce archiwum /root/backup.tgz. Oraz katalog nazwany 'backup'. Wszystkie kopie zapasowe b�d� przechowywane w tym katalogu. Je�eli zawarto�� pliku 'll_servers.txt' jest nast�puj�ca:

fileserver
dbserver
10.10.10.1
appserver

wtedy struktura twojego katalogu '$servers' wygl�da jak poni�ej:

servers
|-- files_getbackup.txt
|-- ll_servers.txt
|-- make_server_backups.sh
|-- 10.10.10.1
| |-- backup
| `-- commands_make_backup.txt
|-- appserver
| |-- backup
| `-- commands_make_backup.txt
|-- dbserver
| |-- backup
| `-- commands_make_backup.txt
|-- fileserver
|-- backup
`-- commands_make_backup.txt

A oto zawarto�ci przyk�adowych plik�w 'commands_make_backups.txt' :

tar cfz /root/backup.tgz /etc/samba /etc/atalk /etc/named.conf /var/named/zones

Powy�sza polecenie tworzy kopi� plik�w /etc/samba, /etc/atalk, /etc/named.conf i� /var/named/zones.

tar cfz /root/backup.tgz /etc/httpd /usr/local/apache

Kopia zapasowa plik�w serwera apache.

tar cfz /root/backup.tgz /etc/squid /etc/named.conf

Przy pomocy tego polecenia zarchiwizujesz konfiguracj� proxy serwera squid, oraz konfiguracj� serwera dns.

Stosuj�c odpowiednie wpisy proces archiwizacji mo�esz odpowiednio dostosowa� do w�asnych potrzeb.

 

Zako�czenie

Skrypt ainstall.sh pozwala na zautomatyzowanie niekt�rych prac administracyjnych, bazuje on na prostym, lecz skutecznym wykorzystaniu pakietu ssh. Na pewno docenisz powy�szy program, je�eli zarz�dzasz spor� liczb� takich samych system�w.
 

Warto przeczyta�


 

Dyskusja dotycz�ca tego artyku�u

Komentarze do dyskusji:
 Strona talkback 

Strona prowadzona przez redakcj� LinuxFocus
© Erdal Mutlu, FDL
LinuxFocus.org
t�umaczenie:
en --> -- : Erdal Mutlu <erdal(at)linuxfocus.org>
en --> pl: Rados�aw Weso�owski <wesolek(at)box43.gnet.pl>

2003-01-17, generated by lfparser version 2.33