네트워크 스위치 장비 설정 정보 주기 백업을 위한 스크립트

네트워크 스위치 장비 설정 정보를 주기적으로 백업하기 위해서 아래와 같이 간단한 python 스크립트를 작성하였다.

import sys, os, time, telnetlib

# LOGIN 정보
LOGIN_NAME = '##########'
LOGIN_PASS = '##########'

# 설정 접근 패스워드
ENABLE_PASS = '##########'

date_info = time.strftime("%Y%m%d", time.localtime())

base_path = '[TFTP ROOT PATH]'
dst_path = '[저장될 폴더]/%s' % date_info


try: os.makedirs(base_path + "/" + dst_path)
except Exception, e:
    print str(e)



tn = telnetlib.Telnet()
tn.open(sys.argv[1], timeout=3)

while True:
    re = tn.read_until('Please Enter Login Name:', 3)
    if len(re) > 1: break
tn.write(LOGIN_NAME + '\r\n')


while True:
    re = tn.read_until('Please Enter Password:', 3)
    if len(re) > 1: break
tn.write(LOGIN_PASS + "\r\n")
tn.write("enable\r\n")

tn.write(ENABLE_PASS + "\r\n")
tn.write("copy running-config tftp [서버주소] " + dst_path + "/" + sys.argv[2] + ".cnf\r\n")
time.sleep(3)
tn.write("exit\r\n")
tn.write("exit\r\n")

위의 스크립트는 brocade icx 6450 장비를 위한 코드이다. 구조 자체는 심플하다. telnet으로 접속하여 로그인하고 tftp를 이용하여 설정을 전송하는 스크립트이다.

이 스크립트를 작성하면서 좀 힘들었던 부분은

tn.write("문자열" + "\r\n")

이 부분이었다. 대부분의 문서에서는 “\n”을 붙여서 전송하면 된다고 나오는데, 실제 적용 결과 일부 장비에서 먹지 않는 것을 발견하였다. 왠만하면 “\r\n”을 써주는게 정신건강상 좋다.

import sys, os, time, telnetlib

LOGIN_NAME = '##########'
LOGIN_PASS = '##########'

date_info = time.strftime("%Y%m%d", time.localtime())

base_path = '[TFTP ROOT PATH]'
dst_path = '[저장될 폴더]/%s' % date_info

try: os.makedirs(base_path + "/" + dst_path)
except Exception, e:
    print str(e)



tn = telnetlib.Telnet()
tn.open(sys.argv[1], port=[포트번호], timeout=3)

while True:
    re = tn.read_until('Username:', 3)
    if len(re) > 1: break
tn.write(LOGIN_NAME + '\r\n')


while True:
    re = tn.read_until('Password:', 3)
    if len(re) > 1: break
tn.write(LOGIN_PASS + "\r\n")
tn.write("copy running-config tftp://[서버주소]/%s.cnf\r\n" % sys.argv[2])
tn.read_until("Success")
tn.write("exit\r\n")
tn.write("exit\r\n")

try: os.rename(base_path + "/" + sys.argv[2] + ".cnf", base_path + "/" + dst_path + "/" + sys.argv[2] + ".cnf")
except Exception, e: print str(e)

위의 코드는 NETGEAR 장비용이다. 다른점은 TFTP 전송시 하위 폴더를 인식하지 못하는 문제가 있었다. 이를 해결하기 위해 일단 TFTP 최상위 폴더에 저장하고 원하는 폴더로 이동하도록 구현하였다.

답글 남기기

이메일 주소는 공개되지 않습니다.