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

2020-10-13 15:35:29

네트워크 스위치 장비 설정 정보를 주기적으로 백업하기 위해서 아래와 같이 간단한 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 최상위 폴더에 저장하고 원하는 폴더로 이동하도록 구현하였다.

tag :  폴더스크립트장비설정정보저장tftp백업코드부분전송작성주기서버스위치n네트워크주소자체대부분접근하위해결정신이동실제icx구조인식최상위로그인구현건강문서python심플번호telnet패스워드netgear아래brocade발견문자열문제비용적용결과r일부이용접속송시포트