Automatisation de la saisie dans SecureCRT à l'aide de scripts
Les ingénieurs réseau sont souvent confrontés à la tâche de copier/coller certains fragments d'un bloc-notes vers la console. Vous devez généralement copier plusieurs paramètres : nom d'utilisateur/mot de passe et autre chose. L'utilisation de scripts vous permet d'accélérer ce processus. MAIS les tâches d'écriture du script et d'exécution du script devraient prendre moins de temps au total que la configuration manuelle, sinon les scripts sont inutiles.
A quoi sert cet article ? Cet article fait partie de la série Fast Start et vise à faire gagner du temps aux ingénieurs réseau lors de la configuration de l'équipement (tâche unique) sur plusieurs appareils. Utilise le logiciel SecureCRT et la fonctionnalité d'exécution de script intégrée. Teneur
Le programme SecureCRT dispose d'un mécanisme d'exécution de script intégré prêt à l'emploi. A quoi servent les scripts de terminal ?
E/S automatisées et validation minimale des E/S.
Accélérez l'exécution des tâches de routine - en réduisant les pauses entre les réglages de l'équipement. (Réduction de facto des pauses causées par le temps nécessaire pour effectuer des actions copier/coller sur le même matériel, avec 3 fragments de commande ou plus à appliquer au matériel.)
Ce document couvre les tâches :
Création de scripts simples.
Exécution de scripts sur SecureCRT.
Exemples d'utilisation de scripts simples et avancés. (Pratique de la vie réelle.)
Création de scripts simples.
Les scripts les plus simples n'utilisent que deux commandes, Send et WaitForString. Cette fonctionnalité est suffisante pour 90% (ou plus) des tâches effectuées.
Les scripts peuvent fonctionner en Python, JS, VBS (Visual Basic), Perl, etc.
# $language = "VBScript"
# $interface = "1.0"
Sub Main
crt.Screen.Synchronous = True
crt.Screen.Send vbcr
crt.Screen.WaitForString "name"
crt.Screen.Send "cisco" & vbcr
crt.Screen.WaitForString "assword"
crt.Screen.Send "cisco" & vbcr
crt.Screen.Synchronous = False
End Sub
Généralement un fichier avec l'extension "*.vbs"
Créez un script à l'aide d'une entrée de script.
Vous permet d'automatiser le processus d'écriture d'un script. Vous commencez à écrire un script. SecureCRT enregistre les commandes et la réponse matérielle qui s'ensuit et affiche le script terminé pour vous.
UN. Commencez à écrire le script :
Menu SecureCRT => Script => Démarrer le script d'enregistrement
b. Effectuez des actions avec la console (effectuez les étapes de configuration dans la CLI).
V Terminer l'écriture du script :
Menu SecureCRT => Script => Arrêter l'enregistrement du script…
Enregistrez le fichier de script.
Exemple de commandes exécutées et de script enregistré :
Exécution de scripts sur SecureCRT.
Après avoir créé/modifié le script, une question naturelle se pose : Comment appliquer le script ?
Il y a plusieurs façons:
Exécution manuelle depuis le menu Script
Démarrage automatique après connexion (script de connexion)
Connexion automatique sans utiliser de script
Déclenchement manuel avec un bouton dans SecureCRT (un bouton doit encore être créé et ajouté à SecureCRT)
Exécution manuelle depuis le menu Script
Menu SecureCRT => Script => Exécuter…
- Les 10 derniers scripts sont mémorisés et disponibles pour un lancement rapide :
Menu SecureCRT => Script => 1 "Nom du fichier de script"
Menu SecureCRT => Script => 2 "Nom du fichier de script"
Menu SecureCRT => Script => 3 "Nom du fichier de script"
Menu SecureCRT => Script => 4 "Nom du fichier de script"
Menu SecureCRT => Script => 5 "Nom du fichier de script"
Démarrage automatique après connexion (script de connexion)
Les paramètres du script de journalisation automatique sont configurés pour la session enregistrée : Connexion => Actions de connexion => Script de connexion
Connexion automatique sans utiliser de script
Il est possible de saisir automatiquement le nom d'utilisateur du mot de passe sans écrire de script, en utilisant uniquement la fonctionnalité intégrée de SecureCRT. Dans les paramètres de connexion "Connexion" => Actions de connexion => Connexion automatique - vous devez remplir plusieurs groupes - ce qui signifie les paires : "Texte attendu" + "Caractères envoyés à ce texte", il peut y avoir plusieurs paires de ce type. (Exemple : 1ère paire en attente de nom d'utilisateur, deuxième en attente de mot de passe, troisième en attente d'invite de mode privilégié, quatrième paire de mot de passe en mode privilégié.)
Exemple de connexion automatique sur Cisco ASA :
Déclenchement manuel avec un bouton dans SecureCRT (un bouton doit encore être créé et ajouté à SecureCRT)
Dans SecureCRT, vous pouvez affecter un script à un bouton. Le bouton est ajouté à un panneau spécialement créé à cet effet.
UN. Ajout d'un panneau à l'interface : SecureCRT Menu => Affichage => Barre de boutons
b. Ajoutez un bouton au panneau et ajoutez un script. – Faites un clic droit sur la barre de boutons et sélectionnez « Nouveau bouton… » dans le menu contextuel.
V Dans la boîte de dialogue "Map Button", dans le champ "Action", sélectionnez l'action (fonction) "Run Script".
Spécifiez une légende pour le bouton. La couleur de l'icône du bouton. Terminez les réglages en cliquant sur OK.
Note:
Le panneau avec des boutons est une fonctionnalité très utile.
1. Il est possible, lors de la connexion à une session spécifique, de spécifier quel panneau ouvrir à cet onglet par défaut.
2. Il est possible de définir des actions prédéfinies pour les actions standard avec l'équipement : show show version, show running-config, save configuration.
Aucun script n'est attaché à ces boutons. Ligne d'action uniquement :
Paramètre - de sorte que lors du passage à une session, le panneau nécessaire avec des boutons s'ouvre dans les paramètres de la session :
Il est logique que le client configure des scripts individuels pour la connexion et accède au panneau avec des commandes fréquentes pour le fournisseur.
Lorsque vous appuyez sur le bouton Go Cisco, le panneau passe à la barre de boutons Cisco.
Exemples d'utilisation de scripts simples et avancés. (Pratique de la vie réelle.)
Des scripts simples suffisent pour presque toutes les occasions. Mais une fois, j'ai eu besoin de compliquer un peu le script - pour accélérer le travail. Cette complication demandait simplement des données supplémentaires dans une boîte de dialogue à l'utilisateur.
Demander des données à l'utilisateur à l'aide d'une boîte de dialogue
J'en avais 2 dans le script de demande de données.Il s'agit du nom d'hôte et du 4ème octet de l'adresse IP. Pour effectuer cette action - j'ai cherché sur Google comment le faire et je l'ai trouvé sur le site officiel de SecureCRT (vandyke). - la fonctionnalité est appelée invite.
Cette partie du script demandait le nom d'hôte et les numéros du dernier octet. Comme il y avait 15 pièces d'équipement. Et les données ont été présentées dans un tableau, puis j'ai copié les valeurs du tableau et les ai collées dans les boîtes de dialogue. De plus, le script a fonctionné indépendamment.
Copie FTP vers un équipement réseau.
Ce script a lancé ma fenêtre de commande (shell) et copié les données via FTP. À la fin, fermez la session. Il est impossible d'utiliser le bloc-notes pour cela, car la copie prend beaucoup de temps et les données dans le tampon FTP ne seront pas stockées aussi longtemps :
# $language = "Python"
# $interface = "1.0"
# Connect to a telnet server and automate the initial login sequence.
# Note that synchronous mode is enabled to prevent server output from
# potentially being missed.
def main():
crt.Screen.Synchronous = True
crt.Screen.Send("ftp 192.168.1.1r")
crt.Screen.WaitForString("Name")
crt.Screen.Send("adminr")
crt.Screen.WaitForString("Password:")
crt.Screen.Send("Passwordr")
crt.Screen.WaitForString("ftp")
crt.Screen.Send("binaryr")
crt.Screen.WaitForString("ftp")
crt.Screen.Send("put S5720LI-V200R011SPH016.patr")
crt.Screen.WaitForString("ftp")
crt.Screen.Send("quitr")
crt.Screen.Synchronous = False
main()
Saisie d'un nom d'utilisateur/mot de passe à l'aide d'un script
Chez un client, l'accès à l'équipement de réseau était directement fermé. Il était possible d'entrer dans l'équipement en se connectant d'abord à la passerelle par défaut, puis à partir de celle-ci à l'équipement qui lui était connecté. Le client ssh intégré au logiciel IOS/matériel a été utilisé pour se connecter. En conséquence, le nom d'utilisateur et le mot de passe ont été demandés dans la console. Avec le script ci-dessous, le nom d'utilisateur et le mot de passe ont été saisis automatiquement :
# $language = "Python"
# $interface = "1.0"
# Connect to a telnet server and automate the initial login sequence.
# Note that synchronous mode is enabled to prevent server output from
# potentially being missed.
def main():
crt.Screen.Synchronous = True
crt.Screen.Send("snmpadminr")
crt.Screen.WaitForString("assword:")
crt.Screen.Send("Passwordr")
crt.Screen.Synchronous = False
main()
Remarque : Il y avait 2 scripts, un pour le compte administrateur, le second pour le compte eSIGHT.
Script avec la possibilité d'ajouter directement des données lors de l'exécution du script.
La tâche consistait à ajouter une route statique sur tous les équipements du réseau. Mais la passerelle vers Internet sur chaque équipement était différente (et elle différait de la passerelle par défaut). Le script suivant a affiché la table de routage, est entré en mode de configuration, n'a pas écrit la commande jusqu'à la fin (l'adresse IP de la passerelle vers Internet) - j'ai ajouté cette partie. Après avoir appuyé sur Entrée, le script a continué à exécuter la commande.
# $language = "Python"
# $interface = "1.0"
# Connect to a telnet server and automate the initial login sequence.
# Note that synchronous mode is enabled to prevent server output from
# potentially being missed.
def main():
crt.Screen.Synchronous = True
crt.Screen.Send("Zdes-mogla-bit-vasha-reklamar")
crt.Screen.WaitForString("#")
crt.Screen.Send("show run | inc ip router")
crt.Screen.WaitForString("#")
crt.Screen.Send("conf tr")
crt.Screen.WaitForString("(config)#")
crt.Screen.Send("ip route 10.10.10.8 255.255.255.252 ")
crt.Screen.WaitForString("(config)#")
crt.Screen.Send("endr")
crt.Screen.WaitForString("#")
crt.Screen.Send("copy run star")
crt.Screen.WaitForString("[startup-config]?")
crt.Screen.Send("r")
crt.Screen.WaitForString("#")
crt.Screen.Send("exitr")
crt.Screen.Synchronous = False
main()
Dans ce script, à la ligne : crt.Screen.Send("ip route 10.10.10.8 255.255.255.252 ") l'adresse IP de la passerelle n'est pas ajoutée et il n'y a pas de retour chariot. Le script attend la ligne suivante avec les caractères "(config) #" Ces caractères sont apparus après que j'ai entré l'adresse IP et entré.
CONCLUSION:
Lors de l'écriture d'un script et de son exécution, la règle doit être respectée : Le temps d'écriture d'un script et d'exécution d'un script ne doit jamais être supérieur au temps passé théoriquement à faire le même travail manuellement (copier/coller depuis un bloc-notes, écriture et débogage un playbook pour ansible, écriture et débogage de script python). Autrement dit, l'utilisation du script doit permettre de gagner du temps et de ne pas perdre de temps sur l'automatisation ponctuelle des processus (c'est-à-dire lorsque le script est unique et qu'il n'y aura plus de répétition). Mais si le script est unique et que l'automatisation avec le script et l'écriture/le débogage du script prend moins de temps que de le faire de toute autre manière (ansible, fenêtre de commande), alors le script est la meilleure solution.
Débogage d'un script. Le script se développe progressivement, le débogage a lieu lors du rodage sur le premier, le deuxième et le troisième appareil, et au quatrième, le script sera très probablement pleinement opérationnel.
L'exécution d'un script (en entrant nom d'utilisateur + mot de passe) avec la souris est généralement plus rapide que de copier le nom d'utilisateur et le mot de passe à partir d'un bloc-notes. Mais pas sûr du point de vue de la sécurité.
Autre exemple (réel) d'utilisation d'un script : Vous n'avez pas d'accès direct aux équipements réseau. Mais il est nécessaire de configurer tout l'équipement réseau (apportez-le dans le système de surveillance, configurez un nom d'utilisateur/mot de passe/nom d'utilisateur snmpv3/mot de passe supplémentaire). Il y a un accès lorsque vous allez au commutateur Core, à partir de celui-ci, vous ouvrez SSH vers d'autres équipements. Pourquoi ne pouvez-vous pas utiliser Ansible. - Parce que nous nous heurtons à une limite du nombre de sessions simultanées autorisées sur l'équipement réseau (ligne vty 0 4, interface utilisateur vty 0 4) (une autre question est de savoir comment démarrer différents équipements dans Ansible avec le même premier saut SSH).
Le script réduit le temps lors de longues opérations - par exemple, la copie de fichiers via FTP. Une fois la copie terminée, le script commence immédiatement à fonctionner. Une personne devra voir la fin de la copie, puis réaliser la fin de la copie, puis entrer les commandes appropriées. Le script le fait objectivement plus rapidement.
Les scripts sont applicables lorsqu'il est impossible d'utiliser des outils de diffusion de données en masse : Console. Ou lorsque certaines données de l'équipement sont uniques : nom d'hôte, adresse IP de gestion. Ou lors de l'écriture d'un programme et du débogage, il est plus difficile que d'ajouter des données reçues de l'équipement pendant que le script est en cours d'exécution. - Un exemple avec un script pour prescrire un itinéraire, lorsque chaque équipement a sa propre adresse IP du fournisseur d'accès Internet. (Mes collègues ont écrit de tels scripts - lorsque le DMVPN parlait était supérieur à 3. Il était nécessaire de modifier les paramètres DMVPN).
Étude de cas : Configuration des paramètres initiaux sur un nouveau commutateur à l'aide des ports de la console :
A. Branché le câble de la console dans l'appareil.
B. Exécuter le script
B. Attendu l'exécution du script
D. Branché le câble de la console dans l'appareil suivant.
E. Si le commutateur n'est pas le dernier, passez à l'étape B.
À la suite du travail du script :
le mot de passe initial est défini sur l'équipement.
Nom d'utilisateur saisi
l'adresse IP unique de l'appareil est saisie.
PS l'opération a dû être répétée. Parce que ssh par défaut n'a pas été configuré/désactivé. (Oui, c'est mon erreur.)
Un exemple de script long, avec deux requêtes : nom d'hôte et adresse IP. Il a été créé pour le préréglage des équipements via la console (9600 bauds). Et aussi pour préparer le raccordement des équipements au réseau.
De tels scripts ne sont généralement pas nécessaires, mais la quantité d'équipement est de 15 pièces. Autorisé une configuration plus rapide. Il était plus rapide de configurer l'équipement à l'aide de la fenêtre de commande SecureCRT.
Créer un compte pour ssh.
Un autre exemple. La configuration se fait également via la console.
# $language = "Python"
# $interface = "1.0"
# Connect to a telnet server and automate the initial login sequence.
# Note that synchronous mode is enabled to prevent server output from
# potentially being missed.
def main():
crt.Screen.Synchronous = True
crt.Screen.Send("r")
crt.Screen.WaitForString("name")
crt.Screen.Send("adminr")
crt.Screen.WaitForString("Password:")
crt.Screen.Send("Passwordr")
crt.Screen.WaitForString(">")
crt.Screen.Send("sysr")
crt.Screen.Send("stelnet server enabler")
crt.Screen.Send("aaar")
crt.Screen.Send("local-user admin service-type terminal ftp http sshr")
crt.Screen.Send("quitr")
crt.Screen.Send("user-interface vty 0 4r")
crt.Screen.Send("authentication-mode aaar")
crt.Screen.Send("quitr")
crt.Screen.Send("quitr")
crt.Screen.Synchronous = False
main()
À propos de SecureCRT :Logiciel payant : à partir de 99 $ (le plus petit prix est uniquement pour SecureCRT pendant un an) site officiel
Une licence de logiciel est achetée une fois, avec support (pour la mise à jour), puis le logiciel est utilisé avec cette licence pour une durée illimitée.
Fonctionne sur les systèmes d'exploitation Mac OS X et Windows.
Il existe un support de script (cet article)
Il est Fenêtre de commande
Système d'exploitation série/Telnet/SSH1/SSH2/Shell