Automatisering van invoer in SecureCRT met behulp van scripts
Netwerkengineers staan vaak voor de taak om bepaalde fragmenten van een kladblok naar de console te kopiëren/plakken. Meestal moet u verschillende parameters kopiëren: gebruikersnaam/wachtwoord en iets anders. Door het gebruik van scripts kunt u dit proces versnellen. MAAR de taken van het schrijven van het script en het uitvoeren van het script zouden in totaal minder tijd moeten kosten dan handmatige configuratie, anders zijn de scripts nutteloos.
Waar is dit artikel voor? Dit artikel komt uit de Fast Start-serie en is bedoeld om netwerkengineers tijd te besparen bij het instellen van apparatuur (enkele taak) op meerdere apparaten. Maakt gebruik van SecureCRT-software en ingebouwde scriptuitvoeringsfunctionaliteit. Inhoud
Het SecureCRT-programma heeft standaard een ingebouwd scriptuitvoeringsmechanisme. Waar zijn terminalscripts voor?
Geautomatiseerde I/O en minimale I/O-validatie.
Versnel de uitvoering van routinetaken - verminder pauzes tussen apparatuurinstellingen. (De facto vermindering van pauzes veroorzaakt door tijd om kopieer/past-acties op dezelfde hardware uit te voeren, met 3 of meer opdrachtfragmenten die op hardware moeten worden toegepast.)
Dit document behandelt de taken:
Maken van eenvoudige scripts.
Scripts uitvoeren op SecureCRT.
Voorbeelden van het gebruik van eenvoudige en geavanceerde scripts. (Oefen uit het echte leven.)
Maken van eenvoudige scripts.
De eenvoudigste scripts gebruiken slechts twee opdrachten, Send en WaitForString. Deze functionaliteit is voldoende voor 90% (of meer) van de uitgevoerde taken.
Scripts kunnen werken in Python, JS, VBS (Visual Basic), Perl, etc.
# $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
Meestal een bestand met de extensie "*.vbs"
Maak een script met behulp van een scriptinvoer.
Hiermee kunt u het proces van het schrijven van een script automatiseren. Je begint met het schrijven van een script. SecureCRT registreert de opdrachten en de daaropvolgende hardwarereactie en geeft het voltooide script voor u weer.
A. Script schrijven:
SecureCRT-menu => Script => Start opnamescript
B. Acties uitvoeren met de console (configuratiestappen uitvoeren in de CLI).
V. Voltooi het schrijven van het script:
SecureCRT-menu => Script => Opnamescript stoppen...
Sla het scriptbestand op.
Voorbeeld van uitgevoerde opdrachten en opgeslagen script:
Scripts uitvoeren op SecureCRT.
Na het maken/bewerken van het script rijst een natuurlijke vraag: hoe het script toe te passen?
Er zijn verschillende manieren:
Handmatig uitgevoerd vanuit het Script-menu
Automatische start na verbinding (aanmeldingsscript)
Automatisch inloggen zonder gebruik te maken van een script
Handmatig activeren met een knop in SecureCRT (er moet nog een knop worden gemaakt en toegevoegd aan SecureCRT)
Handmatig uitgevoerd vanuit het Script-menu
SecureCRT-menu => Script => Uitvoeren...
- De laatste 10 scripts worden onthouden en zijn beschikbaar voor snelle lancering:
SecureCRT-menu => Script => 1 "Scriptbestandsnaam"
SecureCRT-menu => Script => 2 "Scriptbestandsnaam"
SecureCRT-menu => Script => 3 "Scriptbestandsnaam"
SecureCRT-menu => Script => 4 "Scriptbestandsnaam"
SecureCRT-menu => Script => 5 "Scriptbestandsnaam"
Automatische start na verbinding (aanmeldingsscript)
Instellingen voor automatisch logboekregistratiescript zijn geconfigureerd voor de opgeslagen sessie: Verbinding => Aanmeldingsacties => Aanmeldingsscript
Automatisch inloggen zonder gebruik te maken van een script
Het is mogelijk om automatisch de gebruikersnaam van het wachtwoord in te voeren zonder een script te schrijven, waarbij alleen gebruik wordt gemaakt van de ingebouwde functionaliteit van SecureCRT. In de verbindingsinstellingen "Verbinding" => Aanmeldingsacties => Automatiseer aanmelding - u moet verschillende bundels invullen - wat de paren betekent: "Verwachte tekst" + "Verzonden tekens naar deze tekst" er kunnen veel van dergelijke paren zijn. (Voorbeeld: 1e paar wacht op gebruikersnaam, tweede paar wacht op wachtwoord, derde paar wacht op prompt voor geprivilegieerde modus, vierde paar op wachtwoord voor geprivilegieerde modus.)
Voorbeeld van automatische aanmelding op Cisco ASA:
Handmatig activeren met een knop in SecureCRT (er moet nog een knop worden gemaakt en toegevoegd aan SecureCRT)
In SecureCRT kunt u een script toewijzen aan een knop. De knop wordt toegevoegd aan een speciaal hiervoor gemaakt paneel.
A. Een paneel toevoegen aan de interface: SecureCRT Menu => Beeld => Knoppenbalk
B. Voeg een knop toe aan het paneel en voeg een script toe. – Klik met de rechtermuisknop op de knoppenbalk en selecteer “Nieuwe knop…” in het contextmenu.
V. Selecteer in het dialoogvenster "Kaartknop" in het veld "Actie" de actie (functie) "Script uitvoeren".
Geef een bijschrift op voor de knop. De kleur voor het knoppictogram. Voltooi de instellingen door op OK te klikken.
Opmerking:
Het paneel met knoppen is erg handige functionaliteit.
1. Het is mogelijk om, wanneer u zich aanmeldt bij een specifieke sessie, aan te geven welk paneel standaard moet worden geopend voor dit tabblad.
2. Het is mogelijk om voorgedefinieerde acties in te stellen voor standaardacties met apparatuur: show show version, show running-config, save configuration.
Aan deze knoppen is geen script gekoppeld. Alleen actielijn:
Instelling - zodat bij het overschakelen naar een sessie het benodigde paneel met knoppen wordt geopend in de sessie-instellingen:
Het is logisch dat de klant individuele scripts voor inloggen instelt en naar het paneel gaat met frequente opdrachten voor de leverancier.
Wanneer u op de Go Cisco-knop drukt, schakelt het paneel over naar de Cisco-knoppenbalk.
Voorbeelden van het gebruik van eenvoudige en geavanceerde scripts. (Oefen uit het echte leven.)
Eenvoudige scripts zijn voldoende voor bijna alle gelegenheden. Maar ooit moest ik het script een beetje ingewikkelder maken - om het werk te versnellen. Deze complicatie vroeg eenvoudig om aanvullende gegevens in een dialoogvenster van de gebruiker.
Gegevens opvragen bij de gebruiker met behulp van een dialoogvenster
Ik had er 2 in het script voor het aanvragen van gegevens.Dit is de hostnaam en het 4e octet van het IP-adres. Om deze actie uit te voeren - ik googelde hoe het moest en vond het op de officiële website van SecureCRT (vandyke). - de functionaliteit heet prompt.
Dit deel van het script vroeg om hostnaam en nummers van het laatste octet. Omdat er 15 apparaten waren. En de gegevens werden gepresenteerd in een tabel, daarna heb ik de waarden uit de tabel gekopieerd en in de dialoogvensters geplakt. Verder werkte het script zelfstandig.
FTP kopiëren naar netwerkapparatuur.
Dit script startte mijn opdrachtvenster (shell) en kopieerde gegevens via FTP. Sluit aan het einde de sessie. Het is onmogelijk om hiervoor kladblok te gebruiken, omdat het kopiëren erg lang duurt en de gegevens in de FTP-buffer niet zo lang bewaard blijven:
# $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()
Gebruikersnaam/wachtwoord invoeren met behulp van een script
Bij één klant was de toegang tot netwerkapparatuur direct afgesloten. Het was mogelijk om toegang te krijgen tot de apparatuur door eerst verbinding te maken met de Default Gateway en van daaruit naar de apparatuur die erop is aangesloten. De ssh-client die is ingebouwd in de IOS/hardwaresoftware werd gebruikt om verbinding te maken. Dienovereenkomstig werden de gebruikersnaam en het wachtwoord gevraagd in de console. Met onderstaand script werden de gebruikersnaam en het wachtwoord automatisch ingevoerd:
# $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()
Opmerking: er waren 2 scripts: één voor het beheerdersaccount en het tweede voor het eSIGHT-account.
Script met de mogelijkheid om direct gegevens toe te voegen tijdens de uitvoering van het script.
De taak was om een statische route toe te voegen aan alle netwerkapparatuur. Maar de gateway naar internet op elk apparaat was anders (en verschilde van de standaardgateway). Het volgende script gaf de routeringstabel weer, ging naar de configuratiemodus, schreef de opdracht niet tot het einde (het IP-adres van de gateway naar internet) - ik heb dit onderdeel toegevoegd. Nadat ik op Enter had gedrukt, bleef het script de opdracht uitvoeren.
# $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 dit script wordt in de regel: crt.Screen.Send("ip route 10.10.10.8 255.255.255.252 ") het IP-adres van de gateway niet toegevoegd en is er geen regelterugloopteken. Het script wacht op de volgende regel met de tekens "(config) #" Deze tekens verschenen nadat ik het ip-adres had ingevoerd en ingevoerd.
conclusie:
Bij het schrijven van een script en het uitvoeren ervan moet de regel worden gevolgd: de tijd voor het schrijven van een script en het uitvoeren van een script mag nooit meer zijn dan de tijd die theoretisch wordt besteed aan het handmatig doen van hetzelfde werk (kopiëren/plakken uit een kladblok, schrijven en debuggen een draaiboek voor weerwort, schrijven en debuggen van python-script). Dat wil zeggen, het gebruik van het script moet tijd besparen en geen tijd verspillen aan eenmalige automatisering van processen (d.w.z. wanneer het script uniek is en er geen herhaling meer zal zijn). Maar als het script uniek is en automatisering met het script en het schrijven/debuggen van het script minder tijd kost dan het op een andere manier te doen (ansible, opdrachtvenster), dan is het script de beste oplossing.
Een script debuggen. Het script groeit geleidelijk, debuggen vindt plaats tijdens de inloop op het eerste, tweede, derde apparaat en tegen het vierde zal het script waarschijnlijk volledig operationeel zijn.
Het uitvoeren van een script (door gebruikersnaam + wachtwoord in te voeren) met de muis is meestal sneller dan het kopiëren van gebruikersnaam en wachtwoord van een kladblok. Maar niet veilig vanuit beveiligingsoogpunt.
Een ander (echt) voorbeeld bij het gebruik van een script: Je hebt geen directe toegang tot netwerkapparatuur. Maar het is nodig om alle netwerkapparatuur te configureren (breng deze naar het monitoringsysteem, configureer een extra gebruikersnaam/wachtwoord/snmpv3gebruikersnaam/wachtwoord). Er is toegang wanneer je naar de Core-switch gaat, van daaruit open je SSH naar andere apparatuur. Waarom kun je Ansible niet gebruiken? - Omdat we tegen een limiet aanlopen op het aantal toegestane gelijktijdige sessies op netwerkapparatuur (lijn vty 0 4, user-interface vty 0 4) (een andere vraag is hoe je verschillende apparatuur in Ansible start met dezelfde SSH first hop).
Het script vermindert de tijd tijdens lange operaties - bijvoorbeeld het kopiëren van bestanden via FTP. Nadat het kopiëren is voltooid, begint het script onmiddellijk te werken. Een persoon moet het einde van het kopiëren zien, dan het einde van het kopiëren realiseren en vervolgens de juiste opdrachten invoeren. Het script doet het objectief sneller.
Scripts zijn van toepassing waar het onmogelijk is om tools voor het leveren van massagegevens te gebruiken: Console. Of wanneer sommige gegevens voor de apparatuur uniek zijn: hostnaam, beheer-ip-adres. Of bij het schrijven van een programma en het debuggen is het moeilijker dan het toevoegen van gegevens die van de apparatuur zijn ontvangen terwijl het script wordt uitgevoerd. - Een voorbeeld met een script voor het voorschrijven van een route, wanneer elk apparaat een eigen IP-adres van de internetprovider heeft. (Mijn collega's schreven dergelijke scripts - toen de DMVPN-spoke meer dan 3 was. Het was nodig om de DMVPN-instellingen te wijzigen).
Casestudy: Initiële instellingen configureren op een nieuwe switch met behulp van de consolepoorten:
A. De consolekabel is aangesloten op het apparaat.
B. Voer het script uit
B. Wachtte op de uitvoering van het script
D. Sluit de consolekabel aan op het volgende apparaat.
E. Als de schakelaar niet de laatste is, ga dan naar stap B.
Als resultaat van het werk van het script:
het initiële wachtwoord is ingesteld op de apparatuur.
Gebruikersnaam ingevoerd
het unieke IP-adres van het apparaat wordt ingevoerd.
PS de operatie moest worden herhaald. Omdat standaard ssh niet is geconfigureerd/uitgeschakeld. (Ja, dit is mijn fout.)
Een voorbeeld van een lang script, met twee vragen: Hostnaam en IP-adres. Het is gemaakt voor het vooraf instellen van apparatuur via de console (9600 baud). En ook om de aansluiting van apparatuur op het netwerk voor te bereiden.
Dergelijke scripts zijn meestal niet nodig, maar de hoeveelheid apparatuur is 15 stuks. Snellere installatie toegestaan. Het was sneller om de apparatuur in te stellen met behulp van het SecureCRT Command-venster.
Een account aanmaken voor ssh.
Een ander voorbeeld. Configuratie is ook via de console.
# $language = "Python"
# $interface = "1.0"
# Connect to a telnet server and automate the initial login sequence.
# Note that synchronous mode is enabled to prevent server output from
# potentially being missed.
def main():
crt.Screen.Synchronous = True
crt.Screen.Send("r")
crt.Screen.WaitForString("name")
crt.Screen.Send("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()
Over SecureCRT:Betaalde software: vanaf $ 99 (de laagste prijs is alleen voor SecureCRT voor een jaar) Officiële website
Er wordt eenmalig een softwarelicentie aangeschaft, met ondersteuning (bij updaten), daarna wordt de software met deze licentie voor onbepaalde tijd gebruikt.
Werkt op Mac OS X en Windows-besturingssystemen.
Er is scriptondersteuning (dit artikel)
Er is Opdrachtvenster
Serieel/Telnet/SSH1/SSH2/Shell-besturingssysteem