Mrežni inženjeri se često susreću sa zadatkom kopiranja/lijepljenja određenih fragmenata iz notepada na konzolu. Obično morate kopirati nekoliko parametara: Korisničko ime/Lozinku i nešto drugo. Upotreba skripti vam omogućava da ubrzate ovaj proces. ALI zadaci pisanja skripte i izvršavanja skripte trebali bi ukupno trajati manje vremena od ručnog konfigurisanja, inače su skripte beskorisne.
Čemu služi ovaj članak? Ovaj članak je iz serije Fast Start i ima za cilj uštedu vremena mrežnim inženjerima prilikom postavljanja opreme (jedan zadatak) na više uređaja. Koristi SecureCRT softver i ugrađenu funkcionalnost izvršavanja skripte. Sadržaj
Program SecureCRT ima ugrađeni mehanizam za izvršavanje skripte iz kutije. Čemu služe terminalske skripte?
Automatski I/O i minimalna I/O validacija.
Ubrzajte izvršavanje rutinskih zadataka - smanjujući pauze između podešavanja opreme. (De facto smanjenje pauza uzrokovanih vremenom za izvođenje radnji kopiranja/prošlosti na istom hardveru, sa 3 ili više fragmenata naredbi koje treba primijeniti na hardver.)
Ovaj dokument pokriva zadatke:
Kreiranje jednostavnih skripti.
Pokretanje skripti na SecureCRT.
Primjeri korištenja jednostavnih i naprednih skripti. (Vježbanje iz stvarnog života.)
Kreiranje jednostavnih skripti.
Najjednostavniji skripti koriste samo dvije naredbe, Send i WaitForString. Ova funkcionalnost je dovoljna za 90% (ili više) izvršenih zadataka.
Skripte mogu raditi u Python-u, JS-u, VBS-u (Visual Basic), Perlu, itd.
# $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
Obično fajl sa ekstenzijom "*.vbs"
Kreirajte skriptu koristeći unos skripte.
Omogućava vam automatizaciju procesa pisanja skripte. Počinjete pisati scenarij. SecureCRT snima komande i kasniji hardverski odgovor i prikazuje gotovu skriptu za vas.
A. Počnite pisati skriptu:
SecureCRT meni => Skripta => Pokreni snimanje skripte
b. Izvršite radnje s konzolom (izvedite korake konfiguracije u CLI).
V. Završite pisanje skripte:
SecureCRT meni => Skripta => Zaustavi snimanje skripte…
Sačuvajte datoteku skripte.
Primjer izvršenih naredbi i sačuvane skripte:
Pokretanje skripti na SecureCRT.
Nakon kreiranja/uređivanja skripte, postavlja se logično pitanje: Kako primijeniti skriptu?
Postoji nekoliko načina:
Pokretanje ručno iz menija Script
Automatsko pokretanje nakon povezivanja (skripta za prijavu)
Automatsko prijavljivanje bez upotrebe skripte
Ručno pokretanje pomoću dugmeta u SecureCRT (dugme tek treba da bude kreirano i dodato u SecureCRT)
Pokretanje ručno iz menija Script
SecureCRT meni => Skripta => Pokreni…
- Zadnjih 10 skripti je zapamćeno i dostupno za brzo pokretanje:
SecureCRT meni => Skripta => 1 "Naziv datoteke skripte"
SecureCRT meni => Skripta => 2 "Naziv datoteke skripte"
SecureCRT meni => Skripta => 3 "Naziv datoteke skripte"
SecureCRT meni => Skripta => 4 "Naziv datoteke skripte"
SecureCRT meni => Skripta => 5 "Naziv datoteke skripte"
Automatsko pokretanje nakon povezivanja (skripta za prijavu)
Postavke skripte za automatsko evidentiranje su konfigurisane za sačuvanu sesiju: Veza => Akcije prijave => Skripta za prijavu
Automatsko prijavljivanje bez upotrebe skripte
Moguće je automatski unijeti korisničko ime lozinke bez pisanja skripte, koristeći samo ugrađenu funkcionalnost SecureCRT-a. U postavkama veze “Veza” => Akcije prijave => Automatsko prijavljivanje – potrebno je da popunite nekoliko paketa – što znači parove: “Očekivani tekst” + “Poslani znakovi na ovaj tekst” može biti mnogo takvih parova. (Primjer: 1. par čeka korisničko ime, drugi čeka lozinku, treći čeka prompt za privilegirani način rada, četvrti par za lozinku za privilegirani način rada.)
Primjer automatske prijave na Cisco ASA:
Ručno pokretanje pomoću dugmeta u SecureCRT (dugme tek treba da bude kreirano i dodato u SecureCRT)
U SecureCRT-u možete dodijeliti skriptu gumbu. Dugme se dodaje na panel posebno kreiran za ovu svrhu.
A. Dodavanje panela interfejsu: SecureCRT Menu => View => Button Bar
b. Dodajte dugme na panel i dodajte skriptu. – Kliknite desnim tasterom miša na traku sa dugmadima i izaberite „Novo dugme…“ iz kontekstnog menija.
V. U dijaloškom okviru "Map Button", u polju "Action" izaberite akciju (funkciju) "Run Script".
Odredite natpis za dugme. Boja za ikonu dugmeta. Završite podešavanja klikom na Ok.
Napomena:
Panel sa dugmadima je veoma korisna funkcionalnost.
1. Moguće je, kada se prijavite na određenu sesiju, odrediti koji panel će se po defaultu otvoriti na ovoj kartici.
2. Moguće je podesiti unapred definisane akcije za standardne akcije sa opremom: prikaži verziju, prikaži run-config, sačuvaj konfiguraciju.
Ovim dugmadima nije priložena skripta. Samo linija akcije:
Postavka - tako da se prilikom prelaska na sesiju u postavkama sesije otvara potreban panel sa dugmadima:
Ima smisla da korisnik podesi pojedinačne skripte za prijavu i ode na panel sa čestim komandama za dobavljača.
Kada pritisnete dugme Go Cisco, panel se prebacuje na traku sa dugmadima Cisco.
Primjeri korištenja jednostavnih i naprednih skripti. (Vježbanje iz stvarnog života.)
Jednostavne skripte su dovoljne za gotovo sve prilike. Ali jednom sam morao malo zakomplikovati scenario - da ubrzam rad. Ova komplikacija je samo zahtijevala dodatne podatke u dijaloškom okviru od korisnika.
Traženje podataka od korisnika pomoću dijaloškog okvira
Imao sam 2 u skripti zahtjeva za podacima. Ovo je ime hosta i 4. oktet IP adrese. Da izvršim ovu radnju - proguglao sam kako se to radi i našao na službenoj web stranici SecureCRT-a (vandyke). - funkcionalnost se zove prompt.
Ovaj dio skripte traži ime hosta i brojeve iz posljednjeg okteta. Pošto je bilo 15 komada opreme. I podaci su predstavljeni u tabeli, zatim sam kopirao vrijednosti iz tabele i zalijepio ih u dijaloške okvire. Dalje, scenario je radio samostalno.
FTP kopiranje na mrežnu opremu.
Ova skripta je pokrenula moj komandni prozor (ljuska) i kopirala podatke preko FTP-a. Na kraju, zatvorite sesiju. Nemoguće je koristiti notepad za ovo, jer kopiranje traje jako dugo i podaci u FTP baferu neće biti pohranjeni toliko dugo:
# $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()
Unošenje korisničkog imena/lozinke pomoću skripte
Kod jednog korisnika je direktno zatvoren pristup mrežnoj opremi. U opremu je bilo moguće ući tako da se prvo poveže na Default Gateway, a sa njega na opremu koja je na njega povezana. Za povezivanje je korišten ssh klijent ugrađen u IOS/hardverski softver. Shodno tome, korisničko ime i lozinka su zatraženi u konzoli. Sa skriptom ispod, korisničko ime i lozinka su automatski uneseni:
# $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()
Napomena: Postojale su 2 skripte, jedna za administratorski nalog, druga za eSIGHT nalog.
Skripta sa mogućnošću direktnog dodavanja podataka tokom izvršavanja skripte.
Zadatak je bio dodati statičku rutu na svu mrežnu opremu. Ali pristupnik za Internet na svakoj opremi bio je drugačiji (i razlikovao se od zadanog gateway-a). Sljedeća skripta je prikazala tabelu rutiranja, ušla u konfiguracijski mod, nije napisala naredbu do kraja (IP adresa gateway-a na Internet) - dodao sam ovaj dio. Nakon što sam pritisnuo Enter, skripta je nastavila da izvršava naredbu.
# $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()
U ovoj skripti, u liniji: crt.Screen.Send("ip ruta 10.10.10.8 255.255.255.252") IP adresa gateway-a nije dodana i nema karaktera za povratak. Skripta čeka sljedeći red sa znakovima "(config) #" Ovi znakovi su se pojavili nakon što sam unio ip adresu i ušao.
Zaključak:
Prilikom pisanja skripte i njenog izvršavanja, mora se poštovati pravilo: vrijeme za pisanje skripte i izvršavanje skripte nikada ne smije biti više od vremena koje se teoretski troši na ručno obavljanje istog posla (kopiranje / lijepljenje iz notepad-a, pisanje i otklanjanje grešaka priručnik za ansible, pisanje i otklanjanje grešaka python skripte). Odnosno, korištenje skripte treba da uštedi vrijeme, a ne da gubi vrijeme na jednokratnu automatizaciju procesa (tj. kada je skripta jedinstvena i više neće biti ponavljanja). Ali ako je skripta jedinstvena i automatizacija sa skriptom i pisanje/debagovanje skripte traje manje vremena nego na bilo koji drugi način (ansible, komandni prozor), onda je skripta najbolje rješenje.
Otklanjanje grešaka u skripti. Skripta postepeno raste, otklanjanje grešaka se odvija na prvom, drugom, trećem uređaju, a do četvrtog će skripta najvjerovatnije biti u potpunosti operativna.
Pokretanje skripte (unošenjem korisničkog imena+lozinke) mišem je obično brže od kopiranja korisničkog imena i lozinke iz notepada. Ali nije sigurno sa sigurnosne tačke gledišta.
Još jedan (pravi) primjer kada koristite skriptu: Nemate direktan pristup mrežnoj opremi. Ali postoji potreba da se konfiguriše sva mrežna oprema (dovedete je u sistem za nadzor, konfigurišete dodatno korisničko ime/lozinku/snmpv3korisničko ime/lozinku). Postoji pristup kada odete na Core switch, sa njega otvarate SSH na drugu opremu. Zašto ne možete koristiti Ansible. - Zato što nailazimo na ograničenje broja dozvoljenih istovremenih sesija na mrežnoj opremi (linija vty 0 4, korisničko sučelje vty 0 4) (drugo pitanje je kako pokrenuti različitu opremu u Ansibleu sa istim SSH prvim skokom).
Skripta smanjuje vrijeme tokom dugih operacija - na primjer, kopiranje datoteka putem FTP-a. Nakon što je kopiranje završeno, skripta odmah počinje s radom. Osoba će morati vidjeti kraj kopiranja, zatim shvatiti kraj kopiranja, zatim unijeti odgovarajuće komande. Skripta to objektivno radi brže.
Skripte su primjenjive tamo gdje je nemoguće koristiti alate za masovnu dostavu podataka: Konzola. Ili kada su neki podaci za opremu jedinstveni: ime hosta, IP adresa upravljanja. Ili kada se piše program i otklanja greške, to je teže od dodavanja podataka primljenih od opreme dok je skripta pokrenuta. - Primjer sa skriptom za propisivanje rute, kada svaka oprema ima svoju IP adresu Internet provajdera. (Moje kolege su napisale takve skripte - kada je DMVPN govorio preko 3. Bilo je potrebno promijeniti DMVPN postavke).
Studija slučaja: Konfiguriranje početnih postavki na novom prekidaču pomoću portova konzole:
A. Utaknuo kabl konzole u uređaj.
B. Pokrenite skriptu
B. Čekao se izvršavanje skripte
D. Priključio kabl konzole u sljedeći uređaj.
E. Ako prekidač nije posljednji, idite na korak B.
Kao rezultat rada skripte:
početna lozinka je postavljena na opremi.
Korisničko ime uneseno
unosi se jedinstvena IP adresa uređaja.
PS operacija je morala da se ponovi. Zato što Default ssh nije konfigurisan/onemogućen. (Da, ovo je moja greška.)
Primjer dugačke skripte, sa dva upita: Hostname i IP adresa. Kreiran je za predpodešavanje opreme preko konzole (9600 baud). I pripremiti priključak opreme na mrežu.
Takve skripte obično nisu potrebne, ali količina opreme je 15 kom. Dozvoljeno brže postavljanje. Bilo je brže podesiti opremu koristeći SecureCRT komandni prozor.
Postavljanje naloga za ssh.
Još jedan primjer. Konfiguracija se također vrši preko konzole.
# $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()
O SecureCRT-u:Plaćeni softver: od 99 USD (najmanja cijena je samo za SecureCRT na godinu dana) Službena web stranica
Softverska licenca se kupuje jednom, uz podršku (za ažuriranje), zatim se softver koristi sa ovom licencom neograničeno vrijeme.
Radi na Mac OS X i Windows operativnim sistemima.
Postoji podrška za skripte (ovaj članak)
Postoje Komandni prozor
Serijski/Telnet/SSH1/SSH2/Shell operativni sistem