파이썬 네트워크 자동화
앞선 3개의 글은 Telnet을 이용한 파이썬 네트워크 자동화를 구현을 했습니다. Telnet 경우 메시지를 보낼 때 Plain Text로 보내기 때문에 보안에 취약합니다. 따라서 실무에서는 Telnet 접속 방식은 사용되지 않습니다. 이런 이유로 실무에서 원격 장비에 접속하고 제어를 하기 위해서 ssh protocol을 사용합니다. ssh protocol을 사용하는 "paramiko" 라이브러리를 어떻게 이용하고 적용할 수 있는지 알아보도록 하겠습니다.
파이썬 네트워크 자동화
Paramiko는 파이썬으로 만들어진 SSHv2 프로토콜용 라이브러리로 클라이언트나 서버에서 실행됩니다. SSH의 기능인 원격 명령 실행 또는 파일 전송과 같은 SSH 파이썬 라이브러리입니다. 이런 이유로 자동화 경우 Paramiko을 네트워크 장비들을 제어하는데 많이 사용됩니다.
설치가 정상적으로 되었다면, paramiko를 사용할 수 있는지 python shell에 들어가서 아래 내용을 확인을 하겠습니다.
위와 같이 정상적으로 paramiko 모듈을 정상적으로 import가 가능하다면 paramiko를 사용할 준비가 되었습니다.
CR1, CS1, CS2, CS3, CS4 장비에 NTP 서버 설정
서버 정보 : 192.168.37.129 (CentOS 서버)
import time : time 모듈을 import 한다
import paramiko : paramiko 모듈을 import 한다.
cisco_devices : 리스트 데이터 타입으로 Csico Router, Switch IP 정보를 선언한다.
username : 사용하는 username을 변수에 선언한다.
password : 사용하는 password을 변수에 선언한다.
ssh_client = paramiko.SSHClient() : ssh_client 이름으로 paramiko SSH Client 객체를 선언한다.
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) : 자동적으로 host_key_policy가 수용할 수 있도록 한다.
for ip in cisco_devices : for 문을 이용하여 리스트에 있는 IP들을 순차적으로 호출하여 for 문 아래 내용을 실행한다.
ssh_client.connect(hostname=ip, username=username, password=password) : ssh 접속을 위해 기본 정보를 ssh_client.connect 함수 인자 정보를 기입한다.
rc = ssh_client.invoke_shell() : 연결 세션을 위해서 shell을 생성한다.
output1 = rc.recv(3000) : output1 에 rc.recv에 저장한다. recv는 Receive data from channel의 의미이다.
rc.send("xxx") : parmiko의 send 함수를 이용하여 네트워크 장비에 보낼 명령어를 입력한다.
위 내용이 정상적으로 생성되었다면 아래와 같이 스크립트를 실행하여 결과를 확인합니다.
위 결과에 출력은 위와 같으며, 각 장비에 접속하여 ntp server을 설정하는 것을 확인할 수 있습니다. telnet과 비슷하게 동작하지만 보안적 향상된 ssh 방식으로 장비 접속, 명령어 실행을 하는 것을 볼 수 있습니다.
paramiko를 이용하여 간단한 명령을 원격 네트워크 장비들에게 보내고, 실행할 수 있었습니다. 보안적으로 telnet 보다 안전한 ssh 접속 방식으로 실무에서 사용 가능한 방법이니, 관련 내용을 가지고 현업에 맞게 내용을 보안 수정을 하면 좋을 것 같습니다.