Connexion automatique à un switch avec expect

Résolu
Guizmo.7 -  
 Guizmo.7 -
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 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
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
Guizmo.7
 
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