Connexion automatique à un switch avec expect

Résolu/Fermé
Guizmo.7 - 17 févr. 2009 à 11:28
 Guizmo.7 - 17 févr. 2009 à 14:56
Bonjour,

J'essaye de créer un programme sous linux qui va se connecter à un switch et récupérer des infos de manière automatique grace à expect, send et spawn.
Mais il y a certainement quelques concepts qui m'échappent car à la fin du programme, je ne retrouve pas la main.
Voici le programme :

#!/usr/bin/expect -f
set timeout -1
set telnet_ip [lindex $argv 0]
set login $env(login)
set password $env(password)
set send_slow {1 .1}
spawn $env(SHELL)
match_max 100000
sleep .1
send "telnet $telnet_ip\r"
sleep 1
send "$login\r"
expect "Please Enter Password: "
sleep .1
send "$password\r"
expect "*# "
sleep .1
send "term length 1000\r"
expect "*# "
sleep .1
send "show int config\r"
expect "*# "
sleep .1
send "show int brief\r"
expect "*# "
sleep .1
send "show system-information\r"
expect "*# "
sleep .1
send "show run\r"
expect "*# "
sleep .1
send "logo\r"
expect "Do you want to log out"
sleep .1
send "y\r"
sleep .1
send "exit"
expect eof
exit

Et voila la trace (juste la fin) :

Connection closed by foreign host.
prompt$

je suis coincé :(
je ne peux sortir qu'avec un control-C
exemple :
^Cprompt$
prompt$
prompt$ et voila

Mais comme vous pouvez le voir, je suis coincé à la fin du script. je dois faire control-C pour quitter le processus et revenir sur mon bash.

Avez-vous déjà eu ce problème ? D'où cela peut-il bien venir ?

Merci d'avance.
A voir également:

1 réponse

dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
17 févr. 2009 à 12:22
hello
c'est un Cisco ?
ne faut-il pas envoyer enable après le premier password ?
un bout d'un ancien script:

set switch $env(SWITCH)
log_file $LOG
spawn telnet $switch
expect "Password: "
send "$password\r"
set prompt "${switch}>"
expect -re $prompt
send "enable\r"
expect "Password: "
send "$password\r"
set prompt "${switch}#"
expect -re $prompt
send "show mac-address-table\r"
...
0
Merci de ta réponse dubcek.
C'est un HP et j'ai déjà testé donc je suis sur des commandes lancés.

En fait j'ai résolu mon probleme tout seul et pour qu'il puisse servir à d'autres voila la solution :
Il suffisait d'enlever 'expect eof' avant le dernier exit car il attendait la fin de fichier (End Of File) sans jamais l'avoir.

Voila, bon courage à vous !
0