Autocommand - cisco

De Wiki doc


Sur Cisco IOS, autocommand est une méthode permettant d'exécuter une (et une seule) commande automatiquement lors de la connexion à une ligne ou à un utilisateur en particulier.

Cette fonctionnalité peut répondre à plusieurs besoins comme l'affichage d'informations à la connexion (possibilité de dédier un utilisateur à cette tâche ou en complément d'une bannière d'accueil par exemple) ou permettre la persistance de configurations éphémères (tel les paramètres de la commande terminal).

L'autocommand ne supportant qu'une seule commande, son utilité peut s'en retrouver fortement limité. Heureusement, il est possible de contourner ce handicap par l'usage d'un script Tool Command Language (TCL).

Usage

Par utilisateur

Il est possible d'avoir un utilisateur dédié à la visualisation d'une information en particulier (l'état des interfaces réseau ou des utilisateurs connectés par exemple). L'autocommand peut être configuré pour un utilisateur à sa création afin de le dédier à l'exécution d'une seule commande avant déconnexion immédiate et automatique. L'administration sera alors impossible avec cet utilisateur (uniquement en line console 0, ce qui en fait une fonctionnalité pas mal bancale...).

username interfaces secret interfaces
username interfaces autocommand show interface status

L'utilisateur interfaces avec le mot de passe interfaces exécutera automatiquement la commande show interface status avant de se déconnecter immédiatement de lui même. Notez qu'il est tout à fait possible d'utiliser une clé SSH à la place d'un mot de passe pour la connexion à l'utilisateur.

Comme à l'accoutumé, il est recommandé de désactiver l'accès à la commande enable pour les utilisateurs non privilégiés afin d'écarter une élévation de privilège par ce biais

privilege exec level 15 enable

Par ligne

Un autocommand affecté à une ligne exécutera automatiquement une commande à la connexion via ladite ligne (typiquement via console, Telnet ou SSH). Le comportement par défaut est de fermer la session après la commande mais il est possible de changer cela.

# Configuration des lignes 0 à 3
line vty 0 3

# Désactivation du comportement de déconnexion automatique à l'exécution
autocommand-options nohangup
# Exécution de la commande "who" à la connexion
autocommand who

Commandes multiples

Afin de contourner la limitation de la commande unique, il est possible d'exécuter un script TCL contenant autant d'instructions que désirée. C'est dans ce cas de figure que la technique devient particulièrement intéressante.

Dans la mesure où IOS ne dispose pas d'éditeur de texte intégré, il est possible de rédiger votre script sur un ordinateur et de le transférer sur l'équipement réseau via un protocole de transfert de fichiers tel que TFTP ou HTTP.

ASTUCE

Rédigez votre script sur une machine et rendez-le disponible via un protocole de transfert de fichiers supporté par l'IOS de votre équipement. Il vous sera alors possible de l'exécuter directement depuis le dépôt distant et ainsi gagner en temps lors de vos tests. Ce n'est que lorsque vous serez arrivé au résultat voulu que vous aurez à le transférer en local pour une exécution depuis la flash.

Contenu du script terminal.tcl :

proc terminal-defaut x {
	terminal monitor
	terminal length 0
}

terminal-defaut 1

Le processus (fonction) terminal-defaut n'attendant aucun argument (on en met un par ce que c'est obligatoire...) exécutera les deux commandes contenues dans ses accolades permettant respectivement d'activer la journalisation dans le VTY et de désactiver la pagination lors d'un retour stdout conséquent. Ce processus est appelé à la dernière ligne afin d'en exécuter son contenu.

# Exécution du script depuis le dépôt distant
tclsh tftp://2001:db8::/terminal.tcl

# Lorsque le comportement est validé, rapatriement du script en local
copy tftp://2001:db8::/terminal.tcl flash:

# Configuration des lignes 0 à 3
line vty 0 3

# Désactivation de la déconnexion automatique à la fin de la commande et configuration de l'autocommand sur le script TCL
autocommand-options nohangup
autocommand  tclsh flash:terminal.tcl

Sources