Automatisez l'entrée dans SecureCRT à l'aide de scripts

Les ingénieurs réseau ont souvent la tâche de copier / coller certains fragments du bloc-notes vers la console. Habituellement, vous devez copier quelques 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 de script et d'exécution de script au total devraient prendre moins de temps que la configuration manuelle, sinon les scripts sont inutiles.

À quoi sert cet article? Cet article est issu du cycle de démarrage rapide et vise à faire gagner du temps aux ingénieurs réseau lors de la configuration de l'équipement (une tâche) sur plusieurs appareils. Il utilise le logiciel SecureCRT et la fonctionnalité d'exécution de script intégrée.



introduction


Un moteur d'exécution de script est intégré au programme SecureCRT prêt à l'emploi. Pourquoi avons-nous besoin de scripts dans le terminal:

  • Entrée et sortie automatisées et vérification minimale de l'exactitude des entrées / sorties.
  • Pour accélérer les performances des tâches de routine - réduire les pauses entre la configuration de l'équipement. (Réduction de facto des pauses causées par le temps de copie / actions passées sur le même équipement, avec 3 fragments de commandes ou plus à utiliser sur l'équipement.)

Ce document décrit 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 utilisent uniquement 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("admin\r")
  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 en écrivant un script.


Vous permet d'automatiser le processus d'écriture d'un script. Vous démarrez l'enregistrement du script. SecureCRT enregistre les commandes et la réponse ultérieure de l'équipement et affiche un script prêt à l'emploi.

et. Exécutez l'enregistrement du script:
Menu SecureCRT => Script => Démarrer l'enregistrement du script
b. Effectuez des actions avec la console (effectuez les étapes de configuration dans la CLI).
à. Pour terminer l'enregistrement du script:
Menu SecureCRT => Script => Arrêter l'enregistrement du script ...
Enregistrez le fichier avec le script.

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



Exécution de scripts sur SecureCRT.


Après avoir créé / édité le script, une question logique se pose: comment appliquer le script?
Il existe plusieurs façons:

  • Démarrage manuel à partir du menu Script
  • Démarrage automatique après la connexion (script d'ouverture de session)
  • Ouverture de session automatique sans utiliser de script
  • Démarrage manuel à l'aide d'un bouton dans SecureCRT (un bouton n'a pas encore été créé et ajouté à SecureCRT)


Démarrage manuel à partir du menu Script


Menu SecureCRT => Script => Exécuter ...
- Les 10 derniers scripts sont mémorisés et sont 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 de fichier avec script"
Menu SecureCRT => Script => 4 "Nom de fichier avec script"
Menu SecureCRT => Script => 5 "Nom de fichier avec script"

Démarrage automatique après la connexion (script d'ouverture de session)


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



Ouverture de session automatique sans utiliser de script


Il est possible de saisir automatiquement un nom d'utilisateur de mot de passe sans écrire de script en utilisant uniquement la fonctionnalité SecureCRT intégrée. Dans les paramètres de connexion "Connexion" => Actions de connexion => Automatiser la connexion - vous devez remplir plusieurs ensembles - qui impliquent des paires: "Texte attendu" + "Caractères envoyés à ce texte", il peut y avoir beaucoup de telles paires. (Exemple: 1ère paire en attente d'un nom d'utilisateur, deuxième en attente d'un mot de passe, troisième en attente d'une invitation au mode privilégié, quatrième mot de passe du mode privilégié.)

Exemple de connexion automatique sur Cisco ASA:



Démarrage manuel à l'aide d'un bouton dans SecureCRT (un bouton n'a pas encore été créé et ajouté à SecureCRT)


Dans SecureCRT, vous pouvez spécifier un bouton de script. Le bouton est ajouté à un panneau spécialement créé à cet effet.

et. Ajoutez un panneau à l'interface: Menu SecureCRT => 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.
à. Dans la boîte de dialogue "Map Button" dans le champ "Action" Sélectionnez l'action (fonction) "Run Script".
Spécifiez la signature du bouton. Couleur de l'icône du bouton. Terminez les paramètres en cliquant sur OK.



Remarque:

La barre de boutons est une fonctionnalité très utile.

1. Il est possible pour Logon d'indiquer à une session spécifique quel panneau ouvrir par défaut dans cet onglet.

2. Il existe une possibilité pour les actions standard avec l'équipement de définir des actions prédéfinies: show show version, show running-config, save the configuration.


Aucun script n'est attaché à ces boutons. Seule ligne avec des actions:


Paramètres - 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 cliquez sur le bouton Cisco Go, le panneau bascule vers 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'avais besoin de compliquer un peu le script - pour accélérer le travail. Cette complication n'a demandé à l'utilisateur que des données supplémentaires dans la boîte de dialogue.

Demande de données à un 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 4e octet de l'adresse IP. Pour effectuer cette action - j'ai googlé comment le faire et 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(" 23\r")
	crt.Screen.Send("quit\r")
	crt.Screen.Send("sysname ")
	crt.Screen.Send(hostnamestr)
	crt.Screen.Send("\r") 

Cette partie du script a demandé le nom d'hôte et les numéros du dernier octet. Puisque l'équipement était de 15 pièces. Et les données ont été présentées dans le tableau, puis j'ai copié les valeurs du tableau et 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. Une fois terminé, il a clôturé 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 tellement stockées:

# $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.1\r")
	crt.Screen.WaitForString("Name")
	crt.Screen.Send("admin\r")
	crt.Screen.WaitForString("Password:")
	crt.Screen.Send("Password\r")
	crt.Screen.WaitForString("ftp")
	crt.Screen.Send("binary\r")
	crt.Screen.WaitForString("ftp")
	crt.Screen.Send("put S5720LI-V200R011SPH016.pat\r")
	crt.Screen.WaitForString("ftp")
	crt.Screen.Send("quit\r")
	crt.Screen.Synchronous = False
main()


Saisie du nom d'utilisateur / mot de passe à l'aide d'un script


Chez un client, l'accès à l'équipement réseau a été directement fermé. Vous pouvez accéder à l'équipement en vous connectant d'abord à la passerelle par défaut, puis à partir de celle-ci, puis en vous connectant à l'équipement qui lui est connecté. Pour nous connecter, nous avons utilisé le client ssh intégré à l'équipement IOS / logiciel. En conséquence, le nom d'utilisateur et le mot de passe ont été demandés dans la console. En utilisant le script ci-dessous, le nom d'utilisateur et le mot de passe ont été entrés 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("snmpadmin\r")
	crt.Screen.WaitForString("assword:")
	crt.Screen.Send("Password\r")
	crt.Screen.Synchronous = False
main()

Remarque: Le script était 2. Un pour le compte administrateur, le second pour le compte eSIGHT.

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


La tâche consistait à ajouter une route statique sur tous les équipements du réseau. Mais la passerelle Internet de chaque équipement avait la sienne (et elle était différente de la passerelle par défaut). Le script suivant affiche la table de routage, entre en mode configuration et n'a pas complètement exécuté la commande (adresse IP de la passerelle 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-reklama\r")
	crt.Screen.WaitForString("#")
	crt.Screen.Send("show run | inc ip route\r")
	crt.Screen.WaitForString("#")
	crt.Screen.Send("conf t\r")
	crt.Screen.WaitForString("(config)#")
	crt.Screen.Send("ip route 10.10.10.8 255.255.255.252 ")
	crt.Screen.WaitForString("(config)#")
	crt.Screen.Send("end\r")
	crt.Screen.WaitForString("#")
	crt.Screen.Send("copy run sta\r")
	crt.Screen.WaitForString("[startup-config]?")
	crt.Screen.Send("\r")
	crt.Screen.WaitForString("#")
	crt.Screen.Send("exit\r")
	crt.Screen.Synchronous = False
main()

Dans ce script, dans 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 caractère de retour chariot. Le script attend que la ligne suivante avec les caractères "(config) #" apparaisse. Ces caractères sont apparus après avoir entré l'adresse IP et entré.

Conclusion:


Lors de l'écriture et de l'exécution d'un script, la règle doit certainement être respectée: le temps pour écrire un script et l'exécution du script ne doit jamais être plus long que le temps théoriquement consacré à faire le même travail manuellement (copier / coller à partir du bloc-notes, écrire et déboguer un playbook pour ansible, écrire et déboguer script python). Autrement dit, l'utilisation d'un script devrait 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 / débogage du script prend moins de temps que l'exécution 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 se produit lors d'une exécution sur le premier, le deuxième, le troisième appareil et au quatrième, le script sera probablement pleinement opérationnel.

L'exécution d'un script (avec nom d'utilisateur et mot de passe) à l'aide de la souris est généralement plus rapide que la copie du nom d'utilisateur et du mot de passe à partir du bloc-notes. Mais pas sûr d'un point de vue de la sécurité.
Un autre (réel) exemple d'utilisation d'un script: vous n'avez pas d'accès direct à l'équipement réseau. Mais il est nécessaire de configurer tout l'équipement réseau (ajouter au système de surveillance, configurer un nom d'utilisateur / mot de passe / snmpv3username / password supplémentaire). Il y a accès lorsque vous accédez au commutateur Core, qu'il ouvre SSH à d'autres équipements. Pourquoi vous ne pouvez pas utiliser Ansible. - Parce que nous rencontrons une limite sur le 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 pendant 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 les moyens de livraison de masse de données: la 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 de son débogage, il est plus difficile que d'ajouter des données reçues de l'équipement pendant l'exécution du script. - Un exemple avec un script pour prescrire un itinéraire, lorsque chaque équipement a sa propre adresse IP de fournisseur Internet. (Mes collègues ont écrit de tels scripts - lorsque DMVPN a parlé pendant 3 centaines. Il était nécessaire de modifier les paramètres DMVPN).

Étude de cas: paramètres initiaux d'un nouveau commutateur via les ports de console:

A. J'ai inséré le câble de console dans l'appareil.
B. Lancement du script
B. Attente de la fin du script
G. A attiré le câble de la console vers le périphérique suivant.
D. Si le commutateur n'est pas le dernier, passez à l'étape B.

Total basé sur les résultats du script:

  • L'équipement a un mot de passe initial.
  • Nom d'utilisateur entré
  • entré une adresse IP unique pour l'appareil.

PS J'ai dû répéter l'opération. Parce que par défaut, ssh 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 la connexion 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("admin\r")
	crt.Screen.WaitForString("Password:")
	crt.Screen.Send("Password\r")
	crt.Screen.Send("sys\r")
	crt.Screen.WaitForString("]")
	crt.Screen.Send("interface Vlanif 1\r")
	crt.Screen.WaitForString("Vlanif1]")
	crt.Screen.Send("undo ip address\r")
	crt.Screen.Send("shutdown\r")
	crt.Screen.Send("vlan 100\r")
	crt.Screen.Send(" description description1\r")
	crt.Screen.Send(" name description1\r")
	crt.Screen.Send("vlan 110\r")
	crt.Screen.Send(" description description2\r")
	crt.Screen.Send(" name description2\r")
	crt.Screen.Send("vlan 120\r")
	crt.Screen.Send(" description description3\r")
	crt.Screen.Send(" name description3\r")
	crt.Screen.Send("vlan 130\r")
	crt.Screen.Send(" description description4\r")
	crt.Screen.Send(" name description4\r")
	crt.Screen.Send("vlan 140\r")
	crt.Screen.Send(" description description5\r")
	crt.Screen.Send(" name description5\r")
	crt.Screen.Send("vlan 150\r")
	crt.Screen.Send(" description description6\r")
	crt.Screen.Send(" name description6\r")
	crt.Screen.Send("vlan 160\r")
	crt.Screen.Send(" description description7\r")
	crt.Screen.Send(" name description7\r")
	crt.Screen.Send("vlan 170\r")
	crt.Screen.Send(" description description8\r")
	crt.Screen.Send(" name description8\r")               
	crt.Screen.Send("vlan 180\r")
	crt.Screen.Send(" description description9\r")
	crt.Screen.Send(" name description9\r")
	crt.Screen.Send("vlan 200\r")
	crt.Screen.Send(" description description10\r")
	crt.Screen.Send(" name description10\r")
	crt.Screen.Send("vlan 300\r")
	crt.Screen.Send(" description description11\r")
	crt.Screen.Send(" name description11\r")
	crt.Screen.Send("quit\r")
	crt.Screen.WaitForString("]")
	crt.Screen.Send("stp region-configuration\r")
	crt.Screen.Send("region-name desc\r")
	crt.Screen.Send("active region-configuration\r")
	crt.Screen.WaitForString("mst-region]")
	crt.Screen.Send("quit\r")
	crt.Screen.Send("stp instance 0 priority 57344\r")
	crt.Screen.WaitForString("]")
	crt.Screen.Send("interface range GigabitEthernet 0/0/1 to GigabitEthernet 0/0/42\r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("description Users\r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("port link-type hybrid\r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("voice-vlan 100 enable\r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("voice-vlan legacy enable\r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("port hybrid pvid vlan 120\r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("port hybrid tagged vlan 100\r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("port hybrid untagged vlan 120\r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("stp edged-port enable\r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("trust 8021p\r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("storm-control broadcast min-rate 1000 max-rate 1500\r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("storm-control multicast min-rate 1000 max-rate 1500\r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("storm-control action block\r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("storm-control enable trap\r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("quit\r")
	crt.Screen.Send("interface range GigabitEthernet 0/0/43 to GigabitEthernet 0/0/48\r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("description Printers\r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("port link-type access\r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("port default vlan 130\r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("stp edged-port enable\r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("trust 8021p\r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("storm-control broadcast min-rate 1000 max-rate 1500\r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("storm-control multicast min-rate 1000 max-rate 1500\r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("storm-control action block\r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("storm-control enable trap\r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("quit\r")
	crt.Screen.Send("interface range XGigabitEthernet 0/0/1 to XGigabitEthernet 0/0/2\r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("description uplink\r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("port link-type trunk\r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("port trunk allow-pass vlan 100 110 120 130 140 150 160 170 180 200\r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("port trunk allow-pass vlan 300\r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("storm-control broadcast min-rate 1000 max-rate 1500\r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("storm-control multicast min-rate 1000 max-rate 1500\r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("storm-control action block\r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("storm-control enable trap\r")
	crt.Screen.WaitForString("port-group]")
	crt.Screen.Send("quit\r")
	crt.Screen.Send("ntp-service unicast-server 10.10.10.4\r")
	crt.Screen.Send("ntp-service unicast-server 10.10.10.2\r")
	crt.Screen.Send("ntp-service unicast-server 10.10.10.134\r")
	crt.Screen.Send("ip route-static 0.0.0.0 0.0.0.0 10.10.10.254\r")
	crt.Screen.Send("interface Vlanif 200\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]")
	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(" 24\r")
	crt.Screen.Send("quit\r")
	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. Autorisé à accélérer la configuration. La configuration du matériel a été plus rapide avec la fenêtre de commande 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("admin\r")
	crt.Screen.WaitForString("Password:")
	crt.Screen.Send("Password\r")
	crt.Screen.WaitForString(">")
	crt.Screen.Send("sys\r")
	crt.Screen.Send("stelnet server enable\r")
	crt.Screen.Send("aaa\r")
	crt.Screen.Send("local-user admin service-type terminal ftp http ssh\r")
	crt.Screen.Send("quit\r")
	crt.Screen.Send("user-interface vty 0 4\r")
	crt.Screen.Send("authentication-mode aaa\r")
	crt.Screen.Send("quit\r")
	crt.Screen.Send("quit\r")
	crt.Screen.Synchronous = False
main()


À propos de SecureCRT:
: 99$ ( SecureCRT )

1 , ( ), .

Mac OS X Windows.

( )
Command Window
Serial/Telnet/SSH1/SSH2/Shell

All Articles