Expect Scripts - Lendo arquivos e aceitando entradas do usuário

0

Como posso escrever um script "Esperar" para:

  1. itere uma lista de endereços IP e efetua login em cada um para executar comandos (como em um BASH for loop). No momento, apenas copiei / colei as poucas linhas que são o meu script Expect e coloco manualmente cada IP exclusivo de cada dispositivo - não tão eficiente, eu sei.

  2. Terá que esperar aceitar a entrada do usuário e gravá-la em uma variável (como "ler" no BASH)? Eu gostaria de escrever um script que diz algo como: "digite o endereço IP do roteador" "digite a porta no roteador que você deseja verificar" e, em seguida, irá lançar esperar, SSH para esses endereços IP e executar alguns comandos usando essa porta do roteador.

por dave 01.04.2015 / 11:39

2 respostas

1

Voltei para "Exploring Expect" e descobri que, aparentemente, se alguma instrução expect falhar, então expect verá isso como End of File (eof), e sairá e sairá do script também. Então, eu simplesmente adicionei:

expect {
{eof} {action_here}
}

E funciona.

    
por 20.05.2015 / 12:03
0

A questão é mais orientada para objetivos do que particular para as tecnoligias mencionadas, então vou abordar o problema de acordo com meu espírito e espero que ajude. Eu vou usar python.

Re: edição número 1:

Basicamente, parece que você quer analisar ip / addresses de um arquivo e executar uma seqüência de retorno e retorno esperada (como) para cada endereço IP.

Você não quer analisar os endereços IP de um script exceto - mas você quer analisar ipaddresses do arquivo com python e executar o mesmo comando expect para cada endereço IP.

Então, você precisaria escrever o comando expect com o ipaddress sendo uma variável, de forma que para cada ipaddress em seu loop, você atribua um ipaddress diferente para essa variável e execute o comando expect.

Quanto à funcionalidade 'esperar', dê uma olhada na biblioteca 'pexpect': É um módulo python que expõe seus scripts python como funcionalidade. (Veja esta resposta que contém um exemplo e links para outros documentos / exemplos: link ). Vamos detalhar um pouco:

Olhando para o exemplo no link de saída, observe que a sequência de espera começa com ""

child = pexpect.spawn ('algum comando que requer uma senha') child.expect ('Digite a senha') child.sendline ('password')

"" " Você pode facilmente substituir esse argumento de string pelo método pexpect.spawn com pexpect.spawn ('algum comando que requer uma senha que usa ipaddress como opção' + ipaddress_variable)

Então, em Python, eu apenas definiria uma função que toma como argumento a (s) parte (s) da seqüência esperada que será alterada em cada iteração do loop for e escreve a sequência esperada dentro do corpo do loop. função usando os argumentos variáveis.

Assim (este é o pseudo código):

def expect_function (ipaddress_variable):        pexpect.spawn ('algum comando que requer uma senha' + ipaddress_variable)           child.expect ('Enter Password')           child.sendline ('password')           child.expect ..... (aqui é onde você assume e faz o que você precisa fazer na máquina remota)

(Desculpe pela formatação, pré e código não fizeram o que eu esperava)

Com essa função definida, o resto é fácil.

Basta percorrer o ipaddress e chamar a função, como este código do psuedo:

para ipaddress no ipfile:       expect_function (ipaddress)

problema número dois eu também lidaria com python.

    
por 01.04.2015 / 16:42