Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Junos PyEZ를 사용하여 Junos 디바이스에 연결

요약 Junos PyEZ 애플리케이션에서 다양한 연결 방법과 프로토콜을 사용하여 Junos 디바이스 또는 연결된 콘솔 서버에 연결합니다.

Junos PyEZ는 Junos 디바이스를 관리할 수 있도록 지원하는 Python용 마이크로프레임워크입니다. Junos PyEZ는 각 디바이스를 jnpr.junos.device.Device 클래스의 인스턴스로 모델링합니다. 이 Device 클래스를 사용하면 시리얼 콘솔 연결, 텔넷을 사용하거나 SSH를 통해 NETCONF 세션을 설정하여 Junos 디바이스에 연결할 수 있습니다. 또한 Junos PyEZ는 콘솔 서버에 대한 텔넷 또는 SSH 연결을 통해 디바이스에 연결하는 것도 지원합니다. 터미널 서버라고도 하는 콘솔 서버는 디바이스의 대역 외 관리 콘솔 포트에 네트워크 연결을 제공하는 특수 디바이스입니다.

이 주제는 Junos PyEZ에서 지원하는 연결 방법에 대한 개요를 제공하고 다양한 방법을 사용하여 Junos 디바이스에 연결하는 방법을 설명합니다. Junos PyEZ 예제에서는 다양한 인증 방법을 사용하지만, 사용자 인증에 대한 자세한 내용은 Junos PyEZ 사용자 인증을 참조하십시오.

연결 방법 개요

Junos PyEZ를 사용하면 SSH를 통해 시리얼 콘솔 연결, 텔넷 또는 NETCONF 세션을 사용하여 Junos 디바이스에 연결할 수 있습니다. 디바이스의 CONSOLE 포트에 물리적으로 연결되어 있는 경우 직렬 콘솔 연결을 사용해야 합니다. 텔넷 또는 SSH를 사용하여 디바이스의 관리 인터페이스 또는 디바이스의 콘솔 포트에 연결된 콘솔 서버에 연결할 수 있습니다. 또한 Junos PyEZ는 아웃바운드 SSH 연결을 지원하며, 이 경우 Junos 디바이스가 클라이언트 관리 애플리케이션과의 연결을 시작합니다.

공장 기본 구성이 있는 신규 또는 제로화된 디바이스는 콘솔 연결을 통해 액세스해야 합니다. 따라서 Junos PyEZ를 사용하여 디바이스에 직접 연결된 경우 시리얼 콘솔 연결을 사용하거나 디바이스에 연결된 콘솔 서버를 통해 텔넷 또는 SSH를 사용하여 원격 액세스를 위해 아직 구성되지 않은 디바이스를 초기에 구성할 수 있습니다.

기본적으로 Junos PyEZ는 SSH를 사용하여 디바이스에 연결합니다. 다른 연결 유형을 지정하려면 인수 목록에 매개 변수를 Device 포함해야 mode 합니다. 디바이스에 텔넷하려면 인수를 mode='telnet' 포함합니다. 직렬 콘솔 연결을 사용하여 디바이스에 연결하려면 인수를 mode='serial' 포함합니다. 표 1 에는 Junos PyEZ 연결 방법, 특정 매개 변수에 대한 기본값, 필요한 Junos OS 구성 및 해당 연결 방법에 대한 지원이 처음 도입된 Junos PyEZ 릴리스가 요약되어 있습니다.

표 1: Junos PyEZ 연결 모드

연결 모드

인수의 mode

기본 포트

필수 Junos OS 구성

최초로 지원되는 Junos PyEZ 릴리스

SSH를 통한 NETCONF(기본값)

830

[edit system services]
netconf {
    ssh;
}

1.0.0

시리얼 콘솔 연결

직렬

/dev/ttyUSB0

2.0.0 (*nix)

2.4.0 (Windows)

Junos 디바이스에 텔넷 연결하기

텔넷

23

[edit system services]
telnet;

2.0.0

콘솔 서버를 통한 텔넷

텔넷

23

2.0.0

콘솔 서버를 통한 SSH

22

2.2.0

아웃바운드 SSH

[edit system services]
outbound-ssh {     
    ...
}

2.2.0

참고:

SSH를 통해 텔넷 또는 NETCONF를 사용하여 디바이스의 관리 인터페이스에 액세스하려면 먼저 계층 수준에서 적절한 서비스를 [edit system services] 활성화해야 합니다. 자세한 내용은 Junos PyEZ 관리형 노드 설정을 참조하십시오. 텔넷은 일반 텍스트 암호를 사용하므로 잠재적인 보안 취약성이 발생하므로 SSH를 사용하는 것이 좋습니다.

참고:

사용자 환경에 적합한 안전한 방식으로 사용자 이름 및 암호 인증 자격 증명을 얻는 것은 사용자의 책임입니다. 자격 증명을 암호화되지 않은 형식으로 저장하는 대신 스크립트를 호출할 때마다 이러한 인증 자격 증명을 묻는 메시지를 표시하는 것이 가장 좋습니다.

Junos PyEZ는 모든 연결 방법에 대해 컨텍스트 관리자(with ... as 구문) 사용을 지원합니다. 컨텍스트 관리자를 사용하면 Junos PyEZ가 자동으로 및 close() 메서드를 호출하여 open() 디바이스에 연결하고 연결을 끊습니다. 컨텍스트 관리자를 사용하지 않는 경우 응용 프로그램에서 및 close() 메서드를 명시적으로 호출 open() 해야 합니다. 컨텍스트 관리자가 연결 닫기를 자동으로 처리하고 연결을 닫지 못하면 예측할 수 없는 결과가 발생할 수 있으므로 콘솔 연결에는 컨텍스트 관리자를 사용하는 것이 좋습니다.

Junos PyEZ 연결 속성 이해

Junos 디바이스에 연결할 때 Junos PyEZ는 현재 연결에 대한 정보를 인스턴스의 속성 Device 으로 저장합니다. 표 2 에서는 사용 가능한 연결 속성을 간략하게 설명합니다.

표 2: 디바이스 속성

속성

설명

connected

연결의 현재 상태를 지정하는 부울입니다. 연결되면 반환됩니다 True .

hostname

응용 프로그램이 연결된 장치의 호스트 이름을 지정하는 문자열입니다.

master

True 애플리케이션이 연결된 라우팅 엔진이 기본 라우팅 엔진인 경우 반환되는 부울입니다.

port

연결에 사용되는 포트를 지정하는 정수 또는 문자열입니다.

re_name

애플리케이션이 연결된 라우팅 엔진 이름을 지정하는 문자열입니다.

timeout

RPC 시간 제한 값(초)을 지정하는 정수입니다.

uptime

현재 라우팅 엔진이 부팅된 이후의 시간(초)을 나타내는 정수입니다. 이 속성은 Junos PyEZ 릴리스 2.1.5부터 사용할 수 있습니다.

user

Junos 디바이스에 액세스하는 사용자를 지정하는 문자열입니다.

예를 들어 디바이스에 연결한 후 속성을 쿼리 connected 하여 연결의 현재 상태를 반환할 수 있습니다. A SessionListener 는 세션을 모니터링하고 예외를 발생시키고 속성을 False로 설정하여 전송 오류에 TransportError 응답합니다Device.connected.

다음 샘플 코드는 Junos 디바이스에 연결한 후와 세션을 닫은 후 다시 속성 값을 connected 인쇄합니다.

프로그램을 connected 실행하면 응용 프로그램이 장치에 연결되어 있는 동안 속성이 반환 True 되고 연결이 닫힌 후에 반환됩니다 False .

SSH를 사용하여 디바이스에 연결

Junos PyEZ Device 클래스는 SSH를 사용하여 Junos 디바이스에 연결할 수 있도록 지원합니다. 디바이스의 관리 인터페이스로 SSH를 통해 NETCONF 세션을 설정하거나 디바이스의 콘솔 포트에 직접 연결된 콘솔 서버와 SSH 연결을 설정할 수 있습니다. SSH 서버는 Junos PyEZ 사용자 인증에 설명된 대로 표준 SSH 인증 메커니즘을 사용하여 사용자를 인증할 수 있어야 합니다. SSH를 통해 NETCONF 세션을 설정하려면 Junos PyEZ 관리형 노드 설정에 설명된 요구 사항도 충족해야 합니다.

Junos PyEZ는 ~/.ssh/config에 있는 경우 기본 SSH 구성 파일을 자동으로 쿼리합니다. SSH를 사용하여 Junos 디바이스 또는 디바이스에 연결된 콘솔 서버에 연결할 때 Junos PyEZ는 먼저 SSH 공개 키 기반 인증을 시도한 다음 암호 기반 인증을 시도합니다. 암호 기반 인증을 사용하는 경우 제공된 암호가 장치 암호로 사용됩니다. SSH 키가 사용 중일 때 제공된 암호는 개인 키의 잠금을 해제하기 위한 암호로 사용됩니다. SSH 개인 키에 빈 암호가 있는 경우 암호가 필요하지 않습니다. 그러나 빈 암호를 사용하는 SSH 개인 키는 권장되지 않습니다.

Junos 디바이스와 SSH를 통해 NETCONF 세션을 설정하고 Python 3을 사용하여 Junos PyEZ 애플리케이션에서 디바이스 팩트를 인쇄하려면 다음을 수행합니다.

  1. Device 작업에 필요한 클래스와 다른 모듈 또는 개체를 가져옵니다.
  2. 디바이스 인스턴스를 생성하고 호스트 이름, 인증에 필요한 모든 파라미터 및 선택적 파라미터를 제공합니다.
  3. 예를 들어 메서드를 호출하여 open() 장치에 연결합니다.
  4. 장치 정보를 인쇄합니다.
  5. 필요한 작업을 수행한 후 장치에 대한 연결을 닫습니다.

전체 샘플 프로그램은 다음과 같습니다.

또는 디바이스에 연결할 때 컨텍스트 관리자를 사용할 수 있으며, 이 관리자는 및 close() 메서드를 자동으로 호출합니다open(). 예를 들어:

또한 Junos PyEZ를 사용하면 클라이언트가 콘솔 서버에 대한 SSH 연결을 통해 Junos 디바이스에 연결할 수 있습니다. 이 경우 인수 목록에 및 cs_passwd 인수 Device 를 포함하여 cs_user 콘솔 서버에 대한 로그인 자격 증명을 지정해야 합니다. SSH 키를 사용 중인 경우 개인 키에 cs_passwd 대한 암호가 포함된 변수에 인수를 설정합니다.

콘솔 서버는 직렬 연결을 통해 Junos 디바이스에 연결되며, 속도가 느려질 수 있습니다. 콘솔 서버를 통한 Junos PyEZ 연결의 기본 연결 시간 제한 값은 0.5초입니다. 따라서 클라이언트 응용 프로그램이 연결을 설정할 수 있는 충분한 시간을 허용하기 위해 인수를 포함하여 Device timeout=seconds 연결 제한 시간 간격을 늘려야 할 수 있습니다.

다음 Python 3 예제에서는 콘솔 서버로 인증한 다음 Junos 디바이스로 인증합니다. 클라이언트가 연결을 설정할 수 있는 충분한 시간을 가질 수 있도록 연결 시간 제한은 6초로 설정됩니다.

Junos PyEZ는 ~/.ssh/config에 있는 경우 기본 SSH 구성 파일을 자동으로 쿼리합니다. 그러나 인수 목록에 매개 변수를 Device 포함하여 ssh_config 디바이스 인스턴스를 생성할 때 다른 SSH 구성 파일을 지정할 수 있습니다. 예를 들어:

Junos PyEZ는 또한 ProxyCommand를 지원하므로 netcat을 지원하는 중간 호스트를 통해 대상 디바이스에 액세스할 수 있습니다. 이는 중간 호스트를 통해서만 대상 디바이스에 로그인할 수 있는 경우에 유용합니다.

ProxyCommand를 구성하려면 SSH 구성 파일에 적절한 정보를 추가합니다. 예를 들어:

아웃바운드 SSH를 사용하여 디바이스에 연결

클라이언트가 연결을 시작하려고 시도할 경우(예: 디바이스가 방화벽 뒤에 있는 경우) 차단되는 클라이언트 관리 애플리케이션과의 TCP/IP 연결을 시작하도록 Junos 디바이스를 구성할 수 있습니다. 구성은 outbound-ssh 디바이스가 클라이언트 관리 애플리케이션과 TCP/IP 연결을 생성하고 디바이스의 ID를 전달하도록 지시합니다. 연결이 설정되면 관리 애플리케이션이 클라이언트 역할을 하고 SSH 시퀀스를 시작하며, Junos 디바이스가 서버 역할을 하고 클라이언트를 인증합니다.

참고:

Junos 디바이스에서 아웃바운드 SSH를 구성하고 커밋하면 디바이스는 커밋된 구성을 기반으로 아웃바운드 SSH 연결을 시작합니다. 디바이스는 성공할 때까지 이 연결을 반복적으로 시도합니다. 디바이스와 클라이언트 관리 응용 프로그램 간의 연결이 끊어지면 디바이스는 성공할 때까지 새 아웃바운드 SSH 연결을 다시 생성하려고 시도합니다. 이 연결은 아웃바운드 SSH 구성이 삭제되거나 비활성화될 때까지 유지됩니다.

아웃바운드 SSH 연결을 위해 Junos 디바이스를 구성하려면 계층 수준에서 문을 [edit system services] 포함합니다outbound-ssh. 다음 예제에서 Junos 디바이스는 포트 2200의 198.51.100.101에 있는 호스트와의 연결을 시작하려고 시도합니다.

아웃바운드 SSH를 사용하여 Junos 디바이스와의 연결을 설정하기 위해 Junos PyEZ 애플리케이션은 생성자의 인수를 sock_fd 기존 소켓의 파일 설명자와 동일하게 설정하고 인수를 host 생략하거나 로 NoneDevice 설정합니다.

다음 Junos PyEZ 예제는 Junos 디바이스에서 수신되는 SSH 세션에 대해 구성된 TCP 포트에서 수신 대기합니다. 애플리케이션은 들어오는 연결을 수락하고 인수 값에 sock_fd 사용되는 해당 연결에 대한 소켓의 파일 설명자를 검색합니다. 클라이언트 애플리케이션은 디바이스와의 SSH 연결을 설정하고, 디바이스 팩트를 수집 및 인쇄하고, 디바이스와의 연결을 끊고, 추가 연결을 기다립니다.

Junos 디바이스에서 아웃바운드 SSH를 구성하는 방법에 대한 자세한 내용은 아웃바운드 SSH 서비스 구성을 참조하십시오.

텔넷을 사용하여 장치에 연결

Junos PyEZ Device 클래스는 네트워크 디바이스에 대한 암호화되지 않은 액세스를 제공하는 텔넷을 사용하여 Junos 디바이스에 대한 연결을 지원합니다. 디바이스의 관리 인터페이스 또는 디바이스의 CONSOLE 포트에 직접 연결된 콘솔 서버에 텔넷을 연결할 수 있습니다. 관리 인터페이스에 액세스해야 하는 모든 디바이스의 계층 수준에서 텔넷 서비스를 [edit system services] 구성해야 합니다. 콘솔 서버를 통해 디바이스에 액세스하면 원격 액세스를 위해 아직 구성되지 않은 새 디바이스 또는 제로화된 디바이스를 초기에 구성할 수 있습니다.

Junos PyEZ를 사용하여 Junos 디바이스에 텔넷하려면 인수 목록에 을(를) 포함 mode='telnet' Device 시켜야 하며, 선택적으로 포트를 지정하는 매개 변수를 포함해야 port 합니다. 매개 변수를 지정 mode='telnet' 하지만 생략하면 portport 값은 기본적으로 23으로 설정됩니다. 애플리케이션이 콘솔 서버를 통해 연결되면 콘솔 서버가 Junos 디바이스에 연결하는 포트를 지정합니다.

Junos PyEZ를 사용하여 Junos 디바이스에 텔넷하고 Python 3을 사용하는 Junos PyEZ 애플리케이션에서 디바이스 팩트를 인쇄하려면 다음을 수행합니다.

  1. Device 작업에 필요한 클래스와 다른 모듈 또는 개체를 가져옵니다.
  2. 인수를 사용하여 mode='telnet' 디바이스 인스턴스를 생성하고, 기본값과 다른 경우 연결 포트를 지정하고, 호스트 이름, 인증에 필요한 모든 파라미터 및 선택적 파라미터를 제공합니다.
  3. 메서드를 호출하여 open() 디바이스에 연결합니다.
  4. 장치 정보를 인쇄합니다.
  5. 필요한 작업을 수행한 후 장치에 대한 연결을 닫습니다.

전체 샘플 프로그램은 다음과 같습니다.

또는 디바이스에 연결할 때 연결 열기 및 닫기를 처리하는 컨텍스트 관리자를 사용할 수 있습니다. 예를 들어:

경우에 따라 배너 메시지를 내보내는 콘솔 서버에 연결할 때 로그인 프롬프트에 도달하려면 메시지 다음에 Enter 키를 눌러야 할 수 있습니다. Junos PyEZ 애플리케이션이 배너 메시지 후 사용자가 Enter 키를 눌러야 하는 콘솔 서버와의 텔넷 세션을 여는 경우, 애플리케이션이 로그인 프롬프트를 수신하지 못하여 연결이 중단될 수 있습니다.

Junos PyEZ 릴리스 2.6.2부터 Junos PyEZ는 콘솔 서버 배너를 자동으로 처리합니다. Junos PyEZ 릴리스 2.1.0부터 2.6.1까지 Junos PyEZ 애플리케이션은 배너 메시지를 내보내는 콘솔 서버에 텔넷하기 위해 인수 목록에 포함할 console_has_banner=True Device 수 있습니다.

인수를 console_has_banner=True 포함했는데 응용 프로그램이 초기 연결 시 로그인 프롬프트를 수신하지 않으면 응용 프로그램은 5초 동안 기다린 다음 줄 바꿈(\n) 문자를 내보내 콘솔 서버가 로그인 프롬프트를 발행하도록 합니다. 인수를 생략하고 연결이 중단되면 애플리케이션은 대신 RPC를 <close-session/> 내보내 연결을 종료합니다.

직렬 콘솔 연결을 사용하여 장치에 연결Connect to a device using a serial console connection

Junos PyEZ Device 클래스를 사용하면 시리얼 콘솔 연결을 사용하여 Junos 디바이스에 연결할 수 있으며, 이는 원격 액세스를 위해 아직 구성되지 않은 신규 또는 제로화된 디바이스를 처음 구성해야 할 때 유용합니다. 이 연결 방법을 사용하려면 CONSOLE 포트를 통해 디바이스에 물리적으로 연결되어 있어야 합니다. 디바이스의 CONSOLE 포트에 연결하는 방법에 대한 자세한 내용은 해당 디바이스의 하드웨어 설명서를 참조하십시오.

참고:

Junos PyEZ는 시리얼 콘솔 연결을 위한 컨텍스트 관리자 사용을 지원합니다. 콘솔 연결에는 컨텍스트 관리자가 연결 열기 및 닫기를 자동으로 처리하므로 컨텍스트 관리자를 사용하는 것이 좋습니다. 연결을 닫지 않으면 예기치 않은 결과가 발생할 수 있습니다.

Junos PyEZ를 사용하여 시리얼 콘솔 연결을 통해 Junos 디바이스에 연결하려면 인수 목록에 을(를) 포함 mode='serial' Device 시켜야 하며, 선택적으로 포트를 지정하는 매개 변수를 포함해야 port 합니다. 매개 변수를 지정 mode='serial' 하지만 생략하면 portport /dev/ttyUSB0기본값은 입니다.

시리얼 콘솔 연결을 사용하여 Junos 디바이스에 연결하고 Python 3을 사용하는 Junos PyEZ 애플리케이션의 디바이스에서 구성을 로드 및 커밋하려면 다음을 수행합니다.

  1. Device 작업에 필요한 클래스와 다른 모듈 또는 개체를 가져옵니다.
  2. 인수를 사용하여 mode='serial' 디바이스 인스턴스를 생성하고, 기본값과 다른 경우 연결 포트를 지정하고, 인증에 필요한 모든 파라미터와 선택적 파라미터를 제공합니다.
    참고:

    Junos OS를 실행하는 모든 플랫폼에는 암호 없이 기본적으로 구성된 루트 사용자만 있습니다. 새 장치 또는 비워진 장치의 경우 매개 변수를 사용하고 user='root' 생략합니다 passwd .

  3. 디바이스에서 구성을 로드하고 커밋합니다.
  4. 필요한 오류 처리를 포함합니다.

전체 샘플 프로그램은 다음과 같습니다.