Automatisation de l'entrée dans SecureCRT avec des scripts

Les ingénieurs réseau sont souvent confrontés à la tâche de copier/coller certains fragments d'un bloc-notes dans la console. Ils doivent généralement copier plusieurs paramètres : nom d'utilisateur/mot de passe et d'autres éléments. L'utilisation de scripts permet d'accélérer ce processus. MAIS la rédaction du script et son exécution doivent au total prendre moins de temps que la configuration manuelle, sinon les scripts sont inutiles.

À 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 d'un équipement (une tâche) sur plusieurs appareils. Il utilise le logiciel SecureCRT et la fonctionnalité intégrée d'exécution de scripts.

Contenu

Introduction

Le logiciel SecureCRT intègre nativement un mécanisme d'exécution de scripts. À quoi servent les scripts dans le terminal :

  • Saisie et sortie automatisées, et vérification minimale de la validité des entrées/sorties.
  • Accélérer l'exécution des tâches routinières – réduire les pauses entre les configurations d'équipements. (Réduction de facto des pauses causées par le temps nécessaire pour effectuer des actions de copy/paste sur le même équipement, lors de l'application de 3 fragments de commandes ou plus.)

Ce document aborde les tâches suivantes :

  • Création de scripts simples.
  • Exécution de scripts sur SecureCRT.
  • Exemples d'utilisation de scripts simples et avancés. (Pratique issue de la vie réelle.)

Création de scripts simples.

Les scripts simples n'utilisent que deux commandes Send et WaitForString. Cette fonctionnalité suffit pour 90 % (ou plus) des tâches effectuées.

Les scripts peuvent être écrits en Python, JS, VBS (Visual Basic), Perl, etc.

Python

# $language = "Python"
# $interface = "1.0"
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("Password")
  crt.Screen.Synchronous = False
main()

Habituellement, un fichier avec l'extension «*.py»

VBS

# $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

Habituellement, un fichier avec l'extension «*.vbs»

Création d'un script à l'aide de l'enregistrement de script.

Permet d'automatiser le processus d'écriture d'un script. Vous lancez l'enregistrement du script. SecureCRT enregistre les commandes et la réponse subséquente de l'équipement et vous fournit un script prêt à l'emploi.

a. Lancer l'enregistrement du script :
Menu SecureCRT => Script => Démarrer l'enregistrement du script
b. Effectuer des actions avec la console (réaliser des actions de configuration dans le CLI).
c. Terminer l'enregistrement du script :
Menu SecureCRT => Script => Arrêter l'enregistrement du script…
Enregistrer le fichier avec le script.

Exemple de commandes exécutées et de script enregistré :

Automatisation de l'entrée dans SecureCRT avec des scripts

Exécution de scripts sur SecureCRT.

Après la création/de l'édition du script, la question se pose naturellement : Comment appliquer le script ?
Il existe plusieurs méthodes :

  • Exécution manuelle depuis le menu Script
  • Exécution automatique après connexion (script de connexion)
  • Connexion automatique sans utilisation de script
  • Exécution manuelle à l'aide d'un bouton dans SecureCRT (le 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 accessibles pour un lancement rapide :
Menu SecureCRT => Script => 1 «Nom du fichier du script»
Menu SecureCRT => Script => 2 «Nom du fichier du script»
Menu SecureCRT => Script => 3 «Nom du fichier du script»
Menu SecureCRT => Script => 4 «Nom du fichier du script»
Menu SecureCRT => Script => 5 «Nom du fichier du script»

Exécution automatique après connexion (script de connexion)

Les paramètres de script de connexion automatique sont configurés pour la session enregistrée : Connection => Actions de connexion => Script de connexion

Automatisation de l'entrée dans SecureCRT avec des scripts

Connexion automatique sans utilisation de script

Il est possible de saisir automatiquement le nom d'utilisateur et le mot de passe sans écrire de script, en utilisant uniquement les fonctionnalités intégrées de SecureCRT. Dans les paramètres de connexion «Connection» => Actions de connexion => Automatiser la connexion – il est nécessaire de remplir plusieurs paires – qui impliquent des couples : «Texte attendu» + «Symboles envoyés pour ce texte» (il peut y avoir plusieurs de ces paires). (Exemple : 1ère paire attente de la saisie du nom d'utilisateur, 2ème attente de la saisie du mot de passe, 3ème attente du prompt pour le mode privilégié, 4ème mot de passe pour le mode privilégié.)

Exemple de connexion automatique sur Cisco ASA :

Automatisation de l'entrée dans SecureCRT avec des scripts

Exécution manuelle à l'aide d'un bouton dans SecureCRT (le bouton doit encore être créé et ajouté à SecureCRT)

Dans SecureCRT, il est possible d'attribuer un script à un bouton. Le bouton est ajouté à un panneau spécialement créé à cet effet.

a. Ajouter un panneau dans l'interface : Menu SecureCRT => Afficher => Barre de boutons
b. Ajouter un bouton au panel et ajouter un script. – Cliquez avec le bouton droit sur la barre de boutons et sélectionnez «Nouveau bouton…» dans le menu contextuel.
c. Dans la boîte de dialogue «Mapper le bouton», dans le champ «Action», sélectionnez l'action (fonction) «Exécuter le script».
Nous spécifions le texte du bouton. Couleur pour l'icône du bouton. Nous terminons les paramètres en appuyant sur Ok.

Automatisation de l'entrée dans SecureCRT avec des scripts

Remarque :

Le panneau de boutons est une fonctionnalité très utile.

1. Il est possible d'indiquer quel panneau ouvrir par défaut pour un certain onglet lors de la connexion à une session.

2. Il est possible de définir des actions prédéfinies pour les actions standard avec l'équipement : afficher la version, afficher la configuration en cours, enregistrer la configuration.

Automatisation de l'entrée dans SecureCRT avec des scripts
Aucun script n'est lié à ces boutons. Seulement une ligne avec des actions :

Automatisation de l'entrée dans SecureCRT avec des scripts
Configuration – afin qu'en passant à une session, le panneau de boutons nécessaire s'ouvre, cela se fait dans les paramètres de la session :

Automatisation de l'entrée dans SecureCRT avec des scripts
Pour le client, il est judicieux de configurer des scripts individuels pour la connexion et le passage au panneau avec des commandes fréquentes pour le fournisseur.

Automatisation de l'entrée dans SecureCRT avec des scripts
En appuyant sur le bouton Go Cisco, le panneau se déplace vers la Cisco Button Bar.

Automatisation de l'entrée dans SecureCRT avec des scripts

Exemples d'utilisation de scripts simples et avancés. (Pratique issue de la vie réelle.)

Des scripts simples suffisent presque pour tous les cas de figure. Mais une fois, j'ai eu besoin de compliquer légèrement le script pour accélérer le travail. Cette complication ne demandait que des données supplémentaires dans une boîte de dialogue à l'utilisateur.

Demande de données à l'utilisateur via une fenêtre de dialogue

Dans mon script, il y avait 2 requêtes de données. C'était le nom d'hôte et le 4ème octet de l'adresse IP. Pour effectuer cette action, j'ai googlé comment faire et trouvé sur le site officiel de SecureCRT (vandyke) – la fonctionnalité s'appelle prompt.

	crt.Screen.WaitForString("-Vlanif200]")
	hostnamestr = crt.Dialog.Prompt("Entrez le nom d'hôte :", "nom d'hôte", "", False)
	ipaddressstr = crt.Dialog.Prompt("Entrez l'adresse ip :", "ip", "", False)
	crt.Screen.Send("ip address 10.10.10.")
	crt.Screen.Send(ipaddressstr)
	crt.Screen.Send(" 23r")
	crt.Screen.Send("quitr")
	crt.Screen.Send("sysname ")
	crt.Screen.Send(hostnamestr)
	crt.Screen.Send("r") 

Cette partie du script demandait le nom d'hôte et les chiffres du dernier octet. Comme il y avait 15 équipements, et que les données étaient présentées dans un tableau, je copiais les valeurs du tableau et les insérais dans les fenêtres de dialogue. Ensuite, le script fonctionnait tout seul.

Copie FTP sur un équipement réseau.

Ce script ouvrait une fenêtre de commande (shell) et copiait des données par FTP. À la fin, il fermait la session. Utiliser le bloc-notes pour cela est impossible, car le copiage prend beaucoup de temps et les données dans le tampon FTP ne resteront pas 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 du nom d'utilisateur/mot de passe à l'aide d'un script

L'accès à l'équipement réseau d'un client était directement restreint. Il était possible d'accéder à l'équipement en se connectant d'abord à la passerelle par défaut, puis à l'équipement qui y était connecté. Un client ssh intégré dans IOS / le logiciel de l'équipement était utilisé pour la connexion. Par conséquent, le nom d'utilisateur et le mot de passe étaient demandés dans la console. Grâce au script ci-dessous, le nom d'utilisateur et le mot de passe étaient 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, l'autre pour le compte eSIGHT.

Script avec la possibilité d'ajouter directement des données pendant l'exécution du script.

L'objectif était d'ajouter une route statique sur tous les équipements 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 affichait la table de routage, passait en mode configuration, mais n'écrivait pas complètement la commande (adresse IP de la passerelle vers Internet) - cette partie était complétée par moi. Après que j'ai appuyé sur Entrée, le script continuait l'exécution de 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 „) n'a pas d'adresse IP de passerelle et manque du symbole de retour chariot. Le script attendait l'apparition de la ligne suivante avec les symboles «(config)#». Ces symboles apparaissaient après que j'ai saisi l'adresse IP et appuyé sur Entrée.

Conclusion :

Lors de la rédaction et de l'exécution d'un script, il est impératif de respecter la règle suivante : Le temps de rédaction du script et le temps d'exécution du script ne doivent jamais dépasser le temps théoriquement nécessaire pour effectuer ce même travail manuellement (copier/coller depuis un bloc-notes, rédaction et débogage d'un playbook pour Ansible, rédaction et débogage d'un script Python). Autrement dit, l'utilisation d'un script doit faire gagner du temps, et non le gaspiller pour une automatisation unique des processus (c'est-à-dire lorsque le script est unique et qu'il n'y aura pas de répétition). Mais si le script est unique et que l'automatisation avec le script et la rédaction / débogage du script prennent moins de temps que tout autre moyen (Ansible, fenêtre de commande), alors le script est la meilleure solution.
Débogage du script. Le script se développe progressivement, le débogage se fait sur les premier, deuxième et troisième appareils, et au quatrième, le script sera probablement entièrement opérationnel.

Lancement du script (avec saisie du nom d'utilisateur et du mot de passe) à l'aide de 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. Cependant, cela n'est pas sûr du point de vue de la sécurité.
Un autre exemple (réel) de l'utilisation du script : vous n'avez pas d'accès direct à l'équipement réseau. Cependant, il est nécessaire de reconfigurer tout l'équipement réseau (l'intégrer dans le système de surveillance, ajuster des noms d'utilisateur/mot de passe/snmpv3username/mot de passe supplémentaires). Vous avez accès lorsque vous vous connectez au commutateur Core, à partir de là vous ouvrez une session SSH sur un autre équipement. Pourquoi ne peut-on pas utiliser Ansible ? — Parce que nous sommes confrontés à une limite sur le nombre de sessions simultanées autorisées sur l'équipement réseau (line vty 0 4, user-interface vty 0 4) (une autre question est de savoir comment intégrer différents équipements avec le même SSH au premier saut dans Ansible).

Le script réduit le temps lors d'opérations longues — par exemple, la copie de fichiers via FTP. À la fin de la copie, le script commence à travailler immédiatement. Une personne a besoin de voir la fin de la copie, puis de prendre conscience de la fin de la copie, puis de saisir les commandes appropriées. Le script le fait objectivement plus rapidement.

Les scripts sont applicables là où il est impossible d'utiliser des moyens de livraison de données en masse : Console. Ou lorsque certaines données pour l'équipement sont uniques : hostname, adresse IP de gestion. Ou lorsque rédiger un programme et le déboguer est plus complexe que d'ajouter les données reçues de l'équipement pendant l'exécution du script. — Exemple avec le script de configuration d'une route, lorsque chaque équipement a son propre IP adresse du fournisseur d'accès Internet. (Mes collègues ont écrit de tels scripts — quand il y avait plus de 300 DMVPN spoke. Il était nécessaire de modifier les paramètres de DMVPN).

Exemple pratique : Configuration initiale d'un nouveau commutateur via les ports de console :

A. J'ai branché le câble de console dans l'appareil.
B. J'ai lancé le script.
C. J'ai attendu l'exécution du script.
D. J'ai reconnecté le câble de console à l'appareil suivant.
E. Si le commutateur n'est pas le dernier, retournez au point B.

Au final, après l'exécution du script :

  • un mot de passe initial a été défini sur l'équipement.
  • le nom d'utilisateur a été saisi.
  • une adresse IP unique de l'appareil a été saisie.

P. S. l'opération a dû être répétée. Car par défaut, ssh ne s'est pas configuré/désactivé. (Oui, c'est mon erreur.)

Sources utilisées.

1. Sur la création de scripts.
2. Exemples de scripts.

Annexe 1 : Exemples de scripts.


Exemple d'un long script avec deux requêtes : le nom d'hôte et l'adresse IP. Créé pour la préconfiguration du matériel via la console (9600 bauds). Également destiné à préparer la connexion du matériel au réseau.

# $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.Send("sysr")
	crt.Screen.WaitForString("]")
	crt.Screen.Send("interface Vlanif 1r")
	crt.Screen.WaitForString("Vlanif1]")
	crt.Screen.Send("undo ip addressr")
	crt.Screen.Send("shutdownr")
	crt.Screen.Send("vlan 100r")
	crt.Screen.Send(" description description1r")
	crt.Screen.Send(" name description1r")
	crt.Screen.Send("vlan 110r")
	crt.Screen.Send(" description description2r")
	crt.Screen.Send(" name description2r")
	crt.Screen.Send("vlan 120r")
	crt.Screen.Send(" description description3r")
	crt.Screen.Send(" name description3r")
	crt.Screen.Send("vlan 130r")
	crt.Screen.Send(" description description4r")
	crt.Screen.Send(" name description4r")
	crt.Screen.Send("vlan 140r")
	crt.Screen.Send(" description description5r")
	crt.Screen.Send(" name description5r")
	crt.Screen.Send("vlan 150r")
	crt.Screen.Send(" description description6r")
	crt.Screen.Send(" name description6r")
	crt.Screen.Send("vlan 160r")
	crt.Screen.Send(" description description7r")
	crt.Screen.Send(" name description7r")
	crt.Screen.Send("vlan 170r")
	crt.Screen.Send(" description description8r")
	crt.Screen.Send(" name description8r")               
	crt.Screen.Send("vlan 180r")
	crt.Screen.Send(" description description9r")
	crt.Screen.Send(" name description9r")
	crt.Screen.Send("vlan 200r")
	crt.Screen.Send(" description description10r")
	crt.Screen.Send(" name description10r")
	crt.Screen.Send("vlan 300r")
	crt.Screen.Send(" description description11r")
	crt.Screen.Send(" name description11r")
	crt.Screen.Send("quitr")
	crt.Screen.WaitForString("]")
	crt.Screen.Send("stp region-configurationr")
	crt.Screen.Send("region-name descr")
	crt.Screen.Send("active region-configurationr")
	crt.Screen.WaitForString("mst-region]")
	crt.Screen.Send("quitr")
	crt.Screen.Send("stp instance 0 priority 57344r")
	crt.Screen.WaitForString("]")
	crt.Screen.Send("interface range GigabitEthernet 0/0/1 to GigabitEthernet 0/0/42r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("description Usersr")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("port link-type hybridr")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("voice-vlan 100 enabler")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("voice-vlan legacy enabler")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("port hybrid pvid vlan 120r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("port hybrid tagged vlan 100r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("port hybrid untagged vlan 120r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("stp edged-port enabler")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("trust 8021pr")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("storm-control broadcast min-rate 1000 max-rate 1500r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("storm-control multicast min-rate 1000 max-rate 1500r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("storm-control action blockr")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("storm-control enable trapr")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("quitr")
	crt.Screen.Send("interface range GigabitEthernet 0/0/43 to GigabitEthernet 0/0/48r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("description Printersr")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("port link-type accessr")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("port default vlan 130r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("stp edged-port enabler")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("trust 8021pr")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("storm-control broadcast min-rate 1000 max-rate 1500r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("storm-control multicast min-rate 1000 max-rate 1500r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("storm-control action blockr")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("storm-control enable trapr")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("quitr")
	crt.Screen.Send("interface range XGigabitEthernet 0/0/1 to XGigabitEthernet 0/0/2r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("description uplinkr")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("port link-type trunkr")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("port trunk allow-pass vlan 100 110 120 130 140 150 160 170 180 200r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("port trunk allow-pass vlan 300r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("storm-control broadcast min-rate 1000 max-rate 1500r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("storm-control multicast min-rate 1000 max-rate 1500r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("storm-control action blockr")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("storm-control enable trapr")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("quitr")
	crt.Screen.Send("ntp-service unicast-server 10.10.10.4r")
	crt.Screen.Send("ntp-service unicast-server 10.10.10.2r")
	crt.Screen.Send("ntp-service unicast-server 10.10.10.134r")
	crt.Screen.Send("ip route-static 0.0.0.0 0.0.0.0 10.10.10.254r")
	crt.Screen.Send("interface Vlanif 200r")
	crt.Screen.WaitForString("-Vlanif200]")
	crt.Screen.Send("r")
	crt.Screen.WaitForString("-Vlanif200]")
	crt.Screen.Send("r")
	crt.Screen.WaitForString("-Vlanif200]")
	crt.Screen.Send("r")
	crt.Screen.WaitForString("-Vlanif200]")
	crt.Screen.Send("r")
	crt.Screen.WaitForString("-Vlanif200]")
	crt.Screen.Send("r")
	crt.Screen.WaitForString("-Vlanif200]")
	crt.Screen.Send("r")
	crt.Screen.WaitForString("-Vlanif200]")
	crt.Screen.Send("r")
	crt.Screen.WaitForString("-Vlanif200]")
        hostnamestr = crt.Dialog.Prompt("Enter hostname:", "hostname", "", False)
        ipaddressstr = crt.Dialog.Prompt("Enter ip address:", "ip", "", False)
	crt.Screen.Send("ip address 10.10.10.")
	crt.Screen.Send(ipaddressstr)
	crt.Screen.Send(" 24r")
	crt.Screen.Send("quitr")
	crt.Screen.Send("sysname ")
	crt.Screen.Send(hostnamestr)
	crt.Screen.Send("r")
	crt.Screen.WaitForString("]")
	crt.Screen.Synchronous = False
main()

De tels scripts ne sont généralement pas nécessaires, mais avec 15 équipements, cela a permis d'accélérer la configuration. La configuration de l'équipement a ensuite été plus rapide grâce à la fenêtre de commandes SecureCRT.

Configuration du compte pour ssh.

Un autre exemple. Configuration é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 prix le plus bas pour SecureCRT pour un an)
Site officiel
Une licence pour le logiciel est achetée une fois, avec support (pour les mises à jour), puis le logiciel est utilisé avec cette licence sans limite de temps.

Fonctionne sur les systèmes d'exploitation Mac OS X et Windows.

Prise en charge des scripts (cet article)
Oui Fenêtre de commandes
Série/Telnet/SSH1/SSH2/Shell du système d'exploitation

Source : habr.com

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster