Table of Contents

Comment automatiser les commandes scriptées sur un Cisco ASA via ssh

L'objectif est assez simple, envoyer 4 ou 5 commandes à un Cisco ASA à partir d'un CentOS dans une tâche cron, cependant:

Pour cela, le programme expect, bien qu'il semble avoir été conçu à l'origine pour être utilisé avec des modems, convient parfaitement. Il agit comme un wrapper, presque comme un sous-shell, dans lequel on insére certaines instructions et commandes. Puisque le sous-shell virtuel a le contrôle, il exécute les commandes et écoute les invites apparaissant dans STDOUT et peut y répondre. C'est un moyen de capturer l'invite de mot de passe avec ssh !

Cependant le programme expect ne peut pas gérer seul le comportement de l'ASA. Puisque peu importe la façon dont on essaye de séparer les commandes que l'on souhaite passer à l'ASA , Expect ne cesse de les rassembler, séparées par des points-virgules (ce qui ne fonctionne pas avec l'ASA). La seule façon de contourner ce problème est donc de placer les commandes de session réelles dans un sous-script et d'appeler ce sous-script à partir d'expect. La logique ressemble à ceci :

crontab → expectScript.sh → commandScript.sh

Voici les mécanismes de tout cela:

Le contenu de la crontab root

6 */8 * * * /home/jpavlov/expectScript.sh

Le contenu de /home/jpavlov/expectScript.sh

#!/bin/bash
PASSWORD="asaSshPassword"
expect -d -c "set timeout -1;\
spawn /home/jpavlov/commandScript.sh;\
match_max 100000;\
expect *password:*;\
send -- $PASSWORD\r;\
interact;"

Le contenu de /home/jpavlov/commandScript.sh

ssh routerUser@192.168.1.1 << EOF
en
routerEnablePassword
clear crypto ipsec sa peer 192.168.66.6
exit
exit
EOF

Il faut être prudent avec le filtre à l'intérieur du jeu de commandes expect. Le filtre prend en charge les expressions régulières et est sensible à la casse. Il faut s'assurer que le filtre corresponde, sinon cela ne fonctionnera pas, évidemment.

Il faut également s'assurer de faire un chmod 700 sur les deux scripts pour le garder à l'abri des regards indiscrets. Il est déconseillé de faire cela sur des serveurs multi-usages, mais c’est moins préoccupant sur une box restreinte.