Automatyzacja wpisów w SecureCRT za pomocą skryptów

Inżynierowie sieciowi często stają przed zadaniem kopiowania/wklejania pewnych fragmentów z notatnika do konsoli. Zwykle trzeba skopiować kilka parametrów: nazwę użytkownika/hasło i coś jeszcze. Wykorzystanie skryptów pozwala przyspieszyć ten proces. ALE zadania związane z napisaniem i wykonaniem skryptu powinny zająć łącznie mniej czasu niż ręczna konfiguracja, w przeciwnym razie skrypty są bezużyteczne.

Po co jest ten artykuł? Ten artykuł pochodzi z serii Szybki start i ma na celu zaoszczędzenie czasu inżynierów sieci podczas konfigurowania sprzętu (pojedyncze zadanie) na wielu urządzeniach. Wykorzystuje oprogramowanie SecureCRT i wbudowaną funkcję wykonywania skryptów.

Zawartość

Wprowadzenie

Program SecureCRT ma wbudowany mechanizm wykonywania skryptów po wyjęciu z pudełka. Do czego służą skrypty terminala?

  • Zautomatyzowane operacje we/wy i minimalna weryfikacja operacji we/wy.
  • Przyspiesz wykonywanie rutynowych zadań – skracając przerwy między ustawieniami sprzętu. (De facto redukcja przerw spowodowanych czasem wykonywania czynności kopiowania/przeszywania na tym samym sprzęcie, przy zastosowaniu 3 lub więcej fragmentów poleceń do sprzętu).

Ten dokument obejmuje zadania:

  • Tworzenie prostych skryptów.
  • Uruchamianie skryptów na SecureCRT.
  • Przykłady użycia prostych i zaawansowanych skryptów. (Praktyka z prawdziwego życia.)

Tworzenie prostych skryptów.

Najprostsze skrypty używają tylko dwóch poleceń, Send i WaitForString. Funkcjonalność ta wystarcza na 90% (lub więcej) wykonywanych zadań.

Skrypty mogą pracować w Pythonie, JS, VBS (Visual Basic), Perlu itp.

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

Zwykle plik z rozszerzeniem „*.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

Zwykle plik z rozszerzeniem „*.vbs”

Utwórz skrypt przy użyciu wpisu skryptu.

Pozwala zautomatyzować proces pisania skryptu. Zaczynasz pisać scenariusz. SecureCRT rejestruje polecenia i następującą po nich odpowiedź sprzętową oraz wyświetla gotowy skrypt.

A. Zacznij pisać skrypt:
Menu SecureCRT => Skrypt => Rozpocznij nagrywanie skryptu
B. Wykonaj czynności za pomocą konsoli (wykonaj czynności konfiguracyjne w CLI).
V. Dokończ pisanie skryptu:
Menu SecureCRT => Skrypt => Zatrzymaj nagrywanie skryptu…
Zapisz plik skryptu.

Przykład wykonanych poleceń i zapisanego skryptu:

Automatyzacja wpisów w SecureCRT za pomocą skryptów

Uruchamianie skryptów na SecureCRT.

Po utworzeniu/edycji skryptu pojawia się logiczne pytanie: Jak zastosować skrypt?
Istnieje kilka sposobów:

  • Uruchamianie ręczne z menu Skrypt
  • Automatyczne uruchamianie po połączeniu (skrypt logowania)
  • Automatyczne logowanie bez użycia skryptu
  • Ręczne wyzwalanie za pomocą przycisku w SecureCRT (przycisk nie został jeszcze utworzony i dodany do SecureCRT)

Uruchamianie ręczne z menu Skrypt

Menu SecureCRT => Skrypt => Uruchom…
- 10 ostatnich skryptów jest zapamiętywanych i dostępnych do szybkiego uruchomienia:
Menu SecureCRT => Skrypt => 1 „Nazwa pliku skryptu”
Menu SecureCRT => Skrypt => 2 „Nazwa pliku skryptu”
Menu SecureCRT => Skrypt => 3 „Nazwa pliku skryptu”
Menu SecureCRT => Skrypt => 4 „Nazwa pliku skryptu”
Menu SecureCRT => Skrypt => 5 „Nazwa pliku skryptu”

Automatyczne uruchamianie po połączeniu (skrypt logowania)

Ustawienia skryptu automatycznego logowania są skonfigurowane dla zapisanej sesji: Połączenie => Akcje logowania => Skrypt logowania

Automatyzacja wpisów w SecureCRT za pomocą skryptów

Automatyczne logowanie bez użycia skryptu

Możliwe jest automatyczne wprowadzenie nazwy użytkownika lub hasła bez pisania skryptu, korzystając jedynie z wbudowanej funkcjonalności SecureCRT. W ustawieniach połączenia „Połączenie” => Akcje logowania => Automatyzacja logowania – należy wypełnić kilka wiązek – co oznacza pary: „Oczekiwany tekst” + „Wysłane znaki do tego tekstu” takich par może być wiele. (Przykład: pierwsza para czeka na nazwę użytkownika, druga czeka na hasło, trzecia czeka na monit trybu uprzywilejowanego, czwarta para czeka na hasło trybu uprzywilejowanego.)

Przykład automatycznego logowania do Cisco ASA:

Automatyzacja wpisów w SecureCRT za pomocą skryptów

Ręczne wyzwalanie za pomocą przycisku w SecureCRT (przycisk nie został jeszcze utworzony i dodany do SecureCRT)

W SecureCRT możesz przypisać skrypt do przycisku. Przycisk jest dodawany do specjalnie utworzonego w tym celu panelu.

A. Dodanie panelu do interfejsu: SecureCRT Menu => Widok => Pasek przycisków
B. Dodaj przycisk do panelu i dodaj skrypt. – Kliknij prawym przyciskiem myszy pasek przycisków i wybierz „Nowy przycisk…” z menu kontekstowego.
V. W oknie dialogowym „Przycisk mapy”, w polu „Akcja” wybierz akcję (funkcję) „Uruchom skrypt”.
Określ podpis dla przycisku. Kolor ikony przycisku. Zakończ ustawienia, klikając OK.

Automatyzacja wpisów w SecureCRT za pomocą skryptów

Uwaga:

Panel z przyciskami to bardzo przydatna funkcjonalność.

1. Podczas logowania do określonej sesji można określić, który panel ma być domyślnie otwierany na tej karcie.

2. Możliwe jest ustawienie predefiniowanych akcji dla standardowych akcji ze sprzętem: pokaż wersję, pokaż działającą konfigurację, zapisz konfigurację.

Automatyzacja wpisów w SecureCRT za pomocą skryptów
Do tych przycisków nie jest dołączony żaden skrypt. Tylko linia akcji:

Automatyzacja wpisów w SecureCRT za pomocą skryptów
Ustawienia – aby przy przejściu do sesji w ustawieniach sesji otwierał się potrzebny panel z przyciskami:

Automatyzacja wpisów w SecureCRT za pomocą skryptów
Sensowne jest, aby klient założył indywidualne skrypty do logowania i przechodził do panelu z częstymi poleceniami dla dostawcy.

Automatyzacja wpisów w SecureCRT za pomocą skryptów
Po naciśnięciu przycisku Go Cisco panel przełącza się na pasek przycisków Cisco.

Automatyzacja wpisów w SecureCRT za pomocą skryptów

Przykłady użycia prostych i zaawansowanych skryptów. (Praktyka z prawdziwego życia.)

Proste skrypty wystarczą na prawie każdą okazję. Ale kiedyś musiałem trochę skomplikować scenariusz - aby przyspieszyć pracę. Ta komplikacja po prostu zażądała dodatkowych danych w oknie dialogowym od użytkownika.

Żądanie danych od użytkownika za pomocą okna dialogowego

W skrypcie żądania danych miałem 2. To jest nazwa hosta i czwarty oktet adresu IP. Aby wykonać tę czynność - wyszukałem w Google, jak to zrobić i znalazłem to na oficjalnej stronie SecureCRT (vandyke). - funkcjonalność nazywa się monitem.

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

Ta część skryptu prosiła o podanie nazwy hosta i liczb z ostatniego oktetu. Ponieważ było 15 elementów wyposażenia. Dane zostały przedstawione w tabeli, następnie skopiowałem wartości z tabeli i wkleiłem je do okien dialogowych. Dalej skrypt działał niezależnie.

Kopiowanie FTP na sprzęt sieciowy.

Ten skrypt uruchomił moje okno poleceń (powłokę) i skopiował dane przez FTP. Na koniec zamknij sesję. Nie da się do tego użyć notatnika, ponieważ kopiowanie zajmuje bardzo dużo czasu, a dane w buforze FTP nie będą tak długo przechowywane:

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

Wprowadzanie nazwy użytkownika/hasła za pomocą skryptu

U jednego klienta zamknięto bezpośredni dostęp do urządzeń sieciowych. Wejście do sprzętu było możliwe łącząc się najpierw z bramką domyślną, a następnie z niej do podłączonego do niej sprzętu. Do połączenia użyto klienta ssh wbudowanego w oprogramowanie IOS/sprzętowe. W związku z tym w konsoli zażądano nazwy użytkownika i hasła. Za pomocą poniższego skryptu nazwa użytkownika i hasło zostały wprowadzone automatycznie:

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

Uwaga: Były 2 skrypty. Jeden dla konta administratora, drugi dla konta eSIGHT.

Skrypt z możliwością bezpośredniego dołączania danych podczas wykonywania skryptu.

Zadanie polegało na dodaniu trasy statycznej na wszystkich urządzeniach sieciowych. Ale bramka do internetu na każdym sprzęcie była inna (i różniła się od bramki domyślnej). Poniższy skrypt wyświetlił tablicę routingu, wszedł w tryb konfiguracji, nie wpisał polecenia do końca (adres IP bramki do internetu) - dodałem tę część. Po naciśnięciu Enter skrypt kontynuował wykonywanie polecenia.

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

W tym skrypcie w linii: crt.Screen.Send("ip route 10.10.10.8 255.255.255.252 ") adres IP bramki nie jest dodawany i nie ma znaku powrotu karetki. Skrypt czeka na następną linię ze znakami "(config) #" Znaki te pojawiły się po wpisaniu adresu ip i enter.

Wnioski:

Podczas pisania skryptu i jego wykonywania należy przestrzegać zasady: Czas na napisanie skryptu i wykonanie skryptu nigdy nie powinien przekraczać czasu teoretycznie poświęconego na wykonanie tej samej pracy ręcznie (kopiowanie/wklejanie z notatnika, pisanie i debugowanie podręcznik dla ansibla, pisania i debugowania skryptu Pythona). Oznacza to, że korzystanie ze skryptu powinno oszczędzać czas, a nie tracić go na jednorazową automatyzację procesów (tzn. gdy skrypt jest unikalny i nie będzie już więcej powtórzeń). Ale jeśli skrypt jest unikalny, a automatyzacja ze skryptem i pisanie/debugowanie skryptu zajmuje mniej czasu niż robienie tego w jakikolwiek inny sposób (ansible, okno poleceń), to skrypt jest najlepszym rozwiązaniem.
Debugowanie skryptu. Skrypt rozwija się stopniowo, debugowanie odbywa się na pierwszym, drugim, trzecim urządzeniu, a na czwartym skrypt najprawdopodobniej będzie już w pełni operacyjny.

Uruchomienie skryptu (poprzez wpisanie nazwy użytkownika+hasła) za pomocą myszy jest zwykle szybsze niż skopiowanie nazwy użytkownika i hasła z notatnika. Ale nie jest bezpieczny z punktu widzenia bezpieczeństwa.
Inny (prawdziwy) przykład użycia skryptu: Nie masz bezpośredniego dostępu do sprzętu sieciowego. Istnieje jednak potrzeba skonfigurowania wszystkich urządzeń sieciowych (wprowadź je do systemu monitoringu, skonfiguruj dodatkową nazwę użytkownika/hasło/nazwę użytkownika/hasło snmpv3). Jest dostęp, gdy przechodzisz do przełącznika Core, z niego otwierasz SSH na inny sprzęt. Dlaczego nie możesz użyć Ansible. - Ponieważ natrafiliśmy na limit liczby dozwolonych jednoczesnych sesji na sprzęcie sieciowym (linia vty 0 4, interfejs użytkownika vty 0 4) (innym pytaniem jest, jak uruchomić różne urządzenia w Ansible z tym samym pierwszym przeskokiem SSH).

Skrypt skraca czas podczas długich operacji - na przykład kopiowania plików przez FTP. Po zakończeniu kopiowania skrypt natychmiast zaczyna działać. Osoba będzie musiała zobaczyć koniec kopiowania, a następnie uświadomić sobie koniec kopiowania, a następnie wprowadzić odpowiednie polecenia. Skrypt robi to obiektywnie szybciej.

Skrypty mają zastosowanie tam, gdzie niemożliwe jest użycie narzędzi do masowego dostarczania danych: Konsola. Lub gdy niektóre dane dotyczące sprzętu są unikalne: nazwa hosta, adres IP zarządzania. Lub podczas pisania programu i debugowania jest to trudniejsze niż dodawanie danych otrzymanych ze sprzętu podczas działania skryptu. - Przykład ze skryptem do przepisywania trasy, gdy każdy sprzęt ma swój własny adres IP dostawcy Internetu. (Moi koledzy pisali takie skrypty - gdy DMVPN mówił ponad 3. Konieczna była zmiana ustawień DMVPN).

Studium przypadku: konfigurowanie ustawień początkowych na nowym przełączniku przy użyciu portów konsoli:

A. Podłącz kabel konsoli do urządzenia.
B. Uruchom skrypt
B. Czekał na wykonanie skryptu
D. Podłącz kabel konsoli do następnego urządzenia.
E. Jeśli przełącznik nie jest ostatnim, przejdź do kroku B.

W wyniku pracy skryptu:

  • na urządzeniu ustawione jest hasło początkowe.
  • Wprowadzono nazwę użytkownika
  • wpisywany jest unikalny adres IP urządzenia.

PS operację trzeba było powtórzyć. Ponieważ domyślny ssh nie został skonfigurowany/wyłączony. (Tak, to mój błąd.)

Wykorzystane źródła.

1. O tworzeniu skryptów
2. Przykłady skryptów

Dodatek 1: Przykładowe skrypty.


Przykład długiego skryptu z dwoma zapytaniami: nazwa hosta i adres IP. Został stworzony do wstępnego ustawiania sprzętu przez konsolę (9600 bodów). A także przygotowanie podłączenia sprzętu do sieci.

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

Takie skrypty zwykle nie są potrzebne, ale ilość sprzętu to 15 szt. Dozwolona szybsza konfiguracja. Szybciej było skonfigurować sprzęt za pomocą okna poleceń SecureCRT.

Założenie konta dla ssh.

Inny przykład. Konfiguracja odbywa się również za pomocą konsoli.

# $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:Płatne oprogramowanie: od 99 USD (najniższa cena dotyczy tylko SecureCRT na rok)
Oficjalna strona internetowa
Licencja na oprogramowanie jest zakupiona raz, ze wsparciem (w celu aktualizacji), następnie oprogramowanie jest używane z tą licencją przez nieograniczony czas.

Działa na systemach operacyjnych Mac OS X i Windows.

Istnieje obsługa skryptów (ten artykuł)
Jest Okno poleceń
System operacyjny Serial/Telnet/SSH1/SSH2/Shell

Źródło: www.habr.com