본문 바로가기

파이썬 RPA

Python 네트워크 자동 점검 RPA 제작: netmiko 설치 및 SSH 연결

반응형

Python으로 네트워크장비를연결하여 장비 및 회선 상태 등을 자동 점검하는 RPA(Robot Process Automation) Tool을 만들어보자

 

기반 Library

   - Paramiko - Python)에서SSH를사용하여 네트워크 장비 접급

   - Netmiko : Paramiko기능을 확장하여 스위치나 라우터 Config 등을 프로그래밍 가능한 라이브러리

 

Netmiko 설치

- Netmiko 주소:  https://github.com/ktbyers/netmiko

 

-  관리자권한으로 Command 창 실행

- (참고) 패키지 설치전 pip를 최신 버전으로 업그레이드 하는것이 좋다

   >python -m pip install --upgrade pip   

   >python -m pip install --upgrade setuptools

 

- Netmiko 설치전 요구사항 

> python -m pip list   # PC애 설치된 라이브러리 확인

 . Paramiko 버전  2.4.3 이상

 . scp 버전 0.13.2 이상

 . pyserial

 . textfsm

 

내 PC에는 scp, pyserial, textfsm이 설치 안되어있어 아래와 같이 설치하였다

   >pip install scp

   >pip install pyserial 

   >pip install textfsm

 

- netmiko 설치

>pip install netmiko 

>python -m pip list   # 설치된 라이브러리 버전 확인

Package                   Version
------------------------- ---------
netmiko                   3.4.0
paramiko                  2.8.0
pyserial                  3.5
setuptools                49.2.1

textfsm                   1.1.2

 

InfluxDB 설치 : 통계, 이벤트 및 실시간 분석을위한 오픈 소스 및 확장 가능한 시계열 데이터베이스

>python -m pip install --upgrade influxdb

Package                   Version
------------------------- ---------

influxdb                  5.3.1

 

Netmiko 지원 장비 종류

  • Arista vEOS
  • Cisco ASA
  • Cisco IOS
  • Cisco IOS-XR
  • Cisco SG300
  • HP Comware7
  • HP ProCurve
  • Juniper Junos
  • Linux
  • and other

Telnet 또는 SSH 연결

from netmiko import ConnectHandler
import sys

# 네트워크 장비의 접속 프로파일 작성,  Dictionary 형태로 작성

ios_sw = {
    'device_type' : 'cisco_ios',
    'ip' : '10.0.0.1',
    'username' : 'admin',
    'password' : 'cisco',
    'secret' : 'cisco',          # enable 모드로 진입하기 위함
    'verbose' : True,          # 함수 수행시 발생정보들을 표준 출력으로 내보내는 방법
                                  #  - verbose 0 은 출력않음, 1은 자세히, 2는 함축 정보만 출력
}

#ssh 연결
net_connect = ConnectHandler(**ios_sw)    # Dict 형태로 작성되었기 때문에 **를 붙인다

네트워크 명령어 수행

#명령어 입력
output = net_connect.send_command('show run')
print(output)

# 새로운 구성 변경시 enable 모드 진입
net_connect.enable()                       # enable 모드로 진입하기 위한 함수. (필수)
# 종료 : net_connect.exit_enable_mode()       


# Config 모드
net_connect.config_mode()     #접속
#종료 : net_connect.exit_config_mode() 

net_connect.check_config_mode  #Config 모드면 True, 아니면 False

# netmiko 커맨드 종류
  .send_command('커맨드')              # 한개의 커맨드 yield
  .send_config_set('커맨드')              #  여러개의 커맨드 전송
  .send_config_from_file('파일명')  # 파일로 묶은 커맨드 전송
  .find_prompt()                            # 현재 프롬프트 반환
  .commit()                                  # commit이 필요한 OS만 사용)


# 커맨드 실행 예시 1: interface loopback 0 생성 및 IP 추가

config_commands = ['interface loopback 30','ip address 1.1.1.1 255.255.255.255']

output = net_connect.send_config_set(config_commands)
print(output)


# 커맨드 실행 예시 2: IP route 생성 및 확인

out_put_2 = net_connect.send_config_set('ip route 0.0.0.0 0.0.0.0 192.168.60.129')    
print(out_put_2)          #      
      
show_route = connect.send_command('show ip route') # 위 명령 수행 확인
print(show_route)

net_connect.disconnect()      # ssh 종료

 

 

=================================================================

열심히 일한 당신 떠나라  ~~~

 

열심히 일한 당신 떠날 자격이 있다 ~~~

반응형