Comment s'attendre à délai d'attente lorsque vous essayez de vous connecter à une session ssh il a engendré?
Je suis en train d'écrire un script bash qui utilise attendre pour se connecter à un tas de Cisco Asa (ils ne supportent pas de certificat de connexion, et donc, s'attendre), apporte une modification à la configuration et puis se déconnecte.
J'aimerais que le script pour passer à la prochaine ASA s'il est impossible de se connecter.
Voici le script:
#!/bin/bash
# Scriptname: set-mtu
for asa in $(cat asa-list-temp)
do
/usr/bin/expect << EndExpect
spawn ssh admin_15@$asa
expect "assword:"
send "pa$$w0rd\r"
expect ">"
send "do something\r"
expect ">"
send "exit\r"
EndExpect
done
Je pense que je peux définir un délai d'attente sur expect "assword:"
mais je ne peux pas comprendre comment le faire fermer la donné naissance à la session ssh, puis passer à la prochaine AAS dans la liste.
- Il vous manque un devis dans le premier attendre déclaration: est-ce vrai dans votre script? Le mieux attendre outil de débogage: ajouter
exp_internal 1
avantspawn ...
- Correction de l'erreur typographique - ne l'était pas dans le script, j'ai été en cours d'exécution.
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, je voudrais utiliser un script expect pour cela et perdre de l'écriture de scripts bash.
Ensuite pour le fait de s'attendre de la partie:
Vous pouvez le faire en utilisant un commutateur qui correspond aussi pour les délais d'attente à la page 12 de l'exploration d'attendre). De cette façon, vous pouvez explicitement avoir un peu d'action quand s'attendre à des délais d'attente.
Contraire de définir le délai d'expiration, il va juste continuer avec la prochaine commande en ligne.
J'ai créé quelque chose de similaire où j'ai utilisé un ensemble attendent script à exécuter un script expect en parallèle.
multiples.exp
multiples.config
Pour rendre la réponse claire: la solution est typique, il suffit de faire
timeout
de traitement à l'intérieur de l'bouclés embrassaexpect
notation. Donc, votre Tcl/Attendre partie dans le script shell devrait être:Voici un autre exemple, comment attendre/traiter
timeout
pour reprendre l'attente de la chaîne de résultat alors que le engendré commande est toujours en cours d'exécution.