2017-01-20 4 views
0

Bonne journée. J'essaie de créer/exécuter un script qui me permettra d'envoyer un IOS mis à jour d'un serveur à mes périphériques réseau. Le code suivant fonctionne lorsque je mets une adresse IP manuelle juste avant la commande ": flash".Mise à jour des IOS via SCP dans bash avec attendre

#!/user/bin/expect 
set IOSroot "/xxxxx/xxx/c3750e-universalk9-mz.150-2.SE10a.bin" 
set pw xxxxxxxxxxxxxxxxxxx 

spawn scp $IOSroot 1.1.1.1:flash:/c3750e-universalk9-mz.150-2.SE10a.bin 

expect "TACACS Password:" 
send "$pw\r" 
interact 

Le code fonctionne très bien et comme prévu. Le problème se pose lorsque j'essaie d'utiliser un fichier appelé "ioshost" avec une liste d'adresses IP et l'utiliser dans ce script pour obtenir une certaine automatisation. J'ai essayé plusieurs choses pour que cela fonctionne. Certains d'entre eux sont les suivants:

Paramètres Variables

IPHosts=$(cat ioshost) 

set IPHost 'cat ioshost' 

En plus d'essayer d'utiliser la lecture/faire commande ...

while read line; do 
spawn scp $IOSroot $line:flash:/c3750e-universalk9-mz.150-2.SE10a.bin 
done < ioshost 

Aucun de ceux-ci semblent travailler et je cherche à titre indicatif. S'il vous plaît noter que je comprends que la définition d'un mot de passe n'est pas la meilleure pratique, mais la configuration des clés RSA comme mentionné dans d'autres articles n'est pas autorisée, donc je suis obligé de le faire de cette façon.

Nous vous remercions de votre temps.

+1

Avez-vous essayé "écho" de votre commande scp dans la boucle, saillir pour voir si ce que vous obtenez est ce que vous attendez? Je citerais l'extension "$ IOSroot", ainsi que la "ligne $". J'utiliserais aussi "while IFS = read -r line". Mais ceux-ci peuvent ne pas être le problème, en fonction des données réelles contenues. – Fred

+0

En outre, je ne suis pas familier avec la syntaxe que vous utilisez pour scp (IP: flash:/...). Je suis habitué à voir user @ host:/path. Pourriez-vous s'il vous plaît m'aider à le comprendre? – Fred

+0

Fred, la partie SCP que j'exécute est la syntaxe qui identifie où l'IOS est chargé sur notre serveur JUMP et ensuite la deuxième partie est le périphérique cible et le chemin vers lequel je veux l'envoyer. – kuroikenshi

Répondre

1

Vous pouvez utiliser un script Expect et un script Bash.

Première mise à jour de votre script Attendez-vous un peu:

#!/user/bin/expect 
set IOSroot "/xxxxx/xxx/c3750e-universalk9-mz.150-2.SE10a.bin" 
set pw xxxxxxxxxxxxxxxxxxx 

spawn scp $IOSroot [lindex $argv 0]:flash:/c3750e-universalk9-mz.150-2.SE10a.bin 
#     ^^^^^^^^^^^^^^^^ 

expect "TACACS Password:" 
send "$pw\r" 
interact 

écrire ensuite une boucle simple Bash for:

for host in $(<ioshost); do 
    expect /your/script.exp $host 
done 
+0

Cela a bien fonctionné! Je demande comment fonctionne la partie lindex! Merci encore! – kuroikenshi