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