-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathoxygen.expect
90 lines (73 loc) · 2.57 KB
/
oxygen.expect
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#!/usr/bin/expect
# Configuração das cores para mensagens de erro, sucesso e informações
set red "\033\[1;31m"
set green "\033\[0;32m"
set reset "\033\[0m"
# Funções para mensagens coloridas de erro, sucesso e informações
proc print_error {message} {
global red reset
puts "${red}${message}${reset}"
}
proc print_success {message} {
global green reset
puts "${green}${message}${reset}"
}
proc print_info {message} {
global reset
puts "${reset}${message}"
}
# ... e aqui começa o script Telnet
# Verificar se o número correto de argumentos foi fornecido (4)
if {[llength $argv] != 4} {
print_error "Erro: Uso incorreto. Uso: $argv0 <endereço_IP_do_host> <nome_de_usuário> <senha> <nome_do_arquivo_de_comandos>"
exit 1
}
# Obter informações de host, nome de usuário, senha e nome do arquivo de comandos dos argumentos da linha de comando (argv) e armazená-los em variáveis locais (semelhante a $1, $2, $3, $4) para uso posterior no script ($host, $usuario, $senha, $comandos_file)
set host [lindex $argv 0]
set usuario [lindex $argv 1]
set senha [lindex $argv 2]
set comandos_file [lindex $argv 3]
# Ler os comandos do arquivo especificado na linha de comando e armazená-los em uma variável local
set comandos [exec cat $comandos_file]
# Iniciar a sessão Telnet
spawn telnet $host
expect "Login: "
send "$usuario\r"
expect "Password: "
send "$senha\r"
# Aguardar o prompt após o login "User>"
expect "User>"
# Executar comando "enable" que solicita uma senha e aguardar o prompt após a autenticação "enable"
send "enable\r"
expect "Password:"
send "$senha\r"
# Aguardar o prompt após a autenticação "enable" "#"
expect "#"
send "cd onu\r"
# Dividir os comandos em uma lista de comandos (um comando por linha)
set lista_comandos [split $comandos "\n"]
# Executar comandos Telnet com pausas de X segundos entre os comandos
foreach comando $lista_comandos {
send "$comando\r"
expect {
"#"
{
# Linha esperada, continue com o próximo comando
# Adicionar uma pausa de X segundos após cada comando, se necessário
sleep 0.5
}
-re {Press any key to continue Ctrl\+c to stop} {
# Lidar com a mensagem "Press any key to continue Ctrl+c to stop"
send "\r"
expect "#"
sleep 0.5
}
}
}
send "\r"
expect "#"
# ... e aqui termina o script Telnet
# Exibir mensagem de conclusão do script
sleep 0.5
puts ""
print_success "Execução do script Telnet concluída com sucesso!"