※ 업무하면서 습득한 내용들을 정리해 놓은 포스팅입니다 :P 추가로 궁금하신 점은 댓글로 남겨주시고 필요한 자료 있으면 요청주세요! 잘못된 내용이 있으면 고쳐주시면 감사하겠습니다. 자료 퍼가실 때는 출처 남겨주세요!
ο 목차
※ 코드 보는 방법 참고
ㅇ 달러 기호($)가 있는 경우 -> 리눅스 터미널에서 CLI 명령어 입력
ㅇ "=#" 기호가 있는 경우 -> psql 쉘에서 명령어 입력
ㅇ 꺽쇠가 하나 있는 경우(>) -> 윈도우 명령 프롬프트(cmd)에서 명령어 입력
ㅇ 꺽쇠가 세개 있는 경우(>>>) -> python 쉘에서 명령어 입력
Netmiko에서 지원하는 다양한 command_send 함수 중 제가 가장 많이 사용하는 3개 함수를 소개해볼까 합니다.
케이스에 따라 다른 함수가 필요할 수도 있겠지만 저는 3개 이외의 다른 함수는 크게 사용할 일은 없었습니다.
아래 자료가 작업에 도움이 되길 바랍니다 :P
CASE1 | send_command() 함수
1. 사용 조건
"명령어 전달 -> 동작 -> 동작 결과 반환" 방식의 원격 제어가 필요한 경우
2. 사용 명령어 예시
▶ show 명령어
명령어 전달 -> 명령어에 대한 결과값 반환
▶ clear 명령어
명령어 전달 -> 동작(clear) -> 동작에 대한 결과값 반환
▶ etc...
3. 사용 방법
(코드 예시)
# 모듈 import
from netmiko import ConnectHandler
# 접속할 device1 정보
device1 = {
"device_type" = "장비OS플랫폼",
"host" = "IP",
"username" = "접속계정명",
"password" = password
}
# device1 장비 ssh 접속
net_connect = ConnectHandler(**device1)
# enable 모드 활성화
net_connect.enable()
# "show system" 명령어 전달 후 결과를 output에 저장
output = net_connect.send_command("show system")
# output 결과 출력
print(output)
(결과 예시)
- 시스템 모델 정보 출력
CASE2 | send_command_timing() 함수
1. 사용 조건
"명령어 전달 -> 동작을 위한 확인 질문 -> 추가 명령어 전달 -> 동작 -> 동작 결과 반환" 방식의 원격 제어가 필요한 경우
※ send_command_timing() 함수는 첫번째 명령어를 전달하고 다음 프롬프트가 나타날 때까지 기다린 후(delay) 세션이 연결된 프롬프트에 추가 인수를 입력할 수 있도록 제어
2. 사용 명령어 예시
▶ write memory 명령어
- write memory 는 '장비로 write memory 명령어 전달 -> 장비에서 "Overwrite 'config: 0 start.cfg'? [y/n]" 와 같은 확인 질문 -> 질문에 대해 yes 혹은 no라는 추가 인수를 다시 한번 장비로 전달'해야 정상적으로 동작하는 명령어
- send_command()를 아래와 같이 구성한다해도 write memory는 동작하지 않음.
# write memory 수행 명령어 전달.
output = net_connect.send_command("write memory")
# 장비에서 output으로 질문을 보냈으나 질문을 보낸 시점에서 세션이 종료되어 write memory는 수행되지 않음.
# 질문을 예상하고 yes 명령어를 전달하려 하나 이미 기존 세션이 종료되었기 때문에 장비에는 새로운 명령어인 yes가 입력됨.
output += net_connect.send_command("yes")
# yes라는 명령어는 없으므로, 오류 출력
- 이런 경우 send_command_timing() 명령어를 이용해서 기존 세션을 그대로 유지한 채 "yes|no"를 추가 인수로 다시 한번 전달해주면 정상적으로 write memory 작업을 수행할 수 있음.
3. 사용 방법
(코드 예시) test_netmiko.py
# 모듈 import
from netmiko import ConnectHandler
# 접속할 device1 정보
device1 = {
"device_type" = "장비OS플랫폼",
"host" = "IP",
"username" = "접속계정명",
"password" = password
}
# device1 장비 ssh 접속
net_connect = ConnectHandler(**device1)
# enable 모드 활성화
net_connect.enable()
# "show system" 명령어 전달 후 결과를 output에 저장
output = net_connect.send_command_timing("write memory")
output += net_connect.send_command_timing("yes")
# output 결과 출력
print(output)
(결과 예시)
- 정상적으로 memory write 작업이 완료된 것을 확인할 수 있음.
※ "write memory"에 해당하는 동작은 save_config() 라는 명령어로도 간단하게 구현 가능함.
※ 위의 내용은 예시로 사용법 정도만 참고
CASE3 | send_config 함수
1. 사용 조건
네트워크 장비에 configure 설정이 필요한 경우
※ 일반적으로 설정을 하기 위해서 장비에 "configure" -> "설정값" -> "exit" 명령어를 차례로 전달해야 하는데, send_config는 그 중 "configure" 와 "exit" 명령어를 기본적으로 포함하는 함수로, 중간의 "설정값"만 인수로 전달하면 되도록 구성됨.
2. 사용 방법
(코드 예시) test_netmiko.py
# 모듈 import
from netmiko import ConnectHandler
# config 설정값 - 원격 log 서버 및 ntp 서버 설정
conf_set = ["logging x.x.x.x","ntp server y.y.y.y"]
# 접속할 device1 정보
device1 = {
"device_type" = "장비OS플랫폼",
"host" = "IP",
"username" = "접속계정명",
"password" = password
}
# device1 장비 ssh 접속
net_connect = ConnectHandler(**device1)
# enable 모드 활성화
net_connect.enable()
# "show system" 명령어 전달 후 결과를 output에 저장
output = net_connect.send_config_set(conf_set)
# output 결과 출력
print(output)
net_connect.disconnect()
(코드 실행)
> python3 test_netmiko.py
- "configure"와 "exit" 없이 설정값 만으로 장비에 원격 로그 서버와 ntp 서버가 설정된 것을 확인할 수 있음.
여러 줄의 설정값을 설정할 때 특히 유용하게 사용 가능함.
이상으로 netmiko로 원격 통제시 가장 많이 사용하는 함수 3개 소개가 끝났습니다.
다음 시간에 더 유용한 포스팅으로 돌아오도록 하겠습니다~
감사합니다.
※ 좋아요와 구독은 큰 힘이 됩니다 :P 감사합니다.
'네트워크 운영도구 개발 > 업무 자동화' 카테고리의 다른 글
[네트워크 자동화 시작하기]#2-1. Netmiko 활용해보기 - 장비 접속 (0) | 2021.08.20 |
---|---|
[네트워크 자동화 시작하기]#1. 윈도우(Windows)에서 네트워크 자동화 환경 구성하기 (1) | 2021.07.26 |
[네트워크 자동화 시작하기]#0. 네트워크 자동화란? (0) | 2021.07.23 |
댓글