Automatisering af indtastning i SecureCRT ved hjælp af scripts

Netværksingeniører står ofte over for opgaven med at kopiere/indsætte bestemte fragmenter fra en notesblok til konsollen. Du skal normalt kopiere flere parametre: Brugernavn/Password og noget andet. Brugen af ​​scripts giver dig mulighed for at fremskynde denne proces. MEN opgaverne med at skrive scriptet og udføre scriptet bør i alt tage kortere tid end manuel konfiguration, ellers er scripts ubrugelige.

Hvad er denne artikel til? Denne artikel er fra Fast Start-serien og har til formål at spare netværksingeniører for tid, når de opsætter udstyr (enkelt opgave) på flere enheder. Bruger SecureCRT-software og indbygget scriptudførelsesfunktionalitet.

Indhold

Indledning

SecureCRT-programmet har en indbygget script-udførelsesmekanisme ud af kassen. Hvad er terminalscripts til?

  • Automatiseret I/O og minimal I/O-validering.
  • Fremskynd udførelsen af ​​rutineopgaver - reducer pauser mellem udstyrsindstillinger. (De facto reduktion af pauser forårsaget af tid til at udføre kopierings-/tidligere handlinger på den samme hardware, med 3 eller flere kommandofragmenter, der skal anvendes på hardware.)

Dette dokument dækker opgaverne:

  • Oprettelse af simple scripts.
  • Kører scripts på SecureCRT.
  • Eksempler på brug af simple og avancerede scripts. (Øv fra det virkelige liv.)

Oprettelse af simple scripts.

De enkleste scripts bruger kun to kommandoer, Send og WaitForString. Denne funktionalitet er nok til 90 % (eller mere) af de udførte opgaver.

Scripts kan fungere i Python, JS, VBS (Visual Basic), Perl osv.

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

Normalt en fil med filtypenavnet "*.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

Normalt en fil med filtypenavnet "*.vbs"

Opret et script ved hjælp af en scriptindgang.

Giver dig mulighed for at automatisere processen med at skrive et script. Du begynder at skrive et manuskript. SecureCRT registrerer kommandoerne og det efterfølgende hardwaresvar og viser det færdige script for dig.

EN. Begynd at skrive script:
SecureCRT Menu => Script => Start optagelse af script
b. Udfør handlinger med konsollen (udfør konfigurationstrin i CLI).
V. Afslut med at skrive manuskriptet:
SecureCRT Menu => Script => Stop optagelse af script...
Gem script-filen.

Eksempel på udførte kommandoer og gemt script:

Automatisering af indtastning i SecureCRT ved hjælp af scripts

Kører scripts på SecureCRT.

Efter oprettelse/redigering af scriptet opstår et naturligt spørgsmål: Hvordan anvender man scriptet?
Der er flere måder:

  • Kører manuelt fra Script-menuen
  • Automatisk start efter tilslutning (logon script)
  • Automatisk logon uden brug af et script
  • Udløses manuelt med en knap i SecureCRT (en knap er endnu ikke oprettet og tilføjet til SecureCRT)

Kører manuelt fra Script-menuen

SecureCRT Menu => Script => Kør...
- De sidste 10 scripts huskes og er tilgængelige for hurtig lancering:
SecureCRT menu => Script => 1 "Script filnavn"
SecureCRT menu => Script => 2 "Script filnavn"
SecureCRT menu => Script => 3 "Script filnavn"
SecureCRT menu => Script => 4 "Script filnavn"
SecureCRT menu => Script => 5 "Script filnavn"

Automatisk start efter tilslutning (logon script)

Indstillinger for automatisk logning script er konfigureret for den gemte session: Forbindelse => Logon handlinger => Logon script

Automatisering af indtastning i SecureCRT ved hjælp af scripts

Automatisk logon uden brug af et script

Det er muligt automatisk at indtaste brugernavnet på adgangskoden uden at skrive et script, kun ved at bruge den indbyggede funktionalitet i SecureCRT. I forbindelsesindstillingerne “Connection” => Logon Actions => Automatiser logon - du skal udfylde flere bundter - hvilket betyder parrene: “Forventet tekst” + “Sendte tegn til denne tekst” kan der være mange sådanne par. (Eksempel: 1. par venter på brugernavn, andet venter på adgangskode, tredje venter på prompt i privilegeret tilstand, fjerde par på adgangskode til privilegeret tilstand.)

Eksempel på automatisk logon på Cisco ASA:

Automatisering af indtastning i SecureCRT ved hjælp af scripts

Udløses manuelt med en knap i SecureCRT (en knap er endnu ikke oprettet og tilføjet til SecureCRT)

I SecureCRT kan du tildele et script til en knap. Knappen føjes til et panel, der er specielt oprettet til dette formål.

EN. Tilføjelse af et panel til grænsefladen: SecureCRT Menu => View => Button Bar
b. Tilføj en knap til panelet og tilføj et script. – Højreklik på knaplinjen og vælg "Ny knap..." fra kontekstmenuen.
V. I dialogboksen "Kortknap" i feltet "Handling" skal du vælge handlingen "Kør script" (funktionen).
Angiv en billedtekst til knappen. Farven på knapikonet. Afslut indstillingerne ved at klikke på Ok.

Automatisering af indtastning i SecureCRT ved hjælp af scripts

Note:

Panelet med knapper er meget nyttig funktionalitet.

1. Det er muligt, når du logger på en specifik session, at angive, hvilket panel der skal åbnes for denne fane som standard.

2. Det er muligt at indstille foruddefinerede handlinger for standardhandlinger med udstyr: vis vis version, vis running-config, gem konfiguration.

Automatisering af indtastning i SecureCRT ved hjælp af scripts
Der er ikke knyttet noget script til disse knapper. Kun handlingslinje:

Automatisering af indtastning i SecureCRT ved hjælp af scripts
Indstilling - så når du skifter til en session, åbnes det nødvendige panel med knapper i sessionsindstillingerne:

Automatisering af indtastning i SecureCRT ved hjælp af scripts
Det giver mening for kunden at opsætte individuelle scripts til Login og gå til panelet med hyppige kommandoer til leverandøren.

Automatisering af indtastning i SecureCRT ved hjælp af scripts
Når du trykker på Go Cisco-knappen, skifter panelet til Cisco Button Bar.

Automatisering af indtastning i SecureCRT ved hjælp af scripts

Eksempler på brug af simple og avancerede scripts. (Øv fra det virkelige liv.)

Simple scripts er nok til næsten alle lejligheder. Men engang havde jeg brug for at komplicere manuskriptet lidt – for at sætte fart på arbejdet. Denne komplikation anmodede blot om yderligere data i en dialogboks fra brugeren.

Anmodning om data fra brugeren ved hjælp af en dialogboks

Jeg havde 2 i dataanmodningsscriptet. Dette er værtsnavnet og den 4. oktet af IP-adressen. For at udføre denne handling - googlede jeg hvordan man gør det og fandt det på den officielle hjemmeside for SecureCRT (vandyke). - funktionaliteten kaldes prompt.

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

Denne del af scriptet bad om værtsnavn og numre fra den sidste oktet. Da der var 15 stykker udstyr. Og dataene blev præsenteret i en tabel, så kopierede jeg værdierne fra tabellen og indsatte dem i dialogboksene. Desuden fungerede manuskriptet selvstændigt.

FTP kopiering til netværksudstyr.

Dette script lancerede mit kommandovindue (shell) og kopierede data via FTP. Luk sessionen til sidst. Det er umuligt at bruge notesblok til dette, fordi kopiering tager meget lang tid, og dataene i FTP-bufferen vil ikke blive gemt så længe:

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

Indtastning af brugernavn/adgangskode ved hjælp af et script

Hos en kunde blev adgangen til netværksudstyr direkte lukket. Det var muligt at komme ind i udstyret ved først at oprette forbindelse til Default Gateway, og fra det derefter til det tilsluttede udstyr. ssh-klienten indbygget i IOS/hardwaresoftwaren blev brugt til at oprette forbindelse. Derfor blev brugernavnet og adgangskoden anmodet i konsollen. Med nedenstående script blev brugernavn og adgangskode indtastet automatisk:

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

Bemærk: Der var 2 scripts. Et til administratorkontoen og det andet til eSIGHT-kontoen.

Script med mulighed for direkte at tilføje data under scriptudførelse.

Opgaven var at tilføje en statisk rute på alt netværksudstyr. Men gatewayen til internettet på hvert udstyr var forskellig (og den adskilte sig fra standardgatewayen). Følgende script viste routingtabellen, gik ind i konfigurationstilstanden, skrev ikke kommandoen til slutningen (IP-adressen på gatewayen til internettet) - jeg tilføjede denne del. Efter jeg trykkede på Enter, fortsatte scriptet med at udføre kommandoen.

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

I dette script, i linjen: crt.Screen.Send("ip-rute 10.10.10.8 255.255.255.252 ") er IP-adressen på gatewayen ikke tilføjet, og der er intet vognreturtegn. Scriptet venter på næste linje med tegnene "(config) #" Disse tegn dukkede op efter at jeg indtastede ip-adressen og indtastede.

Konklusion:

Når du skriver et script og udfører det, skal reglen følges: Tiden til at skrive et script og udføre et script bør aldrig være mere end den tid, der teoretisk bruges på at udføre det samme arbejde manuelt (copy/paste fra en notesblok, skrivning og fejlretning) en spillebog til ansible, skrivning og fejlretning af python-script). Det vil sige, at brugen af ​​scriptet skal spare tid, og ikke spilde tid på engangsautomatisering af processer (dvs. når scriptet er unikt, og der ikke vil være flere gentagelser). Men hvis scriptet er unikt og automatisering med scriptet og skrivning/fejlretning af scriptet tager mindre tid end at gøre det på nogen anden måde (ansible, kommandovindue), så er scriptet den bedste løsning.
Fejlretning af et script. Scriptet vokser gradvist, debugging finder sted ved indkøring på den første, anden, tredje enhed, og på den fjerde vil scriptet højst sandsynligt være fuldt operationelt.

At køre et script (ved at indtaste brugernavn+adgangskode) med musen er normalt hurtigere end at kopiere brugernavn og adgangskode fra en notesblok. Men ikke sikkert ud fra et sikkerhedsmæssigt synspunkt.
Et andet (rigtigt) eksempel ved brug af et script: Du har ikke direkte adgang til netværksudstyr. Men der er behov for at konfigurere alt netværksudstyr (bring det ind i overvågningssystemet, konfigurer et ekstra brugernavn/adgangskode/snmpv3brugernavn/adgangskode). Der er adgang når du går til Core switchen, fra den åbner du SSH til andet udstyr. Hvorfor kan du ikke bruge Ansible. - Fordi vi løber ind i en grænse for antallet af tilladte samtidige sessioner på netværksudstyr (linje vty 0 4, brugergrænseflade vty 0 4) (et andet spørgsmål er, hvordan man starter forskelligt udstyr i Ansible med det samme SSH første hop).

Scriptet reducerer tid under lange operationer - for eksempel kopiering af filer via FTP. Når kopieringen er afsluttet, begynder scriptet straks at virke. En person bliver nødt til at se slutningen af ​​kopieringen, derefter indse slutningen af ​​kopieringen og derefter indtaste de relevante kommandoer. Scriptet gør det objektivt hurtigere.

Scripts er anvendelige, hvor det er umuligt at bruge værktøjer til massedatalevering: Konsol. Eller når nogle af dataene for udstyret er unikke: værtsnavn, administrations-ip-adresse. Eller når man skriver et program og fejlretter, er det sværere end at tilføje data modtaget fra udstyret, mens scriptet kører. - Et eksempel med et script til at foreskrive en rute, når hvert udstyr har sin egen IP-adresse hos internetudbyderen. (Mine kolleger skrev sådanne scripts - da DMVPN talte var over 3. Det var nødvendigt at ændre DMVPN-indstillingerne).

Casestudie: Konfiguration af indledende indstillinger på en ny switch ved hjælp af konsolportene:

A. Tilslut konsolkablet til enheden.
B. Kør scriptet
B. Ventede på udførelsen af ​​scriptet
D. Tilslut konsolkablet til den næste enhed.
E. Hvis kontakten ikke er den sidste, skal du gå til trin B.

Som et resultat af manuskriptets arbejde:

  • den oprindelige adgangskode er indstillet på udstyret.
  • Brugernavn indtastet
  • enhedens unikke IP-adresse indtastes.

PS operationen skulle gentages. Fordi standard ssh ikke var konfigureret/deaktiveret. (Ja, det er min fejl.)

Brugte kilder.

1. Om at lave scripts
2. Script eksempler

Bilag 1: Eksempel scripts.


Et eksempel på et langt script med to forespørgsler: Værtsnavn og IP-adresse. Den blev skabt til forudindstilling af udstyr gennem konsollen (9600 baud). Og også for at forberede tilslutningen af ​​udstyr til netværket.

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

Sådanne scripts er normalt ikke nødvendige, men mængden af ​​udstyr er 15 stk. Tilladt hurtigere opsætning. Det var hurtigere at sætte udstyret op ved hjælp af SecureCRT Command-vinduet.

Oprettelse af en konto til ssh.

Et andet eksempel. Konfiguration sker også via konsollen.

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


Om SecureCRT:Betalt software: fra $99 (den mindste pris er kun for SecureCRT i et år)
Den officielle hjemmeside
En softwarelicens købes én gang med support (til opdatering), derefter bruges softwaren med denne licens i ubegrænset tid.

Virker på Mac OS X og Windows operativsystemer.

Der er script-understøttelse (denne artikel)
Der er Kommandovindue
Seriel/Telnet/SSH1/SSH2/Shell-operativsystem

Kilde: www.habr.com