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

introduction

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.

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()

Généralement 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

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é :

Automatisation de la saisie dans SecureCRT à l'aide de scripts

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

Automatisation de la saisie dans SecureCRT à l'aide de scripts

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 :

Automatisation de la saisie dans SecureCRT à l'aide de scripts

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.

Automatisation de la saisie dans SecureCRT à l'aide de scripts

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.

Automatisation de la saisie dans SecureCRT à l'aide de scripts
Aucun script n'est attaché à ces boutons. Ligne d'action uniquement :

Automatisation de la saisie dans SecureCRT à l'aide de scripts
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 :

Automatisation de la saisie dans SecureCRT à l'aide de scripts
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.

Automatisation de la saisie dans SecureCRT à l'aide de scripts
Lorsque vous appuyez sur le bouton Go Cisco, le panneau passe à la barre de boutons Cisco.

Automatisation de la saisie dans SecureCRT à l'aide de scripts

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.

	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(" 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 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.)

Sources utilisées.

1. À propos de la création de scripts
2. Exemples de scripts

Annexe 1 : Exemples de scripts.


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.

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

Source: habr.com