Netmiko
넷미코
는 네트워크 장비의 SSH CLI 자동화를 돕는 라이브러리이다. 장비별 로그인·프롬프트·페이지 출력·설정 모드 차이를 추상화하여 원격 명령 전달과 결과 수집을 구성한다.
밑줄 용어에 마우스를 올리거나, 키보드로 선택하거나, 터치하면 설명을 볼 수 있습니다.
01무엇이고, 어떤 일을 하나
- 장비 종류에 맞는 연결 드라이버와 CLI 초기화를 선택한다.
- 조회 명령과 설정 모드 작업의 대화 흐름을 처리한다.
- 프롬프트·시간 제한·출력 정규화를 자동화 코드에 연결한다.
02어떤 순서로 동작하나
- 장비 유형 선택
대상 장비와 device_type·인증·호스트 신뢰 조건을 설정한다.
- 세션 초기화
SSH 연결 뒤 가 프롬프트와 필요한 세션 상태를 준비한다.
- 명령 수행
조회는 등으로, 설정 변경은 의도한 설정 모드 절차로 전달한다.
- 결과 판정
반환 문자열· 메시지·기대 상태를 검사하고 종료한다. 함수가 반환됐다는 사실만으로 설정 적용 성공을 확정하지 않는다.
03먼저 알아둘 용어와 구성요소
- 네트워크 OS CLI는 명령 실행과 달리 사용자·특권·설정 모드, 프롬프트, 화면 페이지 분할이 있다.
- 는 장비 종류별로 이런 터미널 동작을 처리하는 연결 기능을 제공한다.
- 는 조회 명령의 출력과 종료 프롬프트를 기다리고 send_config_set은 설정 모드에서 여러 명령을 적용하는 용도다.
- 두 호출을 같은 단순 문자열 전송으로 취급하면 모드와 실패 검출을 놓칠 수 있다.
- 운영 구조에서는 ssh_strict와 호스트키 자료 등 연결 신뢰 정책을 명시한다.
- 명령이 반환됐어도 출력에 Invalid input 같은 가 있을 수 있어 결과를 파싱하고 실제 running 상태를 다시 조회한다. running-config 변경과 startup-config 저장도 별도 작업이며 장비·플랫폼에 맞는 저장 절차가 필요하다.
장비 자동화의 메뉴·원격 명령·결과 파일을 한 흐름으로 읽기
사용자 입력을 명령으로 바꾸고 결과를 저장하는 자동화 구조에서 실제 성공의 근거를 구별한다.
실습 구성과 전제
- 흐름도, 장비 설정 메뉴, Jupyter 결과 폴더는 서로 다른 실행 화면이다. 하나의 요청이 모두를 거쳤다고 단정하지 않는다.
- 실습 장비와 검증한 SSH 호스트 키, 최소 권한 인증 키가 준비된 환경을 가정한다. 아래 코드는 조회 전용으로 재구성한다.
대상 선택과 접속·작업 함수를 분리한다
- 흐름도는 메뉴에서 장비 종류와 대상을 선택한 뒤 해당 접속 함수와 작업으로 분기한다. 사용자 입력이 그대로 임의 셸 명령으로 흘러가도록 만들지 않고 허용 작업으로 변환한다.
- 방식과 대화형 네트워크 CLI는 명령 완료를 판단하는 방법이 다르다. 장비 종류에 따라 채널 또는 의 프롬프트 처리를 선택한다.
원본 크기로 보기 ↗
- 메인 메뉴에서 계정·장비 선택으로 분기하고 Cisco·Rocky·Ubuntu 등 대상 종류가 나뉜다.
- connect 함수와 설정 백업·invoke_shell 같은 작업 연결이 표현되어 있다.
확인 기준대상·인증·작업·저장 책임을 별도 함수로 나누고, 실패가 어느 단계에서 났는지 결과에 남긴다.
설정 문장 생성과 장비 적용을 구별한다
- 메뉴 사진은 입력을 받아 Cisco 설정 문장으로 바꾸고 장비 프롬프트와 완료 메시지를 출력한다. 입력값 검증과 명령 구성의 연결을 보여 준다.
- 프로그램이 찍은 적용 완료 문자열은 코드에서 정한 표시다. 응답, 실행 후 구성 조회, 실제 할당까지 확인해야 목적한 동작을 입증할 수 있다.
원본 크기로 보기 ↗- 사용자가 DHCP 관련 값을 입력하는 메뉴와 생성된 설정 문장이 보인다.
- 장비 CLI 프롬프트와 프로그램의 적용 완료 메시지가 이어지지만 실제 클라이언트 임대 결과는 이 화면에 없다.
확인 기준설정 성공 판정을 마지막 print문에 맡기지 않는다. 읽기 전용 사후 조회를 작업별로 정해 기대 상태와 비교한다.
SSH 조회의 출력과 종료 상태를 함께 수집한다
- 재구성 코드는 사전에 등록된 호스트 키를 확인하고 작은 조회 명령을 실행한다. stdout·stderr·종료 상태를 별도 값으로 보관해 명령 실패를 정상 자료와 구분한다.
- 큰 출력이나 대화형 세션은 채널 버퍼와 완료 판정 방식이 다르므로 아래 짧은 조회 예시를 그대로 확장하지 않는다. 접속 실패와 실행 후 연결 끊김도 별도 상태로 남겨야 한다.
from pathlib import Path import paramiko client = paramiko.SSHClient() client.load_system_host_keys() try: client.connect("192.0.2.30", username="labuser", key_filename=str(Path.home() / ".ssh" / "lab_ed25519"), timeout=5, auth_timeout=5, banner_timeout=5) stdin, stdout, stderr = client.exec_command("ip -brief address", timeout=10) out = stdout.read().decode("utf-8", errors="replace") err = stderr.read().decode("utf-8", errors="replace") rc = stdout.channel.recv_exit_status() print({"returncode": rc, "stdout": out, "stderr": err}) finally: client.close()준비된 키·known_hosts를 사용하는 짧은 조회 재구성 예시다. 출력이 큰 작업에는 stdout·stderr를 함께 계속 소비하는 별도 수집기가 필요하다.
확인 기준rc=0은 해당 명령이 보고한 성공이다. 기대한 주소·인터페이스가 출력되는지까지 검증하고, 연결 끊김 뒤 결과가 불명확하면 설정 작업을 무조건 재시도하지 않는다.
결과 파일은 대상·시각·작업을 식별하게 저장한다
- Jupyter 화면에는 OS별 폴더 아래 ip_a·ip_r 같은 조회 결과 파일이 보인다. 파일이 만들어진 사실과 파일 내용이 유효한 결과라는 사실은 다르다.
- 대상 식별자, 수집 시각, 실행 명령, 종료 상태를 함께 저장하면 나중에 주소와 경로를 비교할 때 어떤 시스템의 관찰인지 복원할 수 있다.
원본 크기로 보기 ↗- Jupyter의 files/os/rocky/ 경로에 결과 파일들이 보인다.
- ip_a와 ip_r처럼 조회 작업을 구별하는 파일명이 나열된다.
확인 기준빈 파일·오류 문자열·다른 장비 결과 덮어쓰기를 구분한다. 공개 문서로 옮길 때 자격 정보와 민감 설정은 제외한다.
실습에서 확인한 동작 원리
- 자동화는 명령 전송만이 아니라 입력 검증·접속 신뢰·실행 결과 판정·근거 저장까지 연결하는 작업이다.
- CLI 프롬프트나 완료 문구 대신 종료 상태와 사후 조회로 실제 적용 결과를 확인한다.
04예제로 따라가기
- show 명령의 출력 수집과 config 모드에 들어가 여러 설정을 바꾸는 작업은 종료 프롬프트와 성공 조건이 다르다.
- 장비가 % Invalid input 같은 문자열을 돌려도 통신 라이브러리는 정상 문자열로 반환할 수 있어 결과 내용을 검사해야 한다.
- 장비 목록 중 일부가 실패하면 이미 성공한 장비까지 일괄 재적용하기 전에 대상별 변경 상태와 재실행의 멱등성을 판단한다.
05혼동하기 쉬운 점과 확인 기준
- PTY를 요청한 세션은 stderr가 별도 스트림으로 보이지 않거나 터미널 제어 문자가 섞일 수 있다. 일반 출력 파서와 대화형 장비 CLI 파서를 같은 규칙으로 처리하지 않는다.
- 대상별 성공·실패와 이전 상태를 기록하고 다시 실행할 때 필요한 작업만 적용할 수 있어야 한다.
- 파일 끝에 설정 줄을 계속 붙이는 스크립트는 반복할수록 중복되지만 현재 설정과 원하는 값을 비교해 바꾸는 작업은 수렴할 수 있다. 자동화의 속도보다 상태 전환의 정의가 먼저다.
06상세 노트 · 실습 자료
헤더 구조, 설정 예시, 수치 계산과 수업 캡처는 아래 노트에서 이어집니다.
공식 문서 · 표준
기초 개념과 동작 설명을 대조한 자료입니다. 제품 버전과 실제 설정에 따른 차이는 본문 및 원문에서 확인하세요.