Automatisierung der Eingabe in SecureCRT mit Hilfe von Skripten

Bei Netzwerkingenieuren besteht oft die Aufgabe, bestimmte Fragmente aus dem Notizblock in die Konsole zu kopieren/einzufügen. Es müssen normalerweise mehrere Parameter kopiert werden: Benutzername/Passwort und etwas anderes. Dieser Prozess kann durch die Verwendung von Skripten beschleunigt werden. ABER die Gesamtzeit für die Erstellung und Ausführung des Skripts muss geringer sein als die manuelle Einrichtung, sonst sind Skripte nutzlos.

Wozu dient dieser Artikel. Dieser Artikel gehört zur Reihe Fast Start und richtet sich an Netzwerkingenieure, die Zeit bei der Einrichtung von Geräten (einer Aufgabe) auf mehreren Geräten sparen möchten. Die Software SecureCRT und die integrierte Skriptfunktionalität werden verwendet.

Inhalt

Einführung

In SecureCRT ist von Haus aus eine Skriptausführungsmechanik integriert. Wofür Skripte im Terminal benötigt werden:

  • Automatisierte Eingabe und Ausgabe sowie minimale Überprüfung der Eingabe/Ausgabe-Korrektheit.
  • Beschleunigung der Durchführung routinemäßiger Aufgaben – Reduzierung der Pausen bei der Konfiguration der Ausrüstung. (De facto Verringerung der Pausen, die durch die Zeit für das Kopieren/Einfügen auf derselben Ausrüstung bei 3 oder mehr Befehlsteilen, die auf die Ausrüstung anzuwenden sind, verursacht werden.)

In diesem Dokument werden folgende Aufgaben behandelt:

  • Erstellung einfacher Skripte.
  • Ausführung von Skripten auf SecureCRT.
  • Beispiele für die Verwendung einfacher und fortgeschrittener Skripte. (Praxis aus dem echten Leben.)

Erstellung einfacher Skripte.

Einfache Skripte verwenden nur zwei Befehle: Send und WaitForString. Diese Funktionalität reicht für 90% (oder mehr) der durchgeführten Aufgaben aus.

Skripte können in Python, JS, VBS (Visual Basic), Perl usw. geschrieben werden.

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

Gewöhnlich handelt es sich bei der Datei um eine mit der Endung „*.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

Gewöhnlich handelt es sich bei der Datei um eine mit der Endung „*.vbs“

Erstellung eines Skripts durch das Aufzeichnen eines Skripts.

Dies ermöglicht die Automatisierung des Schreibprozesses des Skripts. Sie starten die Skriptaufzeichnung. SecureCRT zeichnet die Befehle und die anschließende Antwort des Geräts auf und gibt Ihnen das fertige Skript aus.

a. Skriptaufzeichnung starten:
Menü SecureCRT => Script => Start Recording Script
b. Aktionen mit der Konsole ausführen (Aktionen zur Konfiguration im CLI durchführen).
c. Skriptaufzeichnung beenden:
Menü SecureCRT => Script => Stop Recording Script…
Datei mit dem Skript speichern.

Beispiel ausgeführter Befehle und des gespeicherten Skripts:

Automatisierung der Eingabe in SecureCRT mit Hilfe von Skripten

Ausführung von Skripten auf SecureCRT.

Nach der Erstellung/Bearbeitung des Skripts stellt sich die logische Frage: Wie wird das Skript angewendet?
Es gibt mehrere Möglichkeiten:

  • Manuelle Ausführung aus dem Menü Script
  • Automatische Ausführung nach der Verbindung (Logon-Skript)
  • Automatisches Logon ohne Verwendung eines Skripts
  • Manuelles Starten über eine Schaltfläche in SecureCRT (die Schaltfläche muss noch erstellt und in SecureCRT hinzugefügt werden)

Manuelle Ausführung aus dem Menü Script

Menü SecureCRT => Script => Run…
— Die letzten 10 Skripte werden gespeichert und sind für einen schnellen Zugriff verfügbar:
Menü SecureCRT => Script => 1 „Dateiname des Skripts“
Menü SecureCRT => Script => 2 „Dateiname des Skripts“
Menü SecureCRT => Script => 3 „Dateiname des Skripts“
Menü SecureCRT => Script => 4 „Dateiname des Skripts“
Menü SecureCRT => Script => 5 „Dateiname des Skripts“

Automatische Ausführung nach der Verbindung (Logon-Skript)

Die Einstellungen für das automatische Anmeldeprotokoll werden für die gespeicherte Sitzung konfiguriert: Verbindung => Anmeldeaktionen => Anmeldeskript

Automatisierung der Eingabe in SecureCRT mit Hilfe von Skripten

Automatisches Logon ohne Verwendung eines Skripts

Es besteht die Möglichkeit, den Benutzernamen und das Passwort automatisch einzugeben, ohne ein Skript zu schreiben, indem nur die integrierte Funktionalität von SecureCRT verwendet wird. In den Verbindungseinstellungen "Verbindung" => Anmeldeaktionen => Automatisches Anmelden – müssen mehrere Paarungen ausgefüllt werden, die Paare aus "Erwarteter Text" + "Gesendeten Zeichen zu diesem Text" darstellen. Es kann viele solcher Paare geben. (Beispiel: 1. Paar erwartet Eingabe des Benutzernamens, 2. Paar erwartet Eingabe des Passworts, 3. Paar erwartet Aufforderung zum privilegierten Modus, 4. Passwort für den privilegierten Modus.)

Beispiel für automatisches Anmelden auf Cisco ASA:

Automatisierung der Eingabe in SecureCRT mit Hilfe von Skripten

Manuelles Starten über eine Schaltfläche in SecureCRT (die Schaltfläche muss noch erstellt und in SecureCRT hinzugefügt werden)

In SecureCRT kann ein Skript einer Schaltfläche zugewiesen werden. Die Schaltfläche wird auf einer speziell dafür erstellten Werkzeugleiste hinzugefügt.

a. Fügen Sie die Werkzeugleiste in die Benutzeroberfläche ein: Menü SecureCRT => Ansicht => Schaltflächenleiste
b. Fügen Sie eine Schaltfläche zur Werkzeugleiste hinzu und fügen Sie das Skript hinzu. – Klicken Sie mit der rechten Maustaste auf die Schaltflächenleiste und wählen Sie im Kontextmenü den Punkt „Neue Schaltfläche…“.
c. Wählen Sie im Dialogfeld „Schaltfläche zuordnen“ im Feld „Aktion“ die Aktion (Funktion) „Skript ausführen“.
Geben Sie die Beschriftung für die Schaltfläche an. Farbe für das Schaltflächen-Icon. Beenden Sie die Einstellungen mit einem Klick auf Ok.

Automatisierung der Eingabe in SecureCRT mit Hilfe von Skripten

Hinweis:

Die Schaltflächenleiste ist eine sehr nützliche Funktion.

1. Es besteht die Möglichkeit, bei der Anmeldung an einer bestimmten Sitzung anzugeben, welche Leiste standardmäßig für diesen Tab geöffnet werden soll.

2. Es besteht die Möglichkeit, für Standardaktionen mit der Hardware vordefinierte Aktionen festzulegen: show version, show running-config, Konfiguration speichern.

Automatisierung der Eingabe in SecureCRT mit Hilfe von Skripten
Den Schaltflächen sind keine Skripte zugeordnet. Nur eine Zeile mit Aktionen:

Automatisierung der Eingabe in SecureCRT mit Hilfe von Skripten
Die Einstellungen — damit beim Wechsel zu einer Sitzung die erforderliche Schaltflächenleiste geöffnet wird, erfolgen in den Sitzungseinstellungen:

Automatisierung der Eingabe in SecureCRT mit Hilfe von Skripten
Für den Kunden macht es Sinn, individuelle Skripte für die Anmeldung und den Übergang zur Schaltfläche mit häufigen Befehlen für den Anbieter einzurichten.

Automatisierung der Eingabe in SecureCRT mit Hilfe von Skripten
Bei einem Klick auf die Schaltfläche Go Cisco wechselt die Leiste zur Cisco Button Bar.

Automatisierung der Eingabe in SecureCRT mit Hilfe von Skripten

Beispiele für die Verwendung einfacher und fortgeschrittener Skripte. (Praxis aus dem echten Leben.)

Einfache Skripte reichen für fast alle Lebenslagen aus. Doch einmal musste ich das Skript etwas komplizieren, um die Arbeit zu beschleunigen. Diese Komplizierung forderte lediglich zusätzliche Daten in einem Dialogfenster vom Benutzer an.

Abfrage von Daten beim Benutzer über ein Dialogfenster

In meinem Skript für Datenabfragen gab es 2 Variablen: den Hostnamen und das vierte Oktett der IP-Adresse. Um diese Aufgabe auszuführen, habe ich gegoogelt, wie das geht, und die entsprechende Funktion auf der offiziellen Website von SecureCRT (Vandyke) aufgerufen – das Feature nennt sich prompt.

	crt.Screen.WaitForString("-Vlanif200]")
	hostnamestr = crt.Dialog.Prompt("Hostname eingeben:", "hostname", "", False)
	ipaddressstr = crt.Dialog.Prompt("IP-Adresse eingeben:", "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") 

Dieser Teil des Skripts fragte den Hostnamen und die Zahlen des letzten Oktetts ab. Da ich 15 Geräte hatte und die Daten in einer Tabelle vorlagen, habe ich die Werte aus der Tabelle kopiert und in die Dialogfenster eingefügt. Der Skript lief danach selbstständig weiter.

FTP-Kopieren auf Netzwerkausrüstung.

Dieses Skript öffnete bei mir ein Kommandozeilenfenster (Shell) und kopierte die Daten über FTP. Nach Abschluss der Übertragung schloss es die Sitzung. Die Verwendung eines Notepads ist dafür nicht möglich, da das Kopieren sehr lange dauert und die Daten im FTP-Puffer nicht so lange gespeichert werden.

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

Eingabe von Benutzername/Passwort über ein Skript.

Bei einem Kunden war der Zugriff auf das Netzwerkgerät direkt gesperrt. Um auf das Gerät zuzugreifen, musste man zuerst über das Standard-Gateway verbinden und dann auf das daran angeschlossene Gerät zugreifen. Dafür wurde der in das IOS/Software des Geräts integrierte SSH-Client verwendet. Entsprechend wurden Benutzername und Passwort in der Konsole abgefragt. Mit dem folgenden Skript wurden Benutzername und Passwort automatisch eingegeben:

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

Hinweis: Es gab 2 Skripte. Eins für das Administratorkonto, das andere für das eSIGHT-Konto.

Skript mit der Möglichkeit, während der Ausführung des Skripts Daten direkt zu schreiben.

Die Aufgabe bestand darin, auf allen Netzwerkgeräten eine statische Route hinzuzufügen. Aber das Gateway zum Internet war auf jedem Gerät unterschiedlich (und unterschied sich vom Standard-Gateway). Das folgende Skript gab die Routing-Tabelle aus, wechselte in den Konfigurationsmodus, schrieb den Befehl (IP-Adresse des Gateways zum Internet) nicht vollständig und ich fügte diesen Teil manuell hinzu. Nachdem ich die Eingabetaste drückte, setzte das Skript die Ausführung des Befehls fort.

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

In diesem Skript fehlt in der Zeile: crt.Screen.Send(«ip route 10.10.10.8 255.255.255.252 „) die IP-Adresse des Gateways und das Zeichen für den Zeilenumbruch. Das Skript wartet auf die nächste Zeile mit den Zeichen «(config)#». Diese Zeichen erschienen nach der Eingabe meiner IP-Adresse und drücken.

Fazit:

Beim Schreiben und Ausführen eines Skripts muss unbedingt die Regel beachtet werden: Die Zeit für das Schreiben und Ausführen des Skripts darf niemals länger sein als die theoretisch benötigte Zeit für die manuelle Durchführung derselben Aufgabe (copy/paste aus Notepad, Schreiben und Debuggen eines Playbooks für Ansible, Schreiben und Debuggen eines Python-Skripts). Das heißt, die Verwendung des Skripts sollte Zeit sparen und nicht für die einmalige Automatisierung von Prozessen Zeit kosten (d.h., wenn das Skript einzigartig ist und keine Wiederholung mehr stattfindet). Wenn das Skript jedoch einzigartig ist und die Automatisierung mit dem Skript sowie das Schreiben/Debuggen des Skripts weniger Zeit in Anspruch nehmen als die Ausführung auf andere Weise (Ansible, Eingabefenster), dann ist das Skript die bessere Lösung.
Debuggen des Skripts. Das Skript wächst schrittweise, das Debugging erfolgt an den ersten, zweiten, dritten Geräten, und beim vierten Gerät wird das Skript höchstwahrscheinlich vollständig funktionsfähig sein.

Das Starten des Skripts (mit Eingabe von Benutzername und Passwort) mit der Maus erfolgt normalerweise schneller als das Kopieren von Benutzername und Passwort aus dem Notepad. Allerdings ist es aus Sicherheitsgründen nicht sicher.
Ein weiteres (gewöhnliches) Beispiel für die Verwendung eines Skripts: Sie haben keinen direkten Zugriff auf das Netzwerkgerät, müssen jedoch alle Netzwerkgeräte neu konfigurieren (in das Überwachungssystem einfügen, zusätzliche Benutzername/Passwort/snmpv3username/passwort einstellen). Sie haben Zugang, wenn Sie sich beim Core-Switch anmelden und von dort aus SSH auf andere Geräte öffnen. Warum sollten Ansible-Tools nicht verwendet werden? — Weil wir auf eine Begrenzung der Anzahl der erlaubten gleichzeitigen Sitzungen auf dem Netzwerkgerät stoßen (line vty 0 4, user-interface vty 0 4) (eine andere Frage ist, wie man in Ansible unterschiedliche Geräte mit demselben SSH beim ersten Hop einbindet).

Das Skript verkürzt die Zeit bei langwierigen Vorgängen – wie zum Beispiel beim Kopieren von Dateien über FTP. Nach Abschluss des Kopierens beginnt das Skript sofort zu arbeiten. Der Benutzer muss zunächst das Ende des Kopierens sehen, dann den Abschluss des Kopierens verstehen und schließlich die entsprechenden Befehle eingeben. Das Skript erledigt das objektiv schneller.

Skripte sind dort anwendbar, wo Datenübertragungsmedien nicht genutzt werden können: Konsole. Oder wenn Teile der Daten für die Geräte einzigartig sind: hostname, management ip address. Oder wenn es komplizierter ist, ein Programm zu schreiben und zu debuggen, als die während der Ausführung des Skripts erhaltenen Daten zu ergänzen. — Ein Beispiel mit einem Skript zur Routenvergabe, wenn jeder Internetanbieter IP-Adresse bei jedem Gerät unterschiedlich ist. (Meine Kollegen haben solche Skripte geschrieben — als das DMVPN-Spoke über 300 Geräte hatte. Es war notwendig, die DMVPN-Einstellungen zu ändern.)

Ein praktisches Beispiel: Anfangseinstellungen auf einem neuen Switch über die Konsolenports festlegen:

A. Den Konsolenkabel in das Gerät eingesteckt.
B. Das Skript gestartet.
C. Auf die Ausführung des Skripts gewartet.
D. Das Konsolenkabel in das nächste Gerät umgesteckt.
E. Wenn der Switch nicht der letzte ist, zu Punkt B wechseln.

Zusammenfassend nach der Ausführung des Skripts:

  • auf dem Gerät wurde ein Initialpasswort festgelegt.
  • der Username wurde eingegeben.
  • eine einzigartige IP-Adresse des Geräts wurde eingegeben.

P. S. Der Vorgang musste wiederholt werden, da standardmäßig ssh nicht konfiguriert/ausgeschaltet war. (Ja, das war mein Fehler.)

Verwendete Quellen.

1. Über die Erstellung von Skripten.
2. Beispiele für Skripte.

Anwendung 1: Beispiele für Skripte.


Beispiel eines langen Skripts mit zwei Anfragen: Hostname und IP-Adresse. Es wurde erstellt, um die Geräte über die Konsole (9600 Baud) vorzubereiten. Zudem diente es zur Vorbereitung des Anschlusses der Geräte ans Netzwerk.

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

Solche Skripte sind normalerweise nicht notwendig, aber die Anzahl der Geräte – 15 Stück – ermöglichte eine schnellere Einrichtung. Die weitere Konfiguration der Geräte war mit Hilfe des SecureCRT-Befehlsfensters schneller.

Einrichtung des Kontos für SSH.

Ein weiteres Beispiel. Konfiguration ebenfalls über die Konsole.

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


Über SecureCRT:Kostenpflichtige Software: ab 99 $ (der niedrigste Preis gilt nur für SecureCRT für ein Jahr)
Offizielle Website
Die Softwarelizenz wird einmalig erworben, mit Support (für Updates), danach kann die Software mit dieser Lizenz unbegrenzt genutzt werden.

Funktioniert unter den Betriebssystemen Mac OS X und Windows.

Es gibt Skriptunterstützung (dieser Artikel)
Es gibt Befehlsfenster
Seriell/Telnet/SSH1/SSH2/Shell des Betriebssystems

Quelle: habr.com

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster