본문 바로가기

Linux/shell script

shell 스크립트와 expect 이용하여 스위치장비 전체 패스워드 변경

먼저 expect가 설치가 되어 있어야 함.


#yum install expect로 손쉽게 설치가 가능 함.


방식은 2가지 


1. Shell 스크립트와 expect 파일 2개를 만들어 shell 스크립트를 이용하여 expect 파일을 실행 시키는 방법

2. Shell 스크립트 파일 1개를 만들어 스크립트 안에 expect 명령어를 부분 적으로 사용하는 방법.


이 블로그에서는 1번을 사용 하겠음.


먼저 폴더를 하나 만듭시다. 패스워드 변경만을 전용으로 하는 폴더를 

경로나 파일명은 상관 없으니 알아서 만드는 걸로 ...

그리고 그 폴더안에 패스워드가 변경될 ip 주소 목록 텍스트 파일 하나.


#mkdir -p /document/script/changePW

#cd  /document/script/changePW

#touch changeIP.txt

#touch change_PW.sh

#touch changeHP


지금 만드는 스크립트는 스위치 장비의 패스워드를 변경 하는 스크립트 이지만 간단한 수정으로 서버나 다른장비로도 응용이 가능 함.


#vi ./changeIP.txt

#ex 192.168.1.11

192.168.1.1

192.168.1.2

192.168.1.3

192.168.1.4



vi ./changeIP.txt

#/bin/sh

clear

echo -e -n "변경전 암호"

read oldpass #변경전 패스워드를 변수로 입력#


clear

echo -e -n "변경 후 암호"

read newpass #변경 후 패스워드를 변수로 입력#


#변경전 패스워드를 변수로 입력#

clear
echo -e " "
echo -e "--------------------------------------"
echo -e "| 변경 전 암호   : $oldpass"
echo -e "| 변경 후 암호   : $newpass"
echo -e "--------------------------------------"
echo -e " "


echo -e -n "이게 맞나요? (Y/N) : "

read yes
if [ "$yes" = "y" -o "$yes" = "Y" ]; then

#/document/script/changePW/changeIP.txt <- 이 파일 안에 있은 SWip목록들을 참조#

for switch in $( cat /document/script/changePW/changeIP.txt); do 



check=`snmpwalk -v2c -c 보안snmp $switch sysDescr | awk '{print $5}'| head -n1`
check2=`snmpwalk -v2c -c 보안snmp $switch sysDescr | awk '{print $4}'| head -n1`
#check3=`snmpwalk -v2c -c 보안snmp $switch sysDescr | awk '{print $4}'| head -n1`
name=`snmpwalk -v2c -c 보안snmp $switch sysName | awk '{print $4}'| head -n1`
name2=`snmpwalk -v2c -c 보안snmp $switch sysName | awk '{print $4}'| head -n1 |sed s/\#/\-/g`



##지금 여기서 중요한게 위 check 변수  선언에서 check 변수를 정할때 어떤구문을 변수를 정할지가 중요함.
##왜냐하면 나는 몇대의 장비의 패스워드를 스크립트까지 귀찮게 만들면서 바꾸려는게 아님
##10대 이상의 서로 장비명도 다른 장비들의 패스워드를 변경 하여야 하기 때문에
##아래의 snmpwalk를 이용해서 장비명을 긁어 올거임.

##예를 들어서 $switch = changeIP.txt (스위치 장비 ip 목록)
##[root@heartbleed]#snmpwalk -v2c -c 보안snmp $switch sysDescr | awk '{print $5}'| head -n1 
##이라고 명령어를 치면 
##HP
##Dell
##CS6550-48S6Q-SI

##등과 값을 받게 해놨음.  다음 설명은 아래에 이어서....##



time=`date '+%y%m'`
before=`date '+%y%m' -d '1 month ago'`

    if [ "$check2" = "HP" ]; then
    echo -e " "
    echo -e "$check2 모델의 $name2 장비를 진행합니다 IP는 $switch "
    /document/script/changePW/changeHP $switch $name2 $time $oldPW $newPW
    
fi

## 그럼 이제 for문으로 ip를 읽으면서 snmpwalk 로 장비명만을 추출한 값을 check로 변수 선언을 함
## 변수선언한 값을 미리 알아둔 후에 
## if [ "$check2" = "HP" ]; 와 같이 check2가 HP와 동일할때 expect 파일을 실행해라 라고 하는 거임.


    if [ "$check" = "Dell" ]; then
    echo -e " "
    echo -e "$check 모델의 $name2 장비를 진행합니다 IP는 $switch "
    /ramdisk/bin/change_pwd/force10_pwd $switch $oldPW $newPP
fi
done

fi


쓰기 귀찮아서 여기까지만 쓰고 expect 내용은 다음에 써야겠다. 매우 귀찮다 퇴근 10분 전이다

퇴근이나 하고 집에가서 배틀그라운드 나 해야지...


참고로 위 스크립트는 얼마든지 수정 및 응용하여 패스워드도 장비별로 다르게 ip별로 다르게 적용 할 수도 있다.



'Linux > shell script' 카테고리의 다른 글

linux 디렉토리경로 / 지울때 sed 이용  (0) 2018.09.04
mysql repair check 스크립트  (0) 2016.11.20
리눅스 백업 스크립트 예제  (1) 2016.10.14