Netzwerktechniker stehen häufig vor der Aufgabe, bestimmte Fragmente aus einem Notizbuch in die Konsole zu kopieren. In der Regel müssen mehrere Parameter kopiert werden: Benutzername/Passwort und möglicherweise noch etwas anderes. Die Verwendung von Skripten kann diesen Prozess beschleunigen. ABER die Aufgaben, das Skript zu schreiben und das Skript auszuführen, sollten insgesamt weniger Zeit in Anspruch nehmen als die manuelle Konfiguration, sonst sind die Skripte nutzlos.
Wozu ist dieser Artikel gut? Dieser Artikel gehört zur Reihe Fast Start und zielt darauf ab, Netzwerktechnikern Zeit zu sparen, wenn sie Geräte (eine Aufgabe) auf mehreren Geräten konfigurieren. Es wird die Software SecureCRT und die integrierte Skriptausführungsfunktionalität verwendet.
Inhalt
Einführung
In SecureCRT ist aus der Box heraus ein Mechanismus zur Ausführung von Skripten integriert. Wofür sind Skripte im Terminal nützlich:
- Automatisierte Eingabe und Ausgabe sowie minimale Überprüfung der Richtigkeit von Eingaben/Ausgaben.
- Die Durchführung routinierter Aufgaben beschleunigen – Verringerung der Pausen zwischen der Konfiguration von Geräten. (De facto Verringerung der Pausen, die dadurch verursacht werden, dass Zeit für die Ausführung von Aktionen durch Copy/Paste auf demselben Gerät bei 3 oder mehr Befehlsfragmenten benötigt wird.)
In diesem Dokument werden die folgenden Aufgaben behandelt:
- Erstellung einfacher Skripte.
- Ausführung von Skripten in SecureCRT.
- Beispiele für die Verwendung einfacher und fortgeschrittener Skripte. (Praxis aus dem realen Leben.)
Erstellung einfacher Skripte.
Einfache Skripte verwenden lediglich zwei Befehle: Send und WaitForString. Diese Funktionalität reicht für 90% (und mehr) der durchzuführenden 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()
Normalerweise eine Datei mit der Erweiterung „*.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
Normalerweise eine Datei mit der Erweiterung „*.vbs“
Erstellung eines Skripts durch das Aufzeichnen eines Skripts.
Es ermöglicht die Automatisierung des Schreibprozesses eines Skripts. Sie starten die Skriptaufzeichnung. SecureCRT zeichnet die Befehle und die anschließenden Antworten des Geräts auf und gibt Ihnen ein fertiges Skript aus.
a. Starten Sie die Skriptaufzeichnung:
Menü SecureCRT => Skript => Skriptaufzeichnung starten
b. Führen Sie Aktionen mit der Konsole aus (führen Sie die Konfiguration im CLI durch).
c. Beenden Sie die Skriptaufzeichnung:
Menü SecureCRT => Skript => Skriptaufzeichnung stoppen…
Speichern Sie die Datei mit dem Skript.
Beispiel für ausgeführte Befehle und das gespeicherte Skript:

Ausführung von Skripten in SecureCRT.
Nach der Erstellung/Bearbeitung eines Skripts stellt sich die naheliegende Frage: Wie wendet man das Skript an?
Es gibt mehrere Möglichkeiten:
- Manuelles Ausführen aus dem Menü Skript
- Automatische Ausführung nach der Verbindung (Logon-Skript)
- Automatisches Logon ohne Verwendung eines Skripts
- Manuelle Ausführung über eine Taste in SecureCRT (die Taste muss noch erstellt und in SecureCRT hinzugefügt werden)
Manuelles Ausführen aus dem Menü Skript
Menü SecureCRT => Skript => Ausführen…
— Die letzten 10 Skripts werden gespeichert und stehen für einen schnellen Start zur Verfügung:
Menü SecureCRT => Skript => 1 „Dateiname des Skripts“
Menü SecureCRT => Skript => 2 „Dateiname des Skripts“
Menü SecureCRT => Skript => 3 „Dateiname des Skripts“
Menü SecureCRT => Skript => 4 „Dateiname des Skripts“
Menü SecureCRT => Skript => 5 „Dateiname des Skripts“
Automatische Ausführung nach der Verbindung (Logon-Skript)
Die Einstellungen für das automatische Skript-Logging werden für die gespeicherte Sitzung konfiguriert: Verbindung => Anmeldeaktionen => Anmeldeskript

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 => Automatisierung der Anmeldung – müssen mehrere Paare ausgefüllt werden, die erwarteten Text + gesendete Zeichen für diesen Text beinhalten. Es können viele solcher Paare existieren. (Beispiel: 1. Paar wartet auf Eingabe des Benutzernamens, 2. Paar wartet auf Eingabe des Passworts, 3. Paar wartet auf die Eingabeaufforderung im privilegierten Modus, 4. Passwort für den privilegierten Modus.)
Beispiel für automatisches Logon auf Cisco ASA:

Manuelle Ausführung über eine Taste in SecureCRT (die Taste 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 zur Benutzeroberfläche hinzu: Menü SecureCRT => Ansicht => Schaltflächenleiste
b. Fügen Sie der Werkzeugleiste eine Schaltfläche hinzu und weisen Sie das Skript zu. – Klicken Sie mit der rechten Maustaste auf die Schaltflächenleiste und wählen Sie im Kontextmenü „Neue Schaltfläche…“.
c. Wählen Sie im Dialogfeld „Schaltfläche zuordnen“ im Feld „Aktion“ die Funktion „Skript ausführen“.
Wir geben die Beschriftung für die Schaltfläche an. Die Farbe für das Schaltflächensymbol. Wir beenden die Einstellungen mit einem Klick auf Ok.

Hinweis:
Die Schaltflächenleiste ist eine sehr nützliche Funktion.
1. Es gibt die Möglichkeit, beim Logon zu einer bestimmten Sitzung anzugeben, welche Leiste standardmäßig für diesen Tab geöffnet werden soll.
2. Es besteht die Möglichkeit, vordefinierte Aktionen für Standardaktionen mit der Hardware festzulegen: show version, show running-config, konfiguriere die Konfiguration.

Auf diese Schaltflächen ist kein Skript gebunden. Nur eine Zeile mit Aktionen:

Die Einstellung – damit beim Umschalten auf die Sitzung die erforderliche Schaltflächenleiste geöffnet wird, erfolgt in den Sitzungseinstellungen:

Für den Kunden macht es Sinn, individuelle Skripte für den Login und den Wechsel zur Leiste mit häufigen Befehlen für den Anbieter zu konfigurieren.
![]()
Beim Klicken auf die Schaltfläche Go Cisco wechselt die Leiste zur Cisco Button Bar.

Beispiele für die Verwendung einfacher und fortgeschrittener Skripte. (Praxis aus dem realen Leben.)
Einfache Skripte reichen fast für alle Lebenslagen aus. Aber einmal musste ich das Skript etwas komplizierter gestalten – um die Arbeit zu beschleunigen. Diese Komplikation bestand lediglich darin, zusätzliche Daten in einem Dialogfeld beim Benutzer zu erfragen.
Abfrage von Daten beim Benutzer über ein Dialogfenster
In meinem Datenerfassungs-Skript gab es 2 Abfragen. Das waren der Hostname und die 4. Oktette der IP-Adresse. Um diese Aktion auszuführen, habe ich gegoogelt, wie man das macht, und auf der offiziellen Website von SecureCRT (vandyke) einen Funktionsaufruf gefunden, der als prompt bezeichnet wird.
crt.Screen.WaitForString("-Vlanif200]")
hostnamestr = crt.Dialog.Prompt("Geben Sie den Hostnamen ein:", "hostname", "", False)
ipaddressstr = crt.Dialog.Prompt("Geben Sie die IP-Adresse ein:", "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 nach dem Hostnamen und den Ziffern des letzten Oktetts. Da es 15 Geräte gab und die Daten in einer Tabelle vorlagen, kopierte ich die Werte aus der Tabelle und fügte sie in die Dialogfenster ein. Danach arbeitete das Skript selbstständig weiter.
FTP-Kopieren auf Netzwerkausrüstung.
Dieses Skript öffnete bei mir eine Eingabeaufforderung (shell) und übertrug Daten über FTP. Nach Abschluss schloss es die Sitzung. Notepad für diesen Zweck zu verwenden, ist nicht möglich, da das Kopieren sehr lange dauert und die Daten im FTP-Puffer nicht so lange gespeichert bleiben:
# $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 mithilfe eines Skripts
Bei einem Auftraggeber war der Zugang zur Netzwerkausrüstung direkt gesperrt. Man konnte nur auf die Ausrüstung zugreifen, indem man sich zunächst mit dem Standardgateway verband und dann von dort aus auf die angeschlossene Ausrüstung zuging. Für die Verbindung wurde der in IOS/Software integrierte SSH-Client verwendet. Folglich 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. Eines 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 ergänzen.
Die Aufgabe bestand darin, auf der gesamten Netzwerkausrüstung eine statische Route hinzuzufügen. Aber das Gateway zum Internet war auf jedem Gerät unterschiedlich (und unterschied sich vom Standardgateway). Das folgende Skript gab die Routingtabelle aus, ließ den Konfigurationsmodus eintreten, ergänzte den Befehl (IP-Adresse des Internetgateways) nicht vollständig – diesen Teil ergänzte ich. Nachdem ich die Eingabetaste gedrückt hatte, 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 in der Zeile: crt.Screen.Send(„ip route 10.10.10.8 255.255.255.252 „) fehlt die IP-Adresse des Gateways und das Zeilenumbruchzeichen. Das Skript wartet auf das Erscheinen der nächsten Zeile mit den Zeichen „(config)#“. Diese Zeichen erschienen, nachdem ich die IP-Adresse eingegeben und Enter gedrückt hatte.
Fazit:
Beim Schreiben und Ausführen des Skripts muss unbedingt die Regel beachtet werden: Die Zeit, die für das Schreiben und Ausführen des Skripts benötigt wird, darf niemals länger sein als die theoretisch für die manuelle Ausführung derselben Arbeit benötigte Zeit (copy/paste aus dem 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 eine einmalige Automatisierung der Prozesse aufgewendet werden (d. h. wenn das Skript einzigartig ist und keine Wiederholungen mehr stattfinden). Wenn das Skript jedoch einzigartig ist und die Automatisierung mit dem Skript und das Schreiben/Debuggen des Skripts weniger Zeit in Anspruch nimmt als die Ausführung auf andere Weise (Ansible, Eingabeaufforderung), dann ist das Skript die beste Lösung.
Debugging des Skripts. Das Skript wächst schrittweise, das Debugging erfolgt in der Erprobung an dem ersten, zweiten, dritten Gerät und beim vierten wird das Skript wahrscheinlich vollständig funktionsfähig sein.
Das Ausführen des Skripts (mit Eingabe von Benutzername + Passwort) mit der Maus erfolgt in der Regel schneller als das Kopieren aus dem Notizbuch von Benutzername und Passwort. Aber es ist nicht sicher aus Sicht der Sicherheit.
Ein weiteres (reales) Beispiel für die Verwendung eines Skripts: Sie haben keinen direkten Zugang zu Ihrem Netzwerkgerät. Es besteht jedoch die Notwendigkeit, alle Netzwerkgeräte neu zu konfigurieren (in das Überwachungssystem einzufügen, zusätzliche Benutzername/Passwort/snmpv3benutzername/Passwort zu konfigurieren). Es gibt Zugang, wenn Sie sich in den Core-Switch einloggen und von dort SSH zu anderen Geräten öffnen. Warum können Ansible-Tools nicht verwendet werden? — Weil wir an die Begrenzung der zulässigen gleichzeitigen Sitzungen auf den Netzwerkgeräten stoßen (line vty 0 4, user-interface vty 0 4) (eine andere Frage ist, wie man in Ansible verschiedene Geräte mit demselben SSH als ersten Hop einfügt).
Das Skript reduziert die Zeit bei langen Operationen – zum Beispiel beim Kopieren von Dateien über FTP. Nach dem Abschluss des Kopierens beginnt das Skript sofort mit der Ausführung. Eine Person muss den Abschluss des Kopierens sehen, dann das Ende des Kopiervorgangs realisieren und danach die entsprechenden Befehle eingeben. Das Skript erledigt dies objektiv schneller.
Skripte sind dort anwendbar, wo Massendatenübertragungswerkzeuge nicht eingesetzt werden können: Konsole. Oder wenn ein Teil der Daten für das Gerät einzigartig ist: hostname, management IP-Adresse. Oder wenn es schwieriger ist, ein Programm zu schreiben und zu debuggen, als die während des Skriptbetriebs erhaltenen Daten in das Skript einzufügen. — Ein Beispiel mit einem Skript zur Konfiguration einer Route, wenn jede Hardware eine eigene IP-Adresse des Internetanbieters hat. (Meine Kollegen haben solche Skripte geschrieben – als das DMVPN-Spoke über 300 betrug. Es war nötig, die DMVPN-Einstellungen zu ändern).
Beispiel aus der Praxis: Festlegen der anfänglichen Einstellungen auf einem neuen Switch über die Konsolenports:
A. Ich habe das Konsolenkabel in das Gerät eingesteckt.
B. Ich habe das Skript gestartet.
C. Ich habe gewartet, bis das Skript ausgeführt wurde.
D. Ich habe das Konsolenkabel in das nächste Gerät umgesteckt.
E. Wenn der Switch nicht der letzte ist, gehen Sie zu Punkt B.
Zusammenfassend kann man sagen, dass nach dem Skriptbetrieb:
- auf dem Gerät das anfängliche Passwort festgelegt wurde.
- der Benutzername eingegeben wurde.
- eine eindeutige IP-Adresse für das Gerät eingegeben wurde.
P.S. Die Operation musste wiederholt werden, da standardmäßig SSH nicht konfiguriert / deaktiviert war. (Ja, das war mein Fehler.)
Verwendete Quellen.
1.
2.
Anhang 1: Beispiele für Skripte.
Beispiel eines langen Skripts mit zwei Abfragen: Hostname und IP-Adresse. Wurde erstellt, um die Konfiguration von Geräten über die Konsole (9600 Baud) vorzunehmen. Und auch, um die Verbindung von Geräten mit dem Netzwerk vorzubereiten.
# $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 erforderlich, aber die Anzahl der Geräte - 15 Stück. Hat die Konfiguration beschleunigt. Das Konfigurieren der Geräte wurde danach mit Hilfe des SecureCRT-Kommandofensters schneller.
Einrichtung des Kontos für SSH.
Ein weiteres Beispiel. Einrichtung 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)
Die Lizenz für die Software wird einmalig erworben, mit Unterstützung (für Updates), danach kann die Software mit dieser Lizenz unbegrenzt verwendet werden.
Läuft auf den Betriebssystemen Mac OS X und Windows.
Es gibt Unterstützung für Skripte (diesen Artikel)
Ja
Serial/Telnet/SSH1/SSH2/Shell des Betriebssystems
Quelle: habr.com
