[LinuxFocus-icon]
Ev  |  Eri�imd�zeni  |  ��indekiler  |  Arama

Duyumlar | Belgelikler | Ba�lant�lar | LF Nedir
Bu makalenin farkl� dillerde bulundu�u adresler: English  Castellano  Deutsch  Francais  Italiano  Nederlands  Russian  Turkce  Polish  

convert to palmConvert to GutenPalm
or to PalmDoc

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

Yazar hakk�nda:

Erdal, LF'nin T�rk edit�rlerinden birisidir. �u anda Sistem y�neticisi olarak Linotype Library'de �al��maktad�r. �niversite y�llar�ndan beri bir Linux hayran�d�r ve bu ortamda �al��maktan ve uygulama geli�tirmekten ho�lanmaktad�r.



T�rk�e'ye �eviri:
Erdal Mutlu <erdal(at)linuxfocus.org>

��erik:

 

Sistem y�netimini ssh ve scp ile otomatikle�tirmek

[Illustration]

�zet:

E�er, y�netmekte olan Linux/Unix bilgisayarlar�n�z�n say�s� �ok ise, baz� i�leri otomatik yapmak i�in kabuk programlar�na gereksiniminiz olacakt�r. G�nl�k �al��malar�n�z s�ras�nda yapt���n�z i�lemler her sistem i�in ayn� veya hemen hemen ayn� oldu�unu fark etmi�sinizdir. Belkide bu i�leri otomatik olarak yapman�n yollar�n� da d���nm��s�n�zd�r. Bu durum �zellikle benzer �ekilde yap�land�r�lm�� �ok say�daki Linux/UNIX sistemleriniz varsa ge�erlidir. Bu yaz�da bunu yapmak i�in ssh ara�lar�n� kullanan bir y�ntemi size tan�taca��m.

 

Giri�

Asl�nda yap�lmas� gereken, kulland���m bilgisayardan belirleyece�im dosyalar� baz� sunuculara veya i� istasyonlar�na kopyalamak ve daha sonra da onlara ba�lan�p rpm ile program y�kleme gibi baz� sistem ayarlar�n� de�i�tirici komutlar �al��t�rmakt�r. Bazen �ncelikle �e�itli komutlar �al��t�r�p daha sonra da bir tak�m dosyalar�, ki bunlar �al��t�rd���m�z komutlar�n sonucu olu�mu� dosyalar da olabilir, kendi bilgisayar�m�za kopyalamak isteyebiliriz.

Bu yaz�y� takip edebilmek i�in kabuk programlama ile ilgili temel bilgiye sahip olman�z gerekmektedir. Kabuk programlama ile ilgili daha fazla bilgi LF'nin Katja ve Guido Socher taraf�ndan yaz�lm�� Kabuk programlama yaz�s�n� okuyabilirsiniz. Ayr�ca, ssh-keygen, ssh-add, scp, sftp gibi ssh ara�lar� hakk�nda da bilgi sahibi olman�z gerekmektedir. SSH protokol�n�n Linux i�in serbest yaz�l�m �er�evesinde geli�tirilmi� ara�lar�n� OpenSSH'dan bulubilirisniz. Ayr�ca, bunlar�n man sayfalar� da vard�r.

 

Neden ssh kullanal�m?

Sorunun cevab� iyine bir sorudur: Neden olmas�n? rsh-rcp veya telnet-ftp ikililerini de kullanmak m�mk�nd�r, ancak bunlar �nternet ve belkide i� a�lar gibi, kullan�lmas� g�venli olmayan ortamlar i�in uygun olmayabilirler. Ssh g�venli olmayan bir a�'da iki bilgisayar aras�nda kriptolanm�� bir ba�lant� sa�lamaktad�r. Bu ara�lar�n kullan�mdan do�abilecek g�venlik risklerini burada anlatmayaca��m. Bunun i�in Georges Tarbouriech'�n Tunel i�erisinden yaz�s�na bakabilirsiniz.
Asl�nda ge�mi�te ben telnet/ftp kullanan kabuk programlar� kullanm��t�m.  

Dosya ve dizinlerin scp ile kopyalanmas�

Yerel bilgisayardan ba�ka bir bilgisayara bir dosya kopyalamak i�in a�a��daki komutu kullanabilirsiniz:

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

Bu �rnekte yerel bilgisayardaki file1 dosyas� remote_host (Bu IP adresi de olabilir.) ad�ndaki bilgisayar�n /remotedir dizinine newfile yeni ismiyle kopyalanmaktad�r. E�er, 'user' olarak girdi�iniz ge�i�s�zc��� do�ru ve kopyalamak i�in gerekli haklara sahip iseniz, kopyalama i�lemi ger�ekle�tirilecektir. �sterseniz hedef dosya ismin vermeyebilirsiniz. Bu durumda dosya ayn� isimle kopyalanacakt�r. K�sacas�, kopyalama s�ras�nda dosya ad�n� de�i�tirmek m�mk�n olmaktad�r.
Kopyalama y�n�n� de�i�tirmek de m�mk�nd�r. Ba�ka bilgisayardaki bir dosyay� kendi bilgisayara da kopyalamak:

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

scp komutunun �ok kullan��l� bir �zelli�i daha var. Bir dizini t�m i�eri�i ile birlikte, yani t�m dosyalar� ve dizinleri ile birlikte kopyalamak i�in '-r' se�ene�i kullan�lmaktad�r.

scp -r user@remote_host:/remotedir .

Yukar�daki komut, remote_host adl� bilgisayarda bulunan remotedir dizini ve i�erdi�i t�m dosya ve dizinleri ile birlikte bulundu�umuz dizin alt�na ayn� adla kopyalamaktad�r. Not:Burada remote_host adl� bilgisayarda sshd servisinin �al��t��� varsay�lm��t�r.

 

ssh ile uzaktan eri�im

rlogin veya telnet yerine daha g�venli olan ssh kullan�labilir:

ssh [email protected]

Yap�land�rman�za g�re ge�i�s�zc��� veya ge�i�c�mlesi girmeniz gerekecektir. E�er, giridi�iniz bilgiler do�ru ise, helvetica.fonts.de bilgisayar�na erdal kullan�c�s� ile ba�lanm�� olacaks�n�z. ssh komutunun gereksinimlerinize g�re �e�itli se�enekleri vard�r. Bunun i�in ssh'n�n man sayfas�na bakabilirsiniz.  

ssh kullanarak komut �al��t�rmak

Uzaktaki bir bilgisayarda ssh kullanarak komut �al��t�rmak da m�mk�nd�r:

ssh [email protected] df -H

Komutun kullan�m� uaktaki bilgisayara eri�im ile �ok benze�mektedir. Tek fark, bilgisayara ad�ndan sonra �al��t�r�lacak komutun (�rne�imizde 'df -H') yaz�lmas�d�r. Komutun ��kt�s� yerel bilgisayarda g�r�nt�lenecektir  

Uzakataki bilgisayara ge�i�s�zc��� kullanmaks�z�n ba�lanmak

Ge�i�s�c��� kullanmak yerine genel/�zel (public/private) anahtar �ifti kullan�labilir. Bunun i�in �ncelikle anahtarlar�n�z� yaratman�z gerekmektedir. ssh-keygen program� ile anahtarlar�n�z� yartman�z m�mk�nd�r:

ssh-keygen -b 1024 -t dsa

Komutu �al��t�r�ld���nda �zel (private) anahtar� i�in dosya ad� girmeniz gerekecektir. Genel anahtar�n sakland��� dosya ad�n�, �zel anahtar dosya ad�na '.pub' eklenmesi ile olu�turulmaktad�r. '-b 1024' anahtarda yer alan bit say�s�d�r. E�er, b�yle bir de�er belirtmezseniz benimsenmi� de�er kullan�lacakt�r. '-t dsa' ile anahtar tipi belirlenmektedir. 1 s�r�m numaral� protokol i�in 'rsa1', 'rsa' veya 'dsa' ise 2 s�r�m nolu protokol i�in olan se�eneklerdir. Size tavsiyen SSH'n�n 2 s�r�ml� protokul�n� kullanman�zd�r. Ancak, sisteminizde �ok eski sunucular varsa, ki bunlar sadece 1 nolu protokol� destekliyorlard�r, o zaman '-t rsa1' se�ene�i ile bir anahtar �ifti yaratman�z gerekecektir. ssh program�n� kullan�rken 1 veya 2 s�r�m nolu protokol�n kullan�lmas�n� sa�laman�z m�mk�nd�r. Bunun i�in s�ras�yla '-1' veya '-2' se�eneklerini kullanman�z gerekecektir.

Anahtar�n�z� kullanabilmek i�in genel (public) olan�n� ba�lanaca��n�z bilgisayara y�klemeniz gerekecektir. Bunun i�in genel anahtar�n i�eri�i $HOME/.ssh/authorized_keys veya $HOME/.ssh/authorized_keys2 dosyas�na eklenmelidir. �ki protokol i�in olan anahtarlar�n�z� kar��t�rmamaya dikkat etmelisiniz. authorized_keys 1 s�r�m nolu SSH protokol�, authorized_keys2 ise 2 s�r�m nolu SSH protokol� i�in kullan�lamaktad�r. E�er, anahtarlar�n�z� d�zg�n bir �ekilde y�klediyseniz, o bilgisayara bir sonraki ba�lant�n�zda �ncelikle ge�i�c�mlesi girmeniz istenecektir. Yanl�� giri� yapman�z durumunda, ge�i�s�zc��� girmeniz istenebilir. sshd'nin /etc/ssh/sshd_config yap�land�rma dosyas�nda 'PasswordAuthentication no' de�i�ikli�ini yaparak o bilgisayara sadece anahtar kimliklendirilmesi kullan�larak giri� yap�lmas�n� sa�layabilirsiniz.

�u ana kadar her�ey tamamd�r. Ba�ka bir bilgisayarda uzaktan komut �al��t�rma ve oradan kendi bilgisayar�m�za veya kendi bilgisayar�m�zdan uzaktaki bilgisayara g�venli bir �ekilde dosya kopyalaman�n yollar�n� ��rendik. Ancak, i�leri otomatikle�tirmek i�in ge�i�s�zc��� veya ge�i�c�mlesi girmememiz gerekir. Yoksa, otomatikle�tirmeyi unutun. Bir ��z�m, herbir kabuk program� i�ine ge�i�s�zc���n� veya ge�i�c�mlesini yazmak olabilir. Daha iyi bir y�ntem ise, ssh-agent kullanmakt�r. ssh-agent, arka planda �al��an ve �zel anahtarlar� saklayarak sizin yerinize otomatik olarak kullanan bir ara�t�r. Program� a�a��daki gibi �al��t�rmak m�mk�nd�r:

ssh-agent $BASH

�zel anhtarlar�n�z� eklemek i�in

ssh-add .ssh/id_dsa

veya

ssh-add .ssh/identity

komutlar� kullan�labilir. id_dsa DSA tipli �zel anahtar, identity ise RSA1 tipli �zel anahtard�r. Bunlar, ssh-keygen program�n� kullan�rken benimsenmi� de�er olarak yarat�lan dosya isimleridir. ssh-add anahtarlar� ssh-agent'a eklemeden �nce ge�i�c�mlenizin girilmesini isteyecektir. Eklenmi� anahtarlarlar�n listesini a�a��daki komutla alabilirsiniz:

ssh-add -l

E�er, anahtar�n�z� y�kledi�iniz bilgisayara tekrar ba�lan�rsan�z, hi�bir�ey girmeden ba�lant� sa�lanm�� olur! ssh-agent kimliklendirme i�lemini yerine getirmi� olacakt�r.

ssh-agent'� yukar�daki gibi kulland���n�zda, sadece �al��t�rd���n�z konsoldan kullanman�z m�mk�nd�r. E�er, herhangi bir konsoldan kullanmak istiyorsan�z, biraz daha fazla i�lem yapman�z gerekecektir. ssh-agent'� �al��t�ran k���k bir kabuk program� yazd�m:

#!/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


Yukar�daki kabuk program�, kullan�c�n�n ev dizinini alt�nda ssh ile ilgili dosyalar�n�n bulundu�u dizin, ki genelde bu '.ssh/' d�r, i�indeki agent_info dosyas�n�n varl���n� denetlemektedir. E�er, bu dosya varsa, kullan�c� dosyan�n varl��� hakk�nda uyar�lmakta ve ne yap�labilece�i hakk�nda k�sa bir mesaj g�r�nt�lenmektedir. E�er, kullan�c� ssh-agent program�n� �al��t�rmad�ysa, agent_info dosyas�n� silinmesi ve kabuk program�n�n tekrar �al��t�r�lmas� gerekmektedir. Kabuk program� ssh-agent'� �al��t�r�p, onun ��kt�s�n�n ilk iki sat�r�n� agent_info dosyas�na kaydetmektedir. Bu bilgi ssh ara�lar� taraf�ndan daha sonralar� kullan�lacakt�r. En sonunda ise, dosyay� sadece kullan�c�n�n okuyup yazablmesine y�nelik dosya haklar� chmod komutuyla de�i�tirilmektedir.

ssh-agent �al��t�rd���n�z andan itibaren anahtarlar�n�z� eklemeniz m�mk�nd�r. Ancak, daha �ncesinde agent_info dosyas�ndaki bilgileri ssh ara�lar�n�n ula�abilecek duruma getirmeniz gerekmektedir. Bunun i�in a�a��daki komutlardan birini kullanabilirsiniz:

source ~/.ssh/agent_info veya . ~/.ssh/agent_info

�imdi ssh-add ile �zel anahtarlar�n�z� ekleyebilirsiniz. A�a��daki sat�rlar� .bashrc dosyas�na ekleyerek, her yeni konsol a�t���n�zda agent_info bilgilerine ula�m�� olacaks�n�z:

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

UYARI: ssh-agent ve otomatik y�kleme kabuk program�n� �al��t�raca��n�z bilgisayar�n g�venli�ini sa�lamak zorundas�n�z. Yoksa, sizin hesab�n�za ula�abilen herkes, anahtarlar�n�z ile ula�t���n�z t�m hesaplara ula�abilecektir. Her�eyin bir fiyat� var tabii!

 

Program

Sistem y�netcisinin baz� i�lerini nas�l otomatikle�tirece�imizi anlatman�n zaman� geldi art�k. Program�n sa�layaca�� �ey, belli say�daki komutu belli bilgisayarlarda �al��t�rmak ve o bilgisayarlara veya o bilgisayarlardan yerel bilgisayara dosyalar kopyalamakt�r. Bu da zaten sistem y�neticisinin s�k�a yapt��� i�lerdendir. Kabuk program�n�n ��kt�s� a�a��dad�r:

#!/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

Kabuk program�n� ainstal.sh (automated installation) ad� alt�nda kay�t edelim ve herhangi bir parametre vermeden �al��t�rmay� deneyelim. A�a��daki mesaj� elde ederiz:

./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.

E�er, komut �al��tr�mak istemeyiyorsan�z, commands_file parametresi yerine commands_empty.txt verebilirsiniz ve e�er, dosya aktarmak istemiyorsan�z files_file parametresi yerine de files_empty.txt ismini verebilirsiniz.

Program� sat�r sat�r a��klamaya ge�meden �nce bir �rnek �zerinde dural�m: Diyelim ki sisteminize ikinci bir DNS sunucu ekledi�inizde, bilgisayarlar�n /etc/resolv.conf dosyas�na bilgisayar�n IP numaras�n� eklemeniz gerekecektir. Kolayl�k olsun diye t�m bilgisayarlar�n�z�n ayn� resolv.conf dosyas�na sahip oldu�unu varsay�l�m. Dolay�s�yla, yapmam�z gereken tek �ey yeni bir resolv.conf dosyas�n� her bilgisayara kopyalamakt�r.
�lk �nce hangi bilgisayarlara kopyalama yapaca��n�z� bilmeniz gerekecektir. �lgili t�m bilgisayarlar� hosts.txt dosyas�na yazal�m. Bu dosyan�n bi�imi, her sat�ra bir bilgisayar ad� veya IP numaras� gelecek �ekilde bir listeden olu�maktad�r. ��te bir �rnek dosya:

##########################################################################
#### Every line contains one hostname or IP address of a host. Lines that
#### begin with or contain # character are ignored.
##########################################################################
helvetica.fonts.de
optima.fonts.de
zaphino
vectora
#10.10.10.162
10.10.10.106
193.103.125.43
10.53.103.120

�rnekten g�r�ld��� gibi tam bilgisayar ad� verebildi�imiz gibi, sadece bilgisayar ad� vermek, yani alan k�sm� olmadan, m�mk�nd�r. Daha sonra hengi dosyalar�n aktar�laca��n� belirten bir dosyaya gereksinim olacakt�r. �ki olas�l�k vard�r:

Aktraca��m�z dosyalar� files_file.txt ad�nda bir dosyaya yazal�m. Dosyan�n bi�imi �u �ekildedir: Her sat�r sadece bir dosyan�n aktar�m� bilgisini i�ermektedir. Bilgiler �� s�tun halindedir ve bir bo�luk veya tab karakteri ile ayr�lmaktad�r. l2r (local to remote) yerel bilgisayardan uzaktaki bilgisayara ve r2l (remote to local) uzaktaki bilgisayardan yerel bilgisayara olarak iki olas� dosya aktar�m yolu vard�r. Aktar�m y�n�n� belirten kelimeden sonra iki dosya ad� gelmektedir. �lk gelen dosya aktar�m y�n�ne g�re di�eri �zerine kopyalanmaktad�r. Uzaktaki bilgisayar i�in verilen dosya ad� yoltan�m� ile verilmelidir, yoksa kopyalama root kullan�c�s�n�n ev dizinine olacakt�r. ��te bizim files_file.txt :

############################################################################
# The structure of this file is :
# - The meaning of the fileds are : is l2r (localhost to remote) and r2l
# (remote computer to local).
#       r2l  file1   file2
#         means copy file1 from remote (hosts specified in the
#         hosts.txt file) computer to localhost as file2.
#       l2r     file1   file2
#         means copy file1 from localhost to
#         remote (hosts specified in the hosts.txt file) computer as file2
#         file1 and file2 are files on the corrsponding hosts.
#
#       Note: the order of using local and remote specifies the direction
#       of the copy process.
############################################################################
l2r     resolv.conf     /etc/resolv.conf

G�r�ld��� gibi dosyan�n ba��nda a��klama (�ngilizce olarak) yer almaktad�r. Bu a��klamay� genellikle her dosyan�n ba��na getiriyorum. Belgelendirme yapmak yerine b�yle bir ��z�m kullan�yorum. Bu basit ve g�zel bir ��z�md�r. �rne�imizde, resolv.conf dosyas�n� uzaktaki bilgisayarlar�n /etc dizine ayn� isimde kopyalayaca��z. G�stermek amac�yla, kopyalamadan sonra dosyan�n kullan�c� ve eri�im haklar�n� de�i�tiren komutlar ekledim. �al��t�r�lacak komutlar ayr� bir dosyaya yaz�lmaktad�r. Dosyan�n bi�imi her sat�r bir tek komut i�erecek �ekildedir. Komutlar�n yer ald��� dosyaya commands_file.txt ad�n� verelim:

###########################################################################
# The structure of this file is : Every line contains a command to be
#  executed. Every command is treated seperately.
###########################################################################
chown root.root /etc/resolv.conf
chmod 644 /etc/resolv.conf
cat /etc/resolv.conf

Komutlar s�rayla �al��t�rl�lmaktad�r ve biri bitmeden di�er komuta ge�ilmemektedir.

Evet, program� �al��t�rmak i�in gerekli olan her�eye sahibiz art�k. Belirtilmesi gerek tek �ey 'mode' se�ene�idir. Bu, dosya aktar�m�m� ard�ndan komutlar m� �al��t�r�ls�n, yoksa komutlar �al��t�r�ld�ktan sonra dosyalar m� aktar�ls�n se�eneklerini belirtmeye ayaramaktad�r. �lk �nce dosyalar aktar�ls�n ve ard�ndan komutlar �al��t�r�ls�n se�ene�i mode=1 durumuna kar��l�k gelmektedir.�nce komutlar �al��t�r�ls�n ve ard�ndan dosyalar aktar�ls�n se�ene�i mode=2 durumuna kar��l�k gelmektedir. �imdi program� gerekli t�m se�enekler ile birlikte �al��t�rabiliriz:

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

K���k bir �neri: files.txt dosya ad�n�n�n ba��na files_ (files_resolvconf.txt) ve commands.txt'nin ba��na commands_ (commands_resolvconf.txt) yazman�z� �neririm.

Program�n kendisini a��klama zaman� geldi art�k. Program, kendisine verilen parametre say�san� denetleyerek ba�lamaktad�r ve e�er bu say� 4 de�il ise, kullan�m mesaj� ekranda g�r�nt�lenerek sona ermektedir. E�er, parametre say�s� do�ru ise, herbiri ilgili de�i�kenlere atanmaktad�r. Ard�ndan, '~/.ssh/agent_info' dosyas�n�n varl��� denetlenmektedir ve e�er var ise, aktif hale getirilmektedir. E�er, ssh-agent'� kullanm�yorsan�z, ge�i�s�zc�klerini veya ge�i�c�mlelerini elle girmeniz gerekecek ki, bu durumda otomatile�tirmeden s�z edemeyiz. Daha sonra, dosyalar (hosts, files ve commands) var olup olmad��� denetlenmektedir. files_empty.txt ve commands_empty.txt isimleri �zel olarak denetlenmektedir. E�er, bunlar verilmi�se, dosyan�n varl���n�n denetlenmesi gerekmemektedir. Program�n bu k�sm�n� bu yaz�n�n yaz�m� s�ras�nda de�i�tirdim. Eski bu k�s�m a�a��daki gibiydi:

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

Bu durumda files_empty.txt veya commands_empty.txt dosyalar�n var olmas� gerekir. Yapt���m b�t�n i�lemleri tek bir dizinde oldu�u i�in bu dosyalar� bir kere yaratmak yeterli olmu�tu ve benim i�imi g�rm��t�.
Sonunda 'doit' fonksiyonu �al��t�r�lmaktad�r. Her�ey bu fonksiyon i�erisinden y�netilmektedir. Fonksiyonda, '$hosts_file' dosyas� i�erisinde yer alan her bilgisayar i�in copy_files ve execute_commands fonksiyonlar� �al��t�r�lmakta�r. Bu i�lem 'cat' ve 'while'den olu�an bir d�ng� i�erisinde olmaktad�r. Dolay�s�yla hebir bilgisayar i�in i� yerine getirilmi� olur.
�imdi copy_files fonksiyonuna bir g�zatal�m. Bu fonksiyonda ilk �nce 'files_file' de�i�keninin de�erinin 'files_empty.txt' de�erine e�it olup olmad���na bak�lmaktad�r. E�er, e�it ise, hi� bir �ey yap�lmamaktad�r. E�er, de�il ise, '$files_file' dosyas�ndaki her sat�r i�in 'direction' (y�n), 'file1' ve 'file2' de�i�kenlerine de�erleri atanmakta ve ard�ndan aktar�m y�n�ne ('direction') g�re aktar�m i�lemi scp ile yap�lmaktad�r.
Son olarak execute_commands foksiyonunu inceleyelim. Foksiyon ilk �nce 'commands_file' de�i�keninin de�erinin 'commands_empty.txt' olup olmad���n� denetlemektedir. E�er, e�it ise, hi�bir i�lem yap�lmamaktad�r. E�er, de�il ise, '$commands_file' dosyas�nda yer alan her komut arka planda �al��t�rmaktad�r. Komutu �al��t�rd�ktan sonra wait komutu '$!' parametresi ile �al��t�r�lmaktad�r. wait program�n� bu �ekilde �al��t�rmakla her komutu ard���k olarak ve birinin di�erinden sonra gelecek �ekilde �al��t�rmaktad�r. '$!' n�n de�eri en son arka planda �al��t�r�lan program�n i�lem numaras�na e�it olmaktad�r.
��te bu kadar. Kolay, �yle de�il mi?

 

Yap�land�r�m dosyalar�n�z�n yede�ini alman�n basit bir yolu

Yukar�daki program�n daha geli�mi� bir kullan�m �ekli a�a��daki programda uer almaktad�r. Buradaki ama�, bilgisayarlar�n�z�n yap�land�r�m dosyalar�n�n yede�ini almakt�r. Bunun i�in ainstall.sh program�n� kullanan basit bir kabuk program� yazd�m:

#!/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

servers ad�nda bir dizine sahip olman�z gerekmektedir. Bu dizin i�inde files_getbackup.txt ve ll_servers.txt ad�nda iki dosya olmak zorundad�r. 'files_getbackup.txt' dosyas�n�n i�eri�i a�a��daki gibidir:

r2l /root/backup.tgz backup.tgz

'll_servers.txt' dosyas�nda yede�i al�nacak bilgisayarlar�n adlar� veya IP numaralar� yer almaktad�r. 'll_servers.txt' dosyas�nda yer alan her bilgisayar ad� veya IP numaras� i�in ayn� isimde 'servers' dizini alt�nda bir dizin olmas� gerekmektedir. Bu dizinlerde /root/backup.tgz ar�ivini olu�turmaya yarayan 'commands_make_backups.txt' dosyas� ve yedeklerin saklanaca�� 'backups' dizini olmak zorundad�r. E�er, 'll_servers.txt' dosyas� aia��daki gibi ise:

fileserver
dbserver
10.10.10.1
appserver

'$servers' dizin yap�s� a�a��daki gibi olmal�d�r:

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

'commands_make_backups.txt' dosyas�na birka� �rnek a�a��da verilmi�tir:

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

Yukar�daki dosyada samba, atalk ve isim sunucusu dosyalar�n�n yede�ini alan komut yer almaktad�r.

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

Yukar�daki dosyada apache sunucusunun yede�ini alan komut yer almaktad�r.

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

Yukar�daki dosyada squid ve ikincil isim sunucular�n�n yede�ini alan komut yer almaktad�r.

Yukar�daki program� kullanarak ve gereksinimleriniz do�rultusunda 'commands_make_backup.txt' komutlar� olu�turarak sunucular�n�z�n yedeklerini alabilirsiniz.

 

Sonu�

ainstall.sh program� sistem y�neticisinin i�lerini otomatikle�tirmektedir. Program, ssh ara�lar�n�n basit kullan�m�na dayanmaktad�r. Program�n yarar�n�, fazla say�da sistemi y�netmekte oldu�unuz zaman daha iyi g�receksiniz.  

Referanslar

 

Bu yaz� i�in g�r�� bildiriminde bulunabilirsiniz

Her yaz� kendi g�r�� bildirim sayfas�na sahiptir. Bu sayfaya yorumlar�n�z� yazabilir ve di�er okuyucular�n yorumlar�na bakabilirsiniz.
 talkback page 

G�rsely�re sayfalar�n�n bak�m�, LinuxFocus Edit�rleri taraf�ndan yap�lmaktad�r
© Erdal Mutlu, FDL
LinuxFocus.org

Buray� klikleyerek hatalar� rapor edebilir ya da yorumlar�n�z� LinuxFocus'a g�nderebilirsiniz
�eviri bilgisi:
en --> -- : Erdal Mutlu <erdal(at)linuxfocus.org>
en --> tr: Erdal Mutlu <erdal(at)linuxfocus.org>

2002-12-24, generated by lfparser version 2.27