Automatisere oppføring i SecureCRT ved hjelp av skript

Nettverksingeniører står ofte overfor oppgaven med å kopiere/lime inn visse fragmenter fra en notisblokk til konsollen. Du må vanligvis kopiere flere parametere: Brukernavn/Passord og noe annet. Bruken av skript lar deg fremskynde denne prosessen. MEN oppgavene med å skrive skriptet og utføre skriptet bør ta kortere tid totalt enn manuell konfigurasjon, ellers er skriptene ubrukelige.

Hva er denne artikkelen for? Denne artikkelen er fra Fast Start-serien og har som mål å spare nettverksingeniører for tid når de setter opp utstyr (enkeltoppgave) på flere enheter. Bruker SecureCRT-programvare og innebygd skriptutførelsesfunksjonalitet.

Innhold

Innledning

SecureCRT-programmet har en innebygd skriptutførelsesmekanisme rett ut av esken. Hva er terminalskript til?

  • Automatisert I/O, og minimal I/O-validering.
  • Få fart på utførelsen av rutineoppgaver - reduser pauser mellom utstyrsinnstillinger. (De facto reduksjon av pauser forårsaket av tid for å utføre kopiering/tidligere handlinger på samme maskinvare, med 3 eller flere kommandofragmenter som skal brukes på maskinvaren.)

Dette dokumentet dekker oppgavene:

  • Oppretting av enkle skript.
  • Kjører skript på SecureCRT.
  • Eksempler på bruk av enkle og avanserte skript. (Trening fra det virkelige liv.)

Oppretting av enkle skript.

De enkleste skriptene bruker bare to kommandoer, Send og WaitForString. Denne funksjonaliteten er nok for 90 % (eller mer) av oppgavene som utføres.

Skript kan fungere i Python, JS, VBS (Visual Basic), Perl, etc.

Python

# $language = "Python"
# $interface = "1.0"
def main():
  crt.Screen.Synchronous = True
  crt.Screen.Send("r")
  crt.Screen.WaitForString("name")
  crt.Screen.Send("adminr")
  crt.Screen.WaitForString("Password:")
  crt.Screen.Send("Password")
  crt.Screen.Synchronous = False
main()

Vanligvis en fil med filtypen "*.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

Vanligvis en fil med filtypen "*.vbs"

Lag et skript ved å bruke en skriptoppføring.

Lar deg automatisere prosessen med å skrive et skript. Du begynner å skrive et manus. SecureCRT registrerer kommandoene og det påfølgende maskinvaresvaret og viser det ferdige skriptet for deg.

EN. Begynn å skrive manus:
SecureCRT-meny => Skript => Start opptak av skript
b. Utfør handlinger med konsollen (utfør konfigurasjonstrinn i CLI).
V. Skriv ferdig manuset:
SecureCRT-meny => Skript => Stopp opptak av skript...
Lagre skriptfilen.

Eksempel på utførte kommandoer og lagret skript:

Automatisere oppføring i SecureCRT ved hjelp av skript

Kjører skript på SecureCRT.

Etter å ha opprettet/redigert skriptet, dukker det opp et logisk spørsmål: Hvordan bruker man skriptet?
Det er flere måter:

  • Kjøres manuelt fra Script-menyen
  • Automatisk start etter tilkobling (påloggingsskript)
  • Automatisk pålogging uten bruk av skript
  • Utløses manuelt med en knapp i SecureCRT (en knapp er ennå ikke opprettet og lagt til SecureCRT)

Kjøres manuelt fra Script-menyen

SecureCRT-meny => Skript => Kjør...
- De siste 10 skriptene huskes og er tilgjengelige for hurtigstart:
SecureCRT-meny => Skript => 1 "Skriptfilnavn"
SecureCRT-meny => Skript => 2 "Skriptfilnavn"
SecureCRT-meny => Skript => 3 "Skriptfilnavn"
SecureCRT-meny => Skript => 4 "Skriptfilnavn"
SecureCRT-meny => Skript => 5 "Skriptfilnavn"

Automatisk start etter tilkobling (påloggingsskript)

Innstillinger for automatisk loggingsskript er konfigurert for den lagrede økten: Tilkobling => Påloggingshandlinger => Påloggingsskript

Automatisere oppføring i SecureCRT ved hjelp av skript

Automatisk pålogging uten bruk av skript

Det er mulig å automatisk skrive inn brukernavnet til passordet uten å skrive et skript, kun ved å bruke den innebygde funksjonaliteten til SecureCRT. I tilkoblingsinnstillingene "Tilkobling" => Påloggingshandlinger => Automatiser pålogging - du må fylle ut flere bunter - som betyr parene: "Forventet tekst" + "Sendte tegn til denne teksten" kan det være mange slike par. (Eksempel: 1. par venter på brukernavn, andre venter på passord, tredje venter på privilegert modus-forespørsel, fjerde par for privilegert modus passord.)

Eksempel på automatisk pålogging på Cisco ASA:

Automatisere oppføring i SecureCRT ved hjelp av skript

Utløses manuelt med en knapp i SecureCRT (en knapp er ennå ikke opprettet og lagt til SecureCRT)

I SecureCRT kan du tilordne et skript til en knapp. Knappen legges til et panel spesielt laget for dette formålet.

EN. Legge til et panel til grensesnittet: SecureCRT Menu => View => Button Bar
b. Legg til en knapp på panelet og legg til et skript. – Høyreklikk på knappelinjen og velg "Ny knapp..." fra hurtigmenyen.
V. I "Kartknapp"-dialogboksen, i "Handling"-feltet, velg handlingen "Kjør skript" (funksjon).
Angi en bildetekst for knappen. Fargen for knappikonet. Fullfør innstillingene ved å klikke OK.

Automatisere oppføring i SecureCRT ved hjelp av skript

Merk:

Panelet med knapper er svært nyttig funksjonalitet.

1. Det er mulig, når du logger på en bestemt økt, å spesifisere hvilket panel som skal åpnes for denne fanen som standard.

2. Det er mulig å sette forhåndsdefinerte handlinger for standard handlinger med utstyr: vis show versjon, vis running-config, lagre konfigurasjon.

Automatisere oppføring i SecureCRT ved hjelp av skript
Ingen skript er knyttet til disse knappene. Bare handlingslinje:

Automatisere oppføring i SecureCRT ved hjelp av skript
Innstilling - slik at når du bytter til en økt, åpnes det nødvendige panelet med knapper i øktinnstillingene:

Automatisere oppføring i SecureCRT ved hjelp av skript
Det er fornuftig for kunden å sette opp individuelle skript for pålogging og gå til panelet med hyppige kommandoer for leverandøren.

Automatisere oppføring i SecureCRT ved hjelp av skript
Når du trykker på Gå til Cisco-knappen, bytter panelet til Cisco-knapplinjen.

Automatisere oppføring i SecureCRT ved hjelp av skript

Eksempler på bruk av enkle og avanserte skript. (Trening fra det virkelige liv.)

Enkle manus er nok for nesten alle anledninger. Men en gang trengte jeg å komplisere manuset litt – for å få fart på arbeidet. Denne komplikasjonen ba nettopp om ytterligere data i en dialogboks fra brukeren.

Be om data fra brukeren ved hjelp av en dialogboks

Jeg hadde 2 i dataforespørselsskriptet. Dette er vertsnavnet og den fjerde oktetten av IP-adressen. For å utføre denne handlingen - googlet jeg hvordan jeg gjør det og fant det på den offisielle nettsiden til SecureCRT (vandyke). - funksjonaliteten kalles 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 delen av skriptet ba om vertsnavn og tall fra den siste oktetten. Siden det var 15 stykker utstyr. Og dataene ble presentert i en tabell, så kopierte jeg verdiene fra tabellen og limte dem inn i dialogboksene. Videre fungerte manuset selvstendig.

FTP-kopiering til nettverksutstyr.

Dette skriptet startet kommandovinduet mitt (skall) og kopierte data via FTP. Avslutt økten på slutten. Det er umulig å bruke notisblokk til dette, fordi kopiering tar veldig lang tid og dataene i FTP-bufferen vil ikke bli lagret så lenge:

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

Skrive inn brukernavn/passord ved hjelp av et skript

Hos en kunde ble tilgangen til nettverksutstyr direkte stengt. Det var mulig å gå inn i utstyret ved først å koble til Standard Gateway, og fra det deretter til utstyret som var koblet til det. ssh-klienten innebygd i IOS/maskinvareprogramvaren ble brukt til å koble til. Følgelig ble brukernavnet og passordet bedt om i konsollen. Med skriptet nedenfor ble brukernavnet og passordet oppgitt 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()

Merk: Det var 2 skript: Ett for administratorkontoen og det andre for eSIGHT-kontoen.

Skript med muligheten til å legge til data direkte under skriptutførelse.

Oppgaven var å legge til en statisk rute på alt nettverksutstyr. Men gatewayen til Internett på hvert utstyr var forskjellig (og den skilte seg fra standard gateway). Følgende skript viste rutingtabellen, gikk inn i konfigurasjonsmodus, skrev ikke kommandoen til slutten (IP-adressen til gatewayen til Internett) - jeg la til denne delen. Etter at jeg trykket på Enter, fortsatte skriptet å utfø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 skriptet, på linjen: crt.Screen.Send("ip-rute 10.10.10.8 255.255.255.252 ") er ikke IP-adressen til gatewayen lagt til, og det er ikke noe vognreturtegn. Skriptet venter på neste linje med tegnene "(config) #" Disse tegnene dukket opp etter at jeg skrev inn ip-adressen og gikk inn.

konklusjon:

Når du skriver et script og utfører det, må regelen følges: Tiden for å skrive et script og utføre et script bør aldri være mer enn den tiden teoretisk brukt på å gjøre det samme arbeidet manuelt (kopiere/lime inn fra notisblokk, skrive og feilsøke en lekebok for ansible, skriving og feilsøking av pythonskript). Det vil si at bruken av skriptet skal spare tid, og ikke kaste bort tid på engangsautomatisering av prosesser (dvs. når skriptet er unikt og det ikke blir flere repetisjoner). Men hvis skriptet er unikt og automatisering med skriptet og skriving/feilsøking av skriptet tar mindre tid enn å gjøre det på noen annen måte (ansible, kommandovindu), så er skriptet den beste løsningen.
Feilsøking av et skript. Skriptet vokser gradvis, feilsøking finner sted ved innkjøring på den første, andre, tredje enheten, og innen den fjerde vil skriptet mest sannsynlig være fullt operativt.

Å kjøre et skript (ved å skrive inn brukernavn+passord) med musen er vanligvis raskere enn å kopiere brukernavn og passord fra en notisblokk. Men ikke trygt fra et sikkerhetssynspunkt.
Et annet (ekte) eksempel ved bruk av script: Du har ikke direkte tilgang til nettverksutstyr. Men det er behov for å konfigurere alt nettverksutstyr (ta det inn i overvåkingssystemet, konfigurer et ekstra brukernavn/passord/snmpv3brukernavn/passord). Det er tilgang når du går til Core-bryteren, fra den åpner du SSH til annet utstyr. Hvorfor kan du ikke bruke Ansible. - Fordi vi møter en grense på antall tillatte samtidige økter på nettverksutstyr (linje vty 0 4, brukergrensesnitt vty 0 4) (et annet spørsmål er hvordan man starter forskjellig utstyr i Ansible med samme SSH første hopp).

Skriptet reduserer tid under lange operasjoner - for eksempel kopiering av filer via FTP. Etter at kopieringen er fullført, begynner skriptet umiddelbart å fungere. En person må se slutten av kopieringen, deretter innse slutten på kopieringen, og deretter angi de riktige kommandoene. Manuset gjør det objektivt raskere.

Skript kan brukes der det er umulig å bruke verktøy for massedatalevering: konsoll. Eller når noen av dataene for utstyret er unike: vertsnavn, ledelsens ip-adresse. Eller når du skriver et program og feilsøker er det vanskeligere enn å legge til data mottatt fra utstyret mens skriptet kjører. – Et eksempel med et script for å foreskrive en rute, når hvert utstyr har sin egen IP-adresse til internettleverandøren. (Mine kolleger skrev slike skript - da DMVPN snakket var over 3. Det var nødvendig å endre DMVPN-innstillingene).

Kasusstudie: Konfigurering av innledende innstillinger på en ny svitsj ved hjelp av konsollportene:

A. Koblet konsollkabelen til enheten.
B. Kjør skriptet
B. Ventet på utførelsen av manuset
D. Koblet konsollkabelen til neste enhet.
E. Hvis bryteren ikke er den siste, gå til trinn B.

Som et resultat av manusets arbeid:

  • det første passordet er satt på utstyret.
  • Brukernavn oppgitt
  • den unike IP-adressen til enheten legges inn.

PS operasjonen måtte gjentas. Fordi standard ssh ikke ble konfigurert/deaktivert. (Ja, dette er min feil.)

Brukte kilder.

1. Om å lage skript
2. Eksempler på manus

Vedlegg 1: Eksempel på manus.


Et eksempel på et langt skript, med to spørringer: vertsnavn og IP-adresse. Den ble laget for forhåndsinnstilling av utstyr gjennom konsollen (9600 baud). Og også for å forberede tilkobling av utstyr til nettverket.

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

Slike script er vanligvis ikke nødvendig, men utstyrsmengden er 15 stk. Tillatt raskere oppsett. Det gikk raskere å sette opp utstyret ved hjelp av SecureCRT Command-vinduet.

Sette opp en konto for ssh.

Et annet eksempel. Konfigurasjonen skjer 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 programvare: fra $99 (den minste prisen er kun for SecureCRT i ett år)
Offisiell nettside
En programvarelisens kjøpes én gang, med støtte (for oppdatering), deretter brukes programvaren med denne lisensen i ubegrenset tid.

Fungerer på Mac OS X og Windows operativsystemer.

Det er skriptstøtte (denne artikkelen)
Det er Kommandovindu
Seriell/Telnet/SSH1/SSH2/Shell-operativsystem

Kilde: www.habr.com