Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

이벤트 스크립트에서 RPC 및 운영 모드 명령을 사용하는 방법

대부분의 Junos OS 운영 모드 명령은 XML과 동등합니다. 이벤트 스크립트는 RPC( Remote Procedure Call ) 프로토콜을 사용하여 로컬 또는 원격 디바이스에서 이러한 XML 명령을 실행할 수 있습니다. XML과 동등한 모든 운영 모드 명령은 Junos XML API 운영 개발자 참조에 나열됩니다.

SLAX 및 XSLT 스크립트는 각각 확장 기능 또는 기능을 사용하여 jcs:invoke() 로컬 또는 jcs:execute() 원격 장치에서 RPC를 실행합니다. Python 스크립트에서 RPC는 Junos PyEZ API 를 사용하여 쉽게 실행할 수 있습니다. Junos PyEZ Device 클래스의 각 인스턴스에는 rpc Junos XML API를 통해 사용 가능한 모든 RPC를 실행할 수 있는 속성이 있습니다. 로컬 또는 원격 디바이스로 세션을 설정한 후 디바이스 인스턴스에 속성 및 RPC 메소드 이름을 추가하여 rpc RPC를 실행할 수 있습니다. 반환 값은 태그의 <rpc-reply> 첫 번째 요소에서 시작하는 XML 객체입니다.

다음 섹션에서는 RPC 및 운영 모드 명령어의 사용을 이벤트 스크립트에 자세히 설명합니다.

로컬 디바이스에서 RPC 실행

로컬 장치에서 RPC를 실행하기 위해 SLAX 또는 XSLT 이벤트 스크립트에 RPC를 가변 선언에 포함시키고 RPC 변수를 포함한 확장 기능을 인수로 호출 jcs:invoke() 합니다. 다음 스니펫은 로컬 디바이스에서 RPC를 호출합니다.

XSLT 구문

SLAX 구문

Python 이벤트 스크립트에서 로컬 디바이스에서 RPC를 실행하고 빈 인수 목록을 사용하여 인스턴스를 생성 Device 하고 속성과 RPC 메소드 이름과 인수 목록을 디바이스 인스턴스에 추가 rpc 합니다.

Python 구문

참고:

빈 인수 목록을 사용하여 로컬 디바이스에 연결하는 인스턴스를 만들 Device 면 Junos OS는 계층 수준에서 구성된 [edit event-options event-script file filename python-script-user] 사용자의 액세스 권한을 사용합니다. 명령문 python-script-user 이 생략된 경우, Junos OS는 일반적이고 취약하지 않은 사용자 및 그룹의 nobody액세스 권한을 사용합니다.

원격 디바이스에서 RPC 실행

원격 장치에서 RPC를 실행하기 위해 SLAX 또는 XSLT 이벤트 스크립트에서 먼저 RPC를 가변 선언에 포함시키고, 원격 장비에 연결하는 데 필요한 인수를 사용하여 확장 기능을 사용하여 jcs:open() 연결 핸들을 만듭니다. 확장 기능을 호출 jcs:execute() 하고 연결 핸들과 RPC 변수를 인수로 포함합니다. 예를 들어:

XSLT 구문

SLAX 구문

Python 이벤트 스크립트에서 원격 디바이스에서 RPC를 실행하려면 먼저 원격 디바이스에 연결하는 데 필요한 인수를 사용하는 인스턴스 Device 를 만듭니다. 그런 다음 디바이스 인스턴스에 속성과 RPC 메소드 이름 및 인수 목록을 추가하여 rpc RPC를 실행합니다.

Python 구문

참고:

Junos OS는 계층 수준에서 명령문에 대해 다른 사용자가 구성 python-script-user 되더라도 인수 목록에 지정된 Device() 사용자의 액세스 권한을 사용하여 원격 장비에서 [edit event-options event-script file filename] 작업을 연결하고 실행합니다.

원격 연결 세부 정보를 이벤트 스크립트에 직접 추가하지 않도록 하려면 계층 수준에서 원격 디바이스에서 [edit event-options event-script file filename remote-execution] RPC를 실행하는 각 이벤트 스크립트에 대한 원격 실행 세부 정보를 지정할 수 있습니다. 모든 정보를 단일 위치에서 이용할 수 있고 패스프레이즈가 구성에서 암호화되기 때문에 이벤트 스크립트가 아닌 원격 실행 세부 정보를 구성에 추가하는 것이 좋습니다.

RPC가 실행되는 각 원격 디바이스에 대해 디바이스 호스트 이름과 해당 사용자 이름 및 패스프레이즈를 구성합니다.

이벤트 세부 정보 외에도 원격 호스트 이름 및 해당 사용자 이름 및 패스프레이즈가 이벤트 정책에 의해 실행될 때 이벤트 스크립트에 대한 입력으로 전달됩니다. 이벤트 스크립트에 전달되는 세부 정보에 대한 자세한 내용은 이벤트 스크립트의 이벤트 및 원격 실행 세부 정보 사용을 참조하십시오.

이벤트 스크립트는 원격 호스트와의 연결을 생성하는 데 사용되는 기능의 인수 목록에서 원격 실행 세부 정보를 참조합니다. 연결이 설정되면 스크립트는 해당 디바이스에서 RPC를 실행할 수 있습니다.

Python 이벤트 스크립트에서는 Junos PyEZ 인스턴스의 인수 목록에서 원격 실행 세부 정보를 참조합니다 Device() . 다음 코드는 해당 이벤트 스크립트에 대해 구성된 모든 호스트에 대해 원격 실행 세부 정보를 반복하며 각 호스트에 동일한 RPC를 연결하고 실행합니다.

Python 구문

SLAX 또는 XSLT 스크립트에서 기능을 사용하여 jcs:open() 원격 호스트에 대한 연결을 생성하고 인수 목록에서 원격 실행 세부 정보를 참조합니다. 예를 들어:

XSLT 구문

SLAX 구문

원격 디바이스에서 RPC를 실행하려면 SSH 세션이 설정되어야 합니다. 스크립트가 연결을 설정하려면, 스크립트가 실행될 로컬 장비의 원격 장비에 대한 SSH 호스트 키 정보를 구성하거나, 원격 장비에 대한 SSH 호스트 키 정보는 스크립트를 실행하는 사용자의 알려진 호스트 파일에 있어야 합니다. RPC가 실행되는 각 원격 디바이스의 경우 다음 방법 중 하나를 사용하여 SSH 호스트 키 정보를 구성합니다.

  • 로컬 디바이스에서 SSH 알려진 호스트를 구성하려면 명령문을 포함하고 host 구성의 계층 수준에서 원격 장비 [edit security ssh-known-hosts] 에 대한 호스트 이름 및 호스트 키 옵션을 지정합니다.

  • SSH 호스트 키 정보를 수동으로 검색하려면 구성 모드 명령을 실행 set security ssh-known-hosts fetch-from-server hostname 하여 Junos OS가 원격 디바이스에 연결하고 키를 추가하도록 지시합니다.

  • 파일에서 SSH 호스트 키 정보를 수동으로 임포트하려면 구성 모드 명령을 사용하고 set security ssh-known- hosts load-key-file filename 알려진 호스트 파일을 지정합니다.

  • 또는 스크립트를 실행하는 사용자가 로컬 장치, 원격 장비에 SSH에 로그인한 다음 사용자의 알려진 호스트 파일에 추가된 호스트 키를 수동으로 수락할 수 있습니다. 다음 예에서는 루트가 Router1에 로그인됩니다. 라우터2에서 원격 RPC를 실행하기 위해 루트는 운영 모드 명령을 발행 ssh router2 하고 키를 수동으로 수락함으로써 라우터2의 호스트 키를 추가합니다.

필요한 SSH 호스트 키를 구성하고 원격 장비에 대한 연결 핸들을 얻은 후 이벤트 스크립트는 해당 원격 디바이스의 확장 기능을 사용하여 RPC를 jcs:execute() 실행할 수 있습니다.

명령용 RPC 태그 표시

디바이스의 CLI에서 운영 모드 명령에 대한 RPC XML 태그를 표시할 수 있습니다. 명령에 대한 RPC XML 태그를 표시하려면 파이프 기호(|)를 따라 입력 display xml rpc 합니다.

다음 예제에서는 명령에 대한 RPC 태그를 show route 표시합니다.

SLAX 및 XSLT 스크립트는 RPC XML 태그를 사용하여 RPC를 실행할 수 있습니다. Python 스크립트는 RPC 태그와 명령 옵션을 Python에 적합한 형식으로 변환해야 합니다. JUNOS PyEZ를 사용하여 RPC를 실행하고 해당 Python 메소드 및 메소드 인수에 RPC 태그를 매핑하는 방법에 대한 자세한 내용은 Junos PyEZ를 사용하여 Junos OS를 실행하는 장치에서 RPC를 실행하는 것을 참조하십시오.

이벤트 스크립트에서 운영 모드 명령 사용

일부 운영 모드 명령에는 XML 등가물이 없습니다. SLAX 및 XSLT 스크립트는 요소를 사용하여 <command> XML에 해당되지 않는 명령을 실행할 수 있습니다. Python 스크립트는 클래스에서 정의된 Device Junos PyEZ cli() 메소드를 사용하여 이러한 명령을 실행할 수 있습니다.

명령이 Junos XML API 운영 개발자 참조에 나열되지 않으면 명령어에 동등한 XML이 없습니다. 명령이 XML과 동등한지 여부를 결정하는 또 다른 방법은 명령 뒤에 있는 명령을 발행하는 | display xml 것입니다.

출력에 , <cli>, 등의 태그 요소<output>만 포함하며 <banner>명령어에 XML과 동등한 요소가 없을 수 있습니다. 다음 예에서 출력은 명령어에 동등한 XML이 없음을 show host 나타냅니다.

참고:

XML과 동등한 일부 명령의 경우, 파이프 명령 | display xml 의 출력은 해당 기능이 구성되지 않았기 때문에 이 <cli><banner><output>의 태그 요소를 포함하지 않습니다. 예를 들어 명령 show services cos statistics forwarding-class 어는 응답 태그에서 <service-cos-forwarding-class-statistics> 출력을 반환하는 XML 동급을 가지고 있지만, 컨피규레이션이 계층 수준에 있는 어떤 명령문 [edit class-of-service] 도 포함하지 않으면 명령어에 표시할 실제 데이터가 show services cos statistics forwarding-class | display xml 없습니다. 출력은 이와 유사합니다.

이러한 이유로 Junos XML API 운영 개발자 참조 의 정보는 일반적으로 더 안정적입니다.

SLAX 및 XSLT 이벤트 스크립트는 XML과 동등한 명령어 없이 실행할 수 있습니다. <command><xsl:value-of>다음 코드 조각에 표시된 대로 스크립트의 , 및 <output> 요소를 사용합니다. 이 스니펫은 확장되어 예: Op 스크립트를 사용하여 DNS 호스트 이름 정보를 표시합니다.

Python 이벤트 스크립트는 Junos PyEZ API를 사용하여 XML에 해당하지 않는 명령을 실행할 수 있습니다. cli() 클래스에서 Device 정의된 방법은 작업 모드 명령을 실행하고 출력을 텍스트 형식으로 반환합니다. 예를 들어:

Junos OS XML 요소로 형식화된 출력을 반환하도록 지정할 format='xml' 수도 있습니다. Junos PyEZ cli 방법에 대한 자세한 내용은 http://junos-pyez.readthedocs.org/en/latest/_modules/jnpr/junos/device.html#Device.cli 를 참조하십시오.