Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Usar Junos PyEZ para acceder al shell en dispositivos Junos

RESUMEN Utilice Junos PyEZ para conectarse al shell en dispositivos Junos y ejecutar comandos.

Descripción general de StartShell

La CLI de Junos tiene muchos comandos de modo operativo que devuelven información similar a la que devuelven muchos comandos de shell. Por lo tanto, el acceso al shell de nivel UNIX en dispositivos Junos generalmente no es necesario. Sin embargo, en algunos casos, es posible que un usuario o una aplicación necesiten acceder al shell y ejecutar comandos de shell o ejecutar comandos de CLI desde el shell.

El módulo Junos PyEZ jnpr.junos.utils.start_shell define la clase, que permite a las StartShell aplicaciones de Junos PyEZ iniciar una conexión SSH a un dispositivo Junos y acceder al shell. Los StartShell métodos permiten que la aplicación ejecute comandos a través de la conexión y recupere la respuesta.

Los StartShell open() métodos y close() establecen y terminan una conexión SSH con el dispositivo. Como resultado, si la aplicación cliente requiere acceso solo al shell, puede omitir las llamadas a los Device open() métodos y close() .

En Junos PyEZ versión 2.6.7 y anteriores, la StartShell instancia se conecta al puerto SSH predeterminado 22. A partir de Junos PyEZ versión 2.6.8, la StartShell instancia se conecta al mismo puerto definido en la Device instancia, excepto en los casos siguientes, en los que la conexión de shell todavía utiliza el puerto 22:

  • Devicehost está configurado en 'localhost'

  • Deviceport se establece en 830.

  • Deviceport no está definido.

Ejecutar comandos desde el Shell

El StartShell run() método ejecuta un comando de shell y espera la respuesta. De forma predeterminada, el método espera a uno de los indicadores de shell predeterminados (%, #, > o $) antes de devolver el resultado del comando. Como alternativa, puede establecer el this="string" argumento en una cadena específica y el método espera la cadena o el patrón esperados antes de devolver el resultado del comando.

El valor devuelto es una tupla. El primer elemento es True si el código de salida es 0 y False de lo contrario. El segundo elemento es la salida del comando.

En el ejemplo siguiente se conecta a un host y se ejecutan dos comandos de modo operativo desde el shell. El script primero ejecuta el request support information comando y guarda el resultado en un archivo. A continuación, el script ejecuta el show version comando, almacena el resultado en la version variable y, a continuación, imprime el contenido de la variable.

La tupla devuelta incluye el valor booleano correspondiente al código de salida del comando y la salida del comando para el show version comando. El resultado de este ejemplo se trunca por brevedad.

Las instancias de la StartShell clase también se pueden utilizar como administradores de contexto. En este caso, no es necesario llamar explícitamente a los StartShell open() métodos y close() . Por ejemplo:

Cómo especificar el tipo de shell

A partir de Junos PyEZ versión 2.6.4, StartShell admite el shell_type argumento dentro de scripts remotos para especificar el tipo de shell. StartShell Admite los siguientes tipos de shell:

  • C Shell (csh)

  • Concha estilo Bourne (fresno)

De forma predeterminada, StartShell las instancias son de tipo C Shell (csh). También puede especificar shell_type="sh" que se inicie un shell de estilo Bourne (ash). Por ejemplo:

Cómo especificar un tiempo de espera

Puede incluir el StartShell timeout argumento para especificar la duración del tiempo en segundos que la utilidad debe esperar a la cadena o patrón esperado antes de agotar el tiempo de espera. Si no especifica un tiempo de espera, el valor predeterminado es 30 segundos.

La cadena esperada es el valor definido en el this argumento. Si no define this, la cadena esperada es uno de los mensajes de shell predeterminados. Si, en cambio, establece el valor this=Noneespecial, el dispositivo espera a que se agote el tiempo de espera antes de capturar la salida del comando, tal como se describe en Ejecutar comandos de shell que no se devuelven.

Cómo escalonar la ejecución de comandos

A veces, es posible que desee ejecutar o realizar varias llamadas en bucle al run() método. Para ayudar a estabilizar el resultado, puede especificar el sleep argumento. El sleep argumento indica al dispositivo que espere el número de segundos especificado antes de recibir datos del búfer. Puede definirse sleep como un número de coma flotante para una precisión de subsegundo.

Ejecutar comandos de shell que no retornan

En algunos casos, es posible que deba ejecutar comandos de shell que no se devuelven, como el comando, que muestra el monitor traffic tráfico que se origina o termina en el motor de enrutamiento local. En la CLI de Junos, el monitor traffic comando muestra la información en tiempo real hasta que el usuario envía una secuencia de teclado Ctrl + c para detener la captura de paquetes.

Puede ejecutar comandos de shell que no devuelvan utilizando el StartShell run() método incluyendo el argumento this=None. Cuando se incluye el this=None argumento, el método espera hasta el valor de tiempo de espera especificado para recuperar y devolver todos los resultados del comando del shell. En este caso, el primer elemento de la tupla devuelta es True cuando el resultado del comando de shell ejecutado devuelve contenido, y el segundo elemento es la salida del comando. Si omite el this argumento o lo establece igual a una cadena o patrón específico, el método puede devolver un resultado parcial para un comando que no devuelve si encuentra un indicador predeterminado o el patrón de cadena especificado dentro de la salida del comando.

El código de ejemplo siguiente ejecuta el monitor traffic interface fxp0 comando, espera 15 segundos y, a continuación, recupera y devuelve el resultado del comando.

Tabla de historial de cambios

La compatibilidad con las funciones viene determinada por la plataforma y la versión que esté utilizando. Utilice el Explorador de características para determinar si una característica es compatible con su plataforma.

Lanzamiento
Descripción
2.6.8
A partir de Junos PyEZ versión 2.6.8, la StartShell instancia se conecta al mismo puerto definido en la Device instancia, excepto cuando el host está establecido como localhost o el puerto es 830 o indefinido.