Automatyzacja wprowadzania do SecureCRT za pomocą skryptów

Inżynierowie sieciowi często stają przed zadaniem skopiowania określonych fragmentów z notatnika do konsoli. Zwykle trzeba skopiować kilka parametrów: Nazwa użytkownika/Hasło i coś jeszcze. Usprawnienie tego procesu umożliwiają skrypty. JEDNAK zadania napisania skryptu i jego uruchomienia łącznie powinny zająć mniej czasu niż ręczna konfiguracja; w przeciwnym razie skrypty są bezużyteczne.

Po co jest ten artykuł. Artykuł jest częścią cyklu Fast Start i ma na celu zaoszczędzenie czasu inżynierom sieciowym podczas konfigurowania sprzętu (jednej zadania) na kilku urządzeniach. Używane jest oprogramowanie SecureCRT oraz wbudowana funkcjonalność wykonywania skryptów.

Spis treści

Wprowadzenie

W programie SecureCRT wbudowany jest mechanizm wykonywania skryptów. Po co są skrypty w terminalu:

  • Automatyzacja wprowadzania i wyprowadzania oraz minimalna weryfikacja poprawności wprowadzania/wyprowadzania.
  • Przyspieszenie realizacji rutynowych zadań – zmniejszenie przerw między konfiguracją sprzętu. (De facto zmniejszenie przerw spowodowanych czasem potrzebnym do wykonania działań copy/paste na tym samym sprzęcie, przy 3 lub więcej fragmentach poleceń do zastosowania na sprzęcie.)

W dokumencie tym opisano następujące zadania:

  • Tworzenie najprostszych skryptów.
  • Uruchamianie skryptów w SecureCRT.
  • Przykłady użycia prostych i zaawansowanych skryptów. (Praktyka z życia wzięta.)

Tworzenie najprostszych skryptów.

Najprostsze skrypty wykorzystują zaledwie dwa polecenia Send i WaitForString. Tego funkcjonalności wystarczy na 90% (i więcej) wykonanych zadań.

Skrypty mogą działać w językach Python, JS, VBS (Visual Basic), Perl 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()

Plik zazwyczaj ma rozszerzenie „*.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

Plik zazwyczaj ma rozszerzenie „*.vbs”

Tworzenie skryptu za pomocą rejestratora skryptów.

Pozwala zautomatyzować proces pisania skryptu. Uruchamiasz rejestrację skryptu. SecureCRT rejestruje polecenia oraz odpowiedzi urządzenia i generuje gotowy skrypt.

a. Uruchom rejestrację skryptu:
Menu SecureCRT => Script => Start Recording Script
b. Wykonaj działania w konsoli (wykonaj czynności konfiguracyjne w CLI).
c. Zakończ rejestrację skryptu:
Menu SecureCRT => Script => Stop Recording Script…
Zapisz plik ze skryptem.

Przykład wykonanych poleceń i zapisanego skryptu:

Automatyzacja wprowadzania do SecureCRT za pomocą skryptów

Uruchamianie skryptów w SecureCRT.

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

  • Ręczne uruchomienie z menu Script
  • Automatyczne uruchamianie po połączeniu (skrypt logon)
  • Automatyczny logon bez użycia skryptu
  • Ręczne uruchamianie za pomocą przycisku w SecureCRT (przycisk będzie jeszcze musiał zostać stworzony i dodany do SecureCRT)

Ręczne uruchomienie z menu Script

Menu SecureCRT => Script => Run…
— Ostatnie 10 skryptów jest zapamiętywanych i dostępnych do szybkiego uruchomienia:
Menu SecureCRT => Script => 1 „Nazwa pliku ze skryptem”
Menu SecureCRT => Script => 2 „Nazwa pliku ze skryptem”
Menu SecureCRT => Script => 3 „Nazwa pliku ze skryptem”
Menu SecureCRT => Script => 4 „Nazwa pliku ze skryptem”
Menu SecureCRT => Script => 5 „Nazwa pliku ze skryptem”

Automatyczne uruchamianie po połączeniu (skrypt logon)

Ustawienia automatycznego skryptu logowania konfiguruje się dla zapisanej sesji: Connection => Logon Actions => Logon script

Automatyzacja wprowadzania do SecureCRT za pomocą skryptów

Automatyczny logon bez użycia skryptu

Jest możliwość automatycznego wprowadzania nazwy użytkownika i hasła bez pisania skryptu, używając tylko wbudowanej funkcjonalności SecureCRT. W ustawieniach połączenia „Connection” => Logon Actions => Automate logon – należy wypełnić kilka par, które zawierają: „Oczekiwany tekst” + „Wysyłane znaki na ten tekst”, takich par może być wiele. (Przykład: 1. para oczekiwanie na wprowadzenie nazwy użytkownika, 2. oczekiwanie na wprowadzenie hasła, 3. oczekiwanie na zaproszenie do trybu uprzywilejowanego, 4. hasło do trybu uprzywilejowanego.)

Przykład automatycznego logon na Cisco ASA:

Automatyzacja wprowadzania do SecureCRT za pomocą skryptów

Ręczne uruchamianie za pomocą przycisku w SecureCRT (przycisk będzie jeszcze musiał zostać stworzony i dodany do SecureCRT)

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

a. Dodaj panel do interfejsu: Menu SecureCRT => View => Button Bar
b. Dodaj przycisk na panel i przypisz skrypt. – Kliknij prawym przyciskiem myszy na panel Button Bar i w menu kontekstowym wybierz „New button…”.
c. W oknie dialogowym „Map Button” w polu „Action” wybierz działanie (function) „Run Script”.
Podajemy podpis dla przycisku. Kolor dla ikony przycisku. Kończymy ustawienia klikając Ok.

Automatyzacja wprowadzania do SecureCRT za pomocą skryptów

Uwaga:

Panel z przyciskami to bardzo przydatna funkcjonalność.

1. Istnieje możliwość przy logowaniu do określonej sesji wskazania, który panel domyślnie ma się otworzyć w tej zakładce.

2. Istnieje możliwość wcześniejszego zdefiniowania działań dla standardowych akcji z urządzeniem: pokaż show version, show running-config, zapisz konfigurację.

Automatyzacja wprowadzania do SecureCRT za pomocą skryptów
Do tych przycisków nie jest przypisany żaden skrypt. Tylko linia z działaniami:

Automatyzacja wprowadzania do SecureCRT za pomocą skryptów
Konfiguracja – aby przy przełączaniu na sesję otwierał się odpowiedni panel z przyciskami, jest realizowana w ustawieniach sesji:

Automatyzacja wprowadzania do SecureCRT za pomocą skryptów
Dla klienta sensowne jest skonfigurowanie indywidualnych skryptów dla Logowania i przejścia na panel z często używanymi komendami dla dostawcy.

Automatyzacja wprowadzania do SecureCRT za pomocą skryptów
Po naciśnięciu przycisku Go Cisco – panel przełącza się na Cisco Button Bar.

Automatyzacja wprowadzania do SecureCRT za pomocą skryptów

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

Prostych skryptów wystarcza prawie na każdą sytuację. Jednak raz potrzebowałem nieco skomplikować skrypt – aby przyspieszyć pracę. To skomplikowanie – jedynie prosiło o dodatkowe dane w oknie dialogowym od użytkownika.

Prośba o dane od użytkownika za pomocą okna dialogowego

W moim skrypcie zapytań danych było 2. To Hostname i 4-ty oktet adresu IP. Aby wykonać tę czynność – poszukałem w internecie jak to zrobić i znalazłem na oficjalnej stronie SecureCRT (vandyke) – funkcjonalność nazywa się prompt.

	crt.Screen.WaitForString("-Vlanif200]")
	hostnamestr = crt.Dialog.Prompt("Wprowadź nazwę hosta:", "hostname", "", False)
	ipaddressstr = crt.Dialog.Prompt("Wprowadź adres IP:", "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 pytała o Hostname i liczby z ostatniego oktetu. Ponieważ urządzeń było 15 sztuk, a dane były przedstawione w tabeli, to kopiowałem z tabeli wartości i wklejałem w okna dialogowe. Następnie skrypt działał samodzielnie.

Kopiowanie FTP na urządzenia sieciowe.

Ten skrypt otwierał okno poleceń (shell) i kopiował dane przez FTP. Po zakończeniu zamykał sesję. Użycie notatnika do tego nie jest możliwe, ponieważ kopiowanie trwa bardzo długo, a dane w buforze FTP nie będą tam 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 dostęp do sprzętu sieciowego był bezpośrednio zablokowany. Aby uzyskać dostęp do sprzętu, trzeba było najpierw połączyć się z Brama domyślną, a stamtąd połączyć się z urządzeniem do niego podłączonym. Do połączenia używano klienta ssh wbudowanego w IOS/SO. Odpowiednio, nazwa użytkownika i hasło były wprowadzane w konsoli. Dzięki poniższemu skryptowi, nazwa użytkownika i hasło były wprowadzane 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ło 2 skrypty. Jeden dla konta administratora, drugi dla konta eSIGHT.

Skrypt z możliwością bezpośredniego dopisywania danych w trakcie wykonywania skryptu.

Zadaniem było dodanie na całym sprzęcie sieciowym statycznej trasy. Jednak brama do internetu na każdym urządzeniu była inna (i różniła się od bramy domyślnej). Następny skrypt wyświetlał tabelę routingu, wprowadzał w tryb konfiguracji, nie dopisywał do końca polecenia (adres IP bramy do internetu) – tę część dopisywałem ja. 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 ") nie dopisano adresu IP bramy i brakuje znaku końca linii. Skrypt czekał na pojawienie się następnej linii ze znakami "(config)#". Te znaki pojawiały się po wprowadzeniu przeze mnie adresu IP i naciśnięciu enter.

Podsumowanie:

Podczas pisania skryptu i jego wykonania, należy bezwzględnie przestrzegać zasady: Czas pisania skryptu i jego wykonania nigdy nie powinien być dłuższy niż czas teoretycznie potrzebny na wykonanie tej samej pracy ręcznie (kopiowanie/wklejanie z notatnika, pisanie i debugowanie playbooka dla ansible, pisanie i debugowanie skryptu python). Tzn. użycie skryptu powinno oszczędzać czas, a nie zabierać go na jednorazową automatyzację procesów (tzn. gdy skrypt jest unikalny i nie będzie powtórzeń). Ale jeśli skrypt jest unikalny, a automatyzacja z jego pomocą oraz pisanie/debugowanie skryptu zajmuje mniej czasu niż wykonanie w 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 do czwartego skrypt najprawdopodobniej będzie całkowicie działający.

Uruchomienie skryptu (z wprowadzeniem username+password) za pomocą myszy zwykle odbywa się szybciej niż kopiowanie z notatnika Username i Password. Jednak nie jest to bezpieczne z punktu widzenia bezpieczeństwa.
Inny (rzeczywisty) przykład użycia skryptu: Nie masz bezpośredniego dostępu do sprzętu sieciowego. Musisz jednak skonfigurować wszystkie urządzenia sieciowe (wprowadzić do systemu monitorowania, skonfigurować dodatkowy Username/password/snmpv3username/password). Masz dostęp, kiedy logujesz się na switcha Core, z którego otwierasz SSH na inne urządzenia. Dlaczego nie można używać narzędzi Ansible? — Ponieważ napotykamy ograniczenie liczby dozwolonych jednoczesnych sesji na sprzęcie sieciowym (line vty 0 4, user-interface vty 0 4) (inna kwestia, jak w Ansible wprowadzać różne urządzenia tym samym SSH w pierwszym hopie).

Skrypt skraca czas podczas długotrwałych operacji – na przykład kopiowanie plików przez FTP. Po zakończeniu kopiowania skrypt natychmiast zaczyna działać. Człowiek musi zobaczyć zakończenie kopiowania, potem uświadomić sobie zakończenie kopiowania, potem wprowadzić odpowiednie komendy. Skrypt robi to obiektywnie szybciej.

Skrypty są zastosowane tam, gdzie nie można używać masowych narzędzi dostarczania danych: Konsola. Lub gdy część danych dla sprzętu jest unikalna: hostname, adres IP zarządzania. Lub gdy napisanie programu i debugowanie go jest trudniejsze niż dopisanie danych uzyskanych z urządzenia podczas pracy skryptu. — Przykład ze skryptem do wprowadzenia trasy, kiedy na każdym urządzeniu adres IP dostawcy internetowego jest inny. (Moi koledzy pisali takie skrypty — gdy DMVPN spoke było już ponad 300. Konieczna była zmiana ustawień DMVPN).

Przykład z praktyki: Ustawienie wstępnych ustawień na nowym switchu przez porty konsolowe:

A. Podłączyłem kabel konsolowy do urządzenia.
B. Uruchomiłem skrypt.
C. Czekałem na wykonanie skryptu.
D. Przełączyłem kabel konsolowy do następnego urządzenia.
E. Jeśli switch nie jest ostatni, przejdź do punktu B.

Podsumowując wyniki pracy skryptu:

  • na urządzeniu ustawiono początkowe hasło.
  • wprowadzono Username.
  • wprowadzono unikalny adres IP urządzenia.

P. S. operacja musiała być powtarzana, ponieważ domyślnie SSH okazało się nie skonfigurowane/włączone. (Tak, to mój błąd.)

Użyte źródła.

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

Aneks 1: Przykłady skryptów.


Przykład długiego skryptu z dwoma zapytaniami: nazwa hosta i adresem IP. Stworzony do wstępnej konfiguracji sprzętu przez konsolę (9600 bodów). A także do przygotowania 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 zazwyczaj nie są potrzebne, ale liczba urządzeń – 15 sztuk. Pozwoliło to przyspieszyć konfigurację. Dalej ustawienie sprzętu było szybsze z użyciem okna poleceń SecureCRT.

Konfiguracja konta dla ssh.

Inny przykład. Konfiguracja również przez konsolę.

# $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$ (najniższa cena tylko za SecureCRT na jeden rok)
Oficjalna strona
Licencja na oprogramowanie kupowana jest raz, z wsparciem (na aktualizacje), a następnie oprogramowanie używane jest z tą licencją przez czas nieograniczony.

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

Obsługuje skrypty (ten artykuł)
Tak Okno poleceń
Serial/Telnet/SSH1/SSH2/Shell systemu operacyjnego

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster