Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Use o Junos PyEZ para acessar a Shell em dispositivos Junos

RESUMO Use o Junos PyEZ para se conectar à shell em dispositivos Junos e executar comandos.

Visão geral do StartShell

O Junos CLI tem muitos comandos de modo operacional que retornam informações semelhantes às informações devolvidas por muitos comandos de shell. Assim, o acesso à shell de nível UNIX em dispositivos Junos normalmente não é necessário. No entanto, em alguns casos, um usuário ou aplicativo pode precisar acessar o shell e executar comandos shell ou executar comandos CLI a partir da shell.

O módulo Junos PyEZ jnpr.junos.utils.start_shell define a StartShell classe, que permite que os aplicativos Junos PyEZ iniciem uma conexão SSH com um dispositivo Junos e acessem a shell. Os StartShell métodos permitem que o aplicativo execute comandos sobre a conexão e recuperar a resposta.

Os métodos e close() os StartShell open() métodos estabelecem e terminam uma conexão SSH com o dispositivo. Como resultado, se o aplicativo cliente exigir acesso apenas à shell, ele pode omitir as chamadas e close() os Device open() métodos.

No Junos PyEZ Release 2.6.7 e anterior, a StartShell instância se conecta à porta SSH padrão 22. A partir do Junos PyEZ Release 2.6.8, a StartShell instância se conecta à mesma porta que é definida na Device instância, exceto nos seguintes casos, em que a conexão shell ainda usa a porta 22:

  • Devicehost está definido para 'localhost'

  • Deviceport está definido para 830.

  • Deviceport é indefinido.

Execute comandos da Shell

O StartShell run() método executa um comando de shell e aguarda a resposta. Por padrão, o método espera por um dos prompts de shell padrão (%, #, > ou $) antes de devolver a saída de comando. Como alternativa, você pode definir o this="string" argumento para uma string específica, e o método aguarda o string ou padrão esperados antes de devolver a saída de comando.

O valor de retorno é um tuple. O primeiro item é True se o código de saída for 0 e False de outra forma. O segundo item é a saída do comando.

O exemplo a seguir se conecta a um host e executa dois comandos de modo operacional a partir da shell. O script primeiro executa o request support information comando e salva a saída em um arquivo. O script então executa o show version comando, armazena a saída na variável e, em version seguida, imprime o conteúdo da variável.

A tuple devolvida inclui o Boolean correspondente ao código de saída para o comando e a saída de comando para o show version comando. A saída neste exemplo é truncada por brevidade.

Instâncias da StartShell classe também podem ser usadas como gerentes de contexto. Neste caso, você não precisa chamar explicitamente os métodos e close() os StartShell open() métodos. Por exemplo:

Como especificar o tipo de shell

A partir do Junos PyEZ Release 2.6.4, StartShell oferece suporte ao shell_type argumento dentro de scripts remotos para especificar o tipo de shell que StartShell oferece suporte aos seguintes tipos de shell:

  • C Shell (csh)

  • Concha no estilo Bourne (cinzas)

Por padrão, StartShell as instâncias são tipo C Shell (csh). Você também pode especificar shell_type="sh" para iniciar uma concha no estilo Bourne (cinzas). Por exemplo:

Como especificar um intervalo

Você pode incluir o StartShell timeout argumento para especificar a duração do tempo em segundos que o utilitário deve esperar pela corda ou padrão esperados antes de cronometrar. Se você não especificar um tempo limite, o padrão será de 30 segundos.

A sequência esperada é o valor definido no this argumento. Se você não definir this, a string esperada é um dos prompts padrão da shell. Se, em vez disso, definir o valor this=Noneespecial, o dispositivo aguarda a duração do tempo limite antes de capturar a saída de comando, conforme descrito em Execute Comandos shell sem releitura.

Como escalonar a execução de comando

Às vezes, você pode querer executar ou loop várias chamadas para o run() método. Para ajudar a estabilizar a saída, você pode especificar o sleep argumento. O sleep argumento instrui o dispositivo a esperar pelo número especificado de segundos antes de receber dados do buffer. Você pode definir sleep como um número de ponto flutuante para precisão abaixo de um segundo.

Execute comandos de shell sem roteamento

Em certos casos, você pode precisar executar comandos de shell não revirados, como o monitor traffic comando, que exibe tráfego que se origina ou termina no Mecanismo de Roteamento local. No Junos CLI, o monitor traffic comando exibe as informações em tempo real até que o usuário envie uma sequência de teclado Ctrl+c para interromper a captura de pacotes.

Você pode executar comandos de shell sem releitura usando o StartShell run() método incluindo o argumento this=None. Quando você inclui o this=None argumento, o método aguarda até o valor de tempo limite especificado para recuperar e devolver todas as saídas de comando da shell. Neste caso, o primeiro item da tuple devolvida é True quando o resultado do comando de shell executado retorna conteúdo, e o segundo item é a saída de comando. Se você omitir o this argumento ou configurá-lo igual a uma corda ou padrão específicos, o método pode devolver a saída parcial para um comando não revirado se encontrar um prompt padrão ou o padrão de string especificado dentro da saída de comando.

O código de amostra a seguir executa o monitor traffic interface fxp0 comando, espera por 15 segundos e depois recupera e retorna a saída de comando.

Tabela de histórico de mudanças

O suporte de recursos é determinado pela plataforma e versão que você está usando. Use o Feature Explorer para determinar se um recurso é suportado em sua plataforma.

Soltar
Descrição
2.6.8
A partir do Junos PyEZ Release 2.6.8, a StartShell instância se conecta à mesma porta que é definida na Device instância, exceto quando o host está definido para localhost ou a porta é 830 ou não está definida.