Exportação de configuração do roteador via script de espera - nome de usuário no ativar?

2

Estou trabalhando em um script Expect para obter informações de configuração de meus hosts.

O problema é que alguns dos meus hosts (quando o comando enable é digitado) solicitará login e senha. Este é principalmente o kit HP mais antigo, mas também o encontrei noutro local.

Uma instrução de expectativa aninhada como a seguinte faria se fosse sintaxe legal. Como posso fazer isso acontecer?

expect {
  default { send_user "\nEnable Mode Failed - Check Password\n"; exit 1 }
  "*\#" {}
   "*>" {
    send "enable\n"
    expect{
        "Login" {
            send "$username\n"
        }
        default {}
    }
    expect "*assword"
    send "$enablepassword\n"
    expect "*\#"
 }
}

Eu sei que tenho a sintaxe apenas um pouco fora - eu vi muitas referências que descrevem o uso de expectativas aninhadas - mas para a vida de mim eu não consigo entender.

    
por Tim Brigham 10.12.2013 / 22:56

2 respostas

1

Você pode escrever isso assim:

exp_internal 1
expect {
    default { send_user "\nEnable Mode Failed - Check Password\n"; exit 1 }
    "*>" {
        send "enable\r"
        expect{
            "Login" {
                send "$username\r"
                exp_continue
            }
            "*assword" {
                send "$enablepassword\r"
            }
        }
        # Now, look back to the outer expect to continue expecting the "#" prompt
        exp_continue
    }
    "*#"
}
  • use exp_internal 1 para ativar a depuração
  • finaliza os comandos send com \r (o retorno de carro está "pressionando enter")
  • exp_continue fazer um loop dentro do contendo expect para continuar procurando outros padrões.
por 11.12.2013 / 01:48
0

Com muitos agradecimentos a Glenn, tenho um script que me permitirá obter informações de qualquer um dos meus vários dispositivos Cisco ou HP.

#!/usr/bin/expect -f   
set hostname [lindex $argv 0];
set username [lindex $argv 1];
set password [lindex $argv 2];
set enablepassword [lindex $argv 3];
spawn ssh -o StrictHostKeyChecking=no $username\@$hostname
expect {
    timeout { send_user "\nTimeout Exceeded - Check Host\n"; exit 1 }
    eof { send_user "\nSSH Connection To $hostname Failed\n"; exit 1 }
    "*\#" {}
    "*assword:" {
    send "$password\n"
    }
}
# This allows for handling any of the various HP login screens. 
sleep 5
send " "
sleep 5
send "3\n"
sleep 5        
expect {
    "*>" {
        send "enable\n"
        expect {
            "*ogin" {
                send "$username\n"
            }
        }
        expect {
            "*assword" {
                send "$enablepassword\n"
                exp_continue
            }
            exp_continue
        }
    }
    "*\#" {}
    default { send_user "\nEnable Mode Failed - Check Password\n"; exit 1 }
    }
# Disable paging. This is both the HP and Cisco statements.
send "terminal length 0\n"
send "no page\n"
expect "*\#"
log_file -noappend ./$hostname
send "show run\n"
expect "#\n"
log_file


send "end\n"
expect "\#"
expect "\#"
send "exit\n"
expect ":~\$"
exit
    
por 11.12.2013 / 17:48