반응형
아래의 모든 경로는 임시 설정하여 작성 하였습니다.
바로 실 서버에 적용하기엔 무리가 있으니, 실서버와 같은 환경의 DNS 서버를 구성 후 경로 변경 및 테스트 진행 후 적용하시기 바랍니다.
* 사용 환경에 맞춰 경로, SOA 필드 값, 네임서버 등 변경이 필요 합니다.
스크립트 작성 환경
- OS : CentOS 6.7
- Shell : Bash
- 패키지 : Bind 9.8.2
#!/bin/bash
DIR=/root/test
named_conf="/etc/named.rfc1912.zones"
serial2=[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]
echo "호스트 추가(1)"
echo "도메인 추가(2)"
echo -e "해당하는 번호를 입력 해주세요: \c"
read select
case $select in
1)
#사용자 입력 받기
echo "-------------------------------------------"
echo "ex) domain.co.kr"
echo -e "도메인 명: \c"
read domain
echo "-------------------------------------------"
echo "ex) 2019030101"
echo "현재 시리얼 번호"
sed -n '3p' $DIR/db.$domain
echo "-------------------------------------------"
echo -e "시리얼 명: \c"
read serial
echo "-------------------------------------------"
echo "ex) host"
echo -e "호스트 명: \c"
read host
echo "-------------------------------------------"
echo -e "IP: \c"
read ip
echo "-------------------------------------------"
echo "도메인 명: $domain"
echo "시리얼 명: $serial"
echo "호스트 명: $host"
echo "$host의 IP: $ip"
echo "-------------------------------------------"
echo -e "입력하신 정보가 확실 한가요? (y/n)?: \c"
read resolve
case $resolve in
Y|y)
echo "-------------------------------------------";;
Yes|yes)
echo "-------------------------------------------";;
*)
echo "스크립트를 종료 합니다."
exit;;
esac
# 백업파일 생성
echo "백업 파일을 생성 합니다."
echo "-------------------------------------------"
cp -r $DIR/db.$domain $DIR/db.$domain.$(date +%Y%m%d)
sleep 1
# Serial Number Change
echo "시리얼 번호를 변경 합니다."
echo "-------------------------------------------"
sed "3s/$serial2/$serial/g" -i $DIR/db.$domain
sleep 1
# A record Add
echo "A 레코드를 추가 합니다."
echo "-------------------------------------------"
echo -e "$host\tIN\tA\t$ip" >> $DIR/db.$domain
sleep 1
# named 프로세스 kill
pid=`ps -ef | grep "named" | grep -v "grep" | grep -v "/bin/sh/" | awk '{print $2 }'`
ps -ef | grep "named" | grep -v "grep" | grep -v "/bin/sh/"
echo "named 프로세스의 PID는 $pid 입니다."
echo "-------------------------------------------"
echo -e "$pid를 kill 하시겠습니까 (y/n)?: \c"
read kill
sleep 1
case $kill in
Y|y)
echo "-------------------------------------------"
echo "프로세스를 kill 합니다."
echo "-------------------------------------------"
kill -HUP $pid;;
Yes|yes)
echo "-------------------------------------------"
echo "프로세스를 kill 합니다."
echo "-------------------------------------------"
kill -HUP $pid;;
*)
echo "-------------------------------------------"
echo "스크립트를 종료 합니다."
exit;;
esac
# DNS 조회
echo "DNS 쿼리를 조회 합니다."
dig @58.227.193.227 $host.$domain +noall +answer
dig @168.126.63.1 $host.$domain +noall +answer
echo "-------------------------------------------"
# xfer 로그 조회
echo "xfer 조회 합니다."
tail -10 $DIR/log/xfer-out.log
echo "-------------------------------------------"
sleep 1
echo "프로그램을 종료합니다."
exit;;
2)
echo "-------------------------------------------"
echo "ex) domain.co.kr"
echo "-------------------------------------------"
echo -e "도메인 명: \c"
read domain
echo "-------------------------------------------"
echo "ex) 2019030101"
echo "-------------------------------------------"
echo -e "시리얼 명: \c"
read serial
echo "-------------------------------------------"
echo "호스트 @ 와 www 추가하기 위해 ip를 입력 받습니다."
echo "-------------------------------------------"
echo -e "IP: \c"
read ip
echo "-------------------------------------------"
echo "도메인 명: $domain"
echo "시리얼 명: $serial"
echo "IP: $ip"
echo "-------------------------------------------"
echo -e "입력하신 정보가 확실 한가요? (y/n)?: \c"
read resolve
case $resolve in
Y|y)
echo "-------------------------------------------";;
Yes|yes)
echo "-------------------------------------------";;
*)
echo "-------------------------------------------"
echo "스크립트를 종료 합니다."
exit;;
esac
#존 파일 등록
echo "존 파일 등록중입니다."
echo "-------------------------------------------"
echo -e "\t zone \"$domain\" {" >> $named_conf
echo -e "\t\ttype master;" >> $named_conf
echo -e "\t\tfile \"db.$domain\";" >> $named_conf
echo -e "\t\tallow-update { none; };" >> $named_conf
echo -e "\t};" >> $named_conf
# cp -r $DIR/named.local $DIR/db.$domain
cp -r /var/named/named.empty $DIR/db.$domain
sed '$d' -i $DIR/db.$domain
sed "1s/86400/600/g" -i $DIR/db.$domain
sed "2s/localhost./ns1.---.co.kr./g" -i $DIR/db.$domain
sed "2s/root.ns1.---.co.kr./root.$domain./g" -i $DIR/db.$domain
sed "3s/$serial2/$serial/g" -i $DIR/db.$domain
sed "8s/localhost./ns1.----.co.kr/g" -i $DIR/db.$domain
echo -e "\tIN\tNS\tns2.----.co.kr" >> $DIR/db.$domain
echo -e "\tIN\tNS\tns3.----.co.kr" >> $DIR/db.$domain
echo "www와 @는 디폴트로 설정됩니다."
echo "-------------------------------------------"
echo -e "@\tIN\tA\t$ip" >> $DIR/db.$domain
echo -e "www\tIN\tA\t$ip" >> $DIR/db.$domain
echo -e "추가하실 호스트가 있습니까 (y/n)?: \c"
read host_add
case $host_add in
Y|y)
echo "-------------------------------------------"
echo "ex) host"
echo -e "호스트 명: \c"
read host
echo "-------------------------------------------"
echo -e "IP: \c"
read ip
echo "-------------------------------------------"
echo "A 레코드를 추가 합니다."
echo "-------------------------------------------"
echo -e "$host\tIN\tA\t$ip" >> $DIR/db.$domain
;;
Yes|yes)
echo "-------------------------------------------"
echo "ex) host"
echo -e "호스트 명: \c"
read host
echo "-------------------------------------------"
echo -e "IP: \c"
read ip
echo "-------------------------------------------"
echo "A 레코드를 추가 합니다."
echo "-------------------------------------------"
echo -e "$host\tIN\tA\t$ip" >> $DIR/db.$domain
;;
*)
echo "-------------------------------------------"
echo "도메인 추가를 이어서 진행합니다."
echo "-------------------------------------------"
continue;;
esac
#named 프로세스 kill
pid=`ps -ef | grep "named" | grep -v "grep" | grep -v "/bin/sh/" | awk '{print $2 }'`
ps -ef | grep "named" | grep -v "grep" | grep -v "/bin/sh/"
echo "named 프로세스의 PID는 $pid 입니다."
echo "-------------------------------------------"
echo -e "$pid를 kill 하시겠습니까 (y/n)?: \c"
read kill
sleep 1
case $kill in
Y|y)
echo "-------------------------------------------"
echo "프로세스를 kill 합니다."
echo "-------------------------------------------"
kill -HUP $pid;;
Yes|yes)
echo "-------------------------------------------"
echo "프로세스를 kill 합니다."
echo "-------------------------------------------"
kill -HUP $pid;;
*)
echo "-------------------------------------------"
echo "스크립트를 종료 합니다."
exit;;
esac
# DNS 조회
echo "DNS 쿼리를 조회 합니다."
dig @58.227.193.227 $host.$domain +noall +answer
dig @168.126.63.1 $host.$domain +noall +answer
echo "-------------------------------------------"
# xfer 로그 조회
echo "xfer 조회 합니다."
tail -10 $DIR/log/xfer-out.log
echo "-------------------------------------------"
sleep 1
echo "프로그램을 종료합니다."
exit;;
*)
echo "잘못 입력 하셨습니다"
exit;;
esac
반응형
'Programming > Bash Shell Script' 카테고리의 다른 글
[Bash Shell Script] 쉘 스크립트 if조건문 라인에서의 "[: too many arguments" 에러 발생 (0) | 2019.12.17 |
---|---|
[Bash Shell Script] 쉘 스크립트 trap 명령어를 이용한 시그널 제어 (0) | 2019.12.17 |
[Bash Shell Script] 로그 추출, 정리 쉘 스크립트 예제 (0) | 2019.12.17 |
[Bash Shell Script] 백업 용량 변동 출력 쉘 스크립트 예제 (1) | 2019.12.12 |
[Bash Shell Script] 쉘 스크립트 로딩 바 구현 (0) | 2019.12.12 |