Automatizace vstupu do SecureCRT pomocí skriptů

Síťoví inženýři se často potýkají se zadáním určitých fragmentů z textového editoru do konzole pomocí copy/paste. Obvykle je nutné zkopírovat několik parametrů: Uživatelské jméno/Heslo a něco dalšího. Tento proces lze urychlit použitím skriptů. ALE celkový čas na napsání skriptu a jeho provedení musí být kratší než ruční nastavení, jinak jsou skripty k ničemu.

Proč je tento článek potřeba. Tento článek je součástí cyklu Rychlý start a je určen k úspoře času sítovým inženýrům při nastavování zařízení (jednoho úkolu) na několika přístrojích. Používá se software SecureCRT a zabudovaná funkce pro spouštění skriptů.

Obsah

Úvod

Do programu SecureCRT je již zabudován mechanismus pro provádění skriptů. K čemu jsou skripty v terminálu:

  • Automatické zadávání a výstup a minimální kontrola správnosti zadání/výstupu.
  • Urychlení provádění rutinních úkolů – zkrácení pauz mezi nastavením zařízení. (De facto zkrácení pauz způsobených časem potřebným k provedení akcí copy/paste na stejném zařízení při 3 a více fragmentech příkazů pro použití na zařízení.)

V tomto dokumentu jsou projednávány úkoly:

  • Vytváření jednoduchých skriptů.
  • Spouštění skriptů na SecureCRT.
  • Příklady použití jednoduchých a pokročilých skriptů. (Praxe z reálného života.)

Vytváření jednoduchých skriptů.

Jednoduché skripty používají pouze dvě příkazy Send a WaitForString. Tato funkčnost postačí pro 90% (a více) vykonávaných úkolů.

Skripty mohou být napsány v jazyce Python, JS, VBS (Visual Basic), Perl atd.

CouchDB

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

Obvykle soubor s příponou „*.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

Obvykle soubor s příponou „*.vbs“

Vytvoření skriptu pomocí nahrávání skriptu.

Umožňuje automatizovat proces psaní skriptu. Spustíte nahrávání skriptu. SecureCRT zaznamenává příkazy a následnou odpověď zařízení a poskytuje vám hotový skript.

a. Spustit nahrávání skriptu:
Menu SecureCRT => Skript => Spustit nahrávání skriptu
b. Provést akce s konzolí (provést akce nastavení v CLI).
c. Ukončit nahrávání skriptu:
Menu SecureCRT => Skript => Zastavit nahrávání skriptu…
Uložit soubor se skriptem.

Příklad provedených příkazů a uloženého skriptu:

Automatizace vstupu do SecureCRT pomocí skriptů

Spouštění skriptů na SecureCRT.

Po vytvoření/úpravě skriptu se vynořuje zásadní otázka: Jak skript použít?
Existuje několik způsobů:

  • Ruční spuštění z menu Skript
  • Automatické spuštění po připojení (logon script)
  • Automatický logon bez použití skriptu
  • Spouštění ručně pomocí tlačítka v SecureCRT (tlačítko bude ještě potřeba vytvořit a přidat do SecureCRT)

Ruční spuštění z menu Skript

Menu SecureCRT => Skript => Spustit…
— Posledních 10 skriptů se pamatuje a je dostupných pro rychlé spuštění:
Menu SecureCRT => Skript => 1 „Název souboru se skriptem“
Menu SecureCRT => Skript => 2 „Název souboru se skriptem“
Menu SecureCRT => Skript => 3 „Název souboru se skriptem“
Menu SecureCRT => Skript => 4 „Název souboru se skriptem“
Menu SecureCRT => Skript => 5 „Název souboru se skriptem“

Automatické spuštění po připojení (logon script)

Nastavení automatického skriptu pro přihlašování se konfiguruje pro uloženou relaci: Připojení => Akce přihlášení => Přihlašovací skript

Automatizace vstupu do SecureCRT pomocí skriptů

Automatický logon bez použití skriptu

Existuje možnost automatického zadání uživatelského jména a hesla bez psaní skriptu, pouze pomocí vestavěné funkce SecureCRT. V nastavení připojení „Připojení“ => Akce přihlášení => Automatizovat přihlášení – je nutné vyplnit několik sad, které představují páry: „Očekávaný text“ + „Odesílané znaky na tento text“ takových párů může být mnoho. (Příklad: 1. pár očekávání zadání uživatelského jména, 2. očekávání zadání hesla, 3. očekávání vyzvání do privilegovaného režimu, 4. heslo do privilegovaného režimu.)

Příklad automatického přihlášení na Cisco ASA:

Automatizace vstupu do SecureCRT pomocí skriptů

Spouštění ručně pomocí tlačítka v SecureCRT (tlačítko bude ještě potřeba vytvořit a přidat do SecureCRT)

V SecureCRT můžete přiřadit skript k tlačítku. Tlačítko se přidá na speciálně vytvořený panel pro tento účel.

a. Přidat panel do rozhraní: Menu SecureCRT => Zobrazit => Lišta tlačítek
b. Přidat tlačítko na panel a přidat skript. – Klikněte pravým tlačítkem na panel Lišta tlačítek a v kontextovém menu vyberte položku „Nové tlačítko…”.
c. V dialogovém okně „Mapovat tlačítko“ v poli „Akce“ vyberte činnost (funkci) „Spustit skript“.
Uveďte popis tlačítka. Barva ikony tlačítka. Nastavení ukončete stisknutím OK.

Automatizace vstupu do SecureCRT pomocí skriptů

Poznámka:

Panel s tlačítky je velmi užitečná funkce.

1. Existuje možnost při přihlášení k určité relaci určit, který panel se má ve výchozím nastavení otevřít pro tuto kartu.

2. Existuje možnost předem definovat standardní akce s hardwarem: zobrazit show version, show running-config, uložit konfiguraci.

Automatizace vstupu do SecureCRT pomocí skriptů
K těmto tlačítkům není přiřazen žádný skript. Pouze řádek s akcemi:

Automatizace vstupu do SecureCRT pomocí skriptů
Nastavení – aby se při přepnutí na relaci otevřel požadovaný panel s tlačítky, probíhá v nastavení relace:

Automatizace vstupu do SecureCRT pomocí skriptů
Pro zákazníka dává smysl nastavit individuální skripty pro přihlášení a přechod na panel s častými příkazy pro dodavatele.

Automatizace vstupu do SecureCRT pomocí skriptů
Po stisknutí tlačítka Go Cisco se panel přepne na Cisco Button Bar.

Automatizace vstupu do SecureCRT pomocí skriptů

Příklady použití jednoduchých a pokročilých skriptů. (Praxe z reálného života.)

Jednoduchých skriptů stačí téměř na všechny případy. Ale jednou jsem potřeboval mírně složitější skript pro urychlení práce. Toto zkomplikování pouze požadovalo dodatečné údaje v dialogovém okně od uživatele.

Dotazování uživatele pomocí dialogového okna

V mém skriptu pro dotazy na údaje byly 2. To bylo jméno hostitele a 4. oktet IP adresy. Abych tuto akci vykonal, vyhledal jsem, jak to udělat, a našel na oficiálních stránkách SecureCRT (vandyke). – funkce se nazývá prompt.

	crt.Screen.WaitForString("-Vlanif200]")
	hostnamestr = crt.Dialog.Prompt("Zadejte hostname:", "hostname", "", False)
	ipaddressstr = crt.Dialog.Prompt("Zadejte IP adresu:", "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") 

Tato část skriptu požadovala hostnamestr a čísla z posledního oktetu. Protože bylo zařízení 15 kusů a údaje byly uvedeny v tabulce, kopíroval jsem hodnoty z tabulky a vkládal do dialogových oken. Dále skript pracoval samostatně.

FTP kopírování na síťové zařízení.

Tento skript spouštěl příkazové okno (shell) a kopíroval údaje pomocí FTP. Po dokončení uzavíral relaci. Použití poznámkového bloku pro to není možné, protože kopírování trvá velmi dlouho a data v bufferu FTP nebudou tak dlouho uchována:

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

Zadání uživatelského jména/hesla pomocí skriptu

U jednoho zákazníka byl přístup k síťovému vybavení uzavřen. Na vybavení bylo možné se dostat nejprve připojením k přednastavené bráně, a poté se připojit k zařízení, které k ní bylo připojeno. Pro připojení byl použit SSH klient integrovaný v IOS/softwaru vybavení. Odpovídajícím způsobem byl požadován uživatelský název a heslo na konzoli. Pomocí níže uvedeného skriptu byla uživatelský název a heslo zadána automaticky:

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

Poznámka: Skriptů bylo 2. Jeden pro administrátorský účet, druhý pro účet eSIGHT.

Skript s možností přidávat data během provádění skriptu.

Úkolem bylo přidat statickou trasu na veškerém síťovém vybavení. Avšak brána do internetu na každém zařízení byla vlastní (a lišila se od výchozí brány). Následující skript vypisoval směrovací tabulku, přešel do konfiguračního režimu, nedopsal na konec příkaz (IP adresa brány do internetu) – tuto část jsem doplňoval já. Poté, co jsem stiskl Enter, skript pokračoval ve vykonávání příkazu.

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

V tomto skriptu je v řádku: crt.Screen.Send(«ip route 10.10.10.8 255.255.255.252 „) nedopsaná IP adresa brány a chybí znak pro přechod na novou řádku. Skript čeká na další řádek se znaky „(config)#“. Tyto znaky se objevily po zadání IP adresy mnou a stisknutí klávesy Enter.

Závěr:

Při psaní skriptu a jeho spuštění se musí nezbytně dodržovat pravidlo: Čas psaní skriptu a čas jeho vykonávání by nikdy neměl být delší než čas teoreticky potřebný k vykonání stejné práce ručně (kopírování/vkládání z poznámkového bloku, psaní a ladění playbooku pro ansible, psaní a ladění skriptu python). Tedy použití skriptu by mělo šetřit čas, nikoli ztrácet čas na jednorázovou automatizaci procesů (t. j. když je skript unikátní a opakování nebude). Ale pokud je skript unikátní a automatizace s ním a psaní/ladění skriptu zabere méně času než provedení jakýmkoli jiným způsobem (ansible, příkazový řádek), pak je skript nejlepším řešením.
Ladění skriptu. Skript se postupně rozrůstá, ladění probíhá na prvním, druhém, třetím zařízení a ke čtvrtému bude skript pravděpodobně zcela funkční.

Spuštění skriptu (s zadáním uživatelského jména a hesla) pomocí myši obvykle probíhá rychleji než kopírování uživatelského jména a hesla z textového editoru. Ale z pohledu bezpečnosti to není bezpečné.
Další (skutečný) příklad použití skriptu: Nemáte přímý přístup k síťovému zařízení. Ale je potřeba nakonfigurovat všechna síťová zařízení (přidat do monitorovacího systému, dodatečně nastavit uživatelské jméno/heslo/snmpv3uživatelské jméno/hESlo). Je přístup, když se připojíte ke Core switchi, z něj otevřete SSH na jiné zařízení. Proč nemůžete použít nástroje Ansible? — Protože čelíme omezení počtu povolených současných relací na síťovém zařízení (line vty 0 4, user-interface vty 0 4) (další otázka, jak v Ansible přidat různá zařízení s jedním a tím samým SSH prvním skokem).

Skript zkracuje dobu při dlouhých operacích – například kopírování souborů přes FTP. Po dokončení kopírování skript okamžitě začne pracovat. Člověk musí vidět dokončení kopírování, pak si uvědomit, že kopírování skončilo, a poté zadat příslušné příkazy. Skript to dělá objektivně rychleji.

Skripty jsou aplikovatelné tam, kde není možné použít prostředky hromadného doručování dat: Konzole. Nebo když jsou některá data pro zařízení jedinečná: hostname, spravovaná IP adresa. Nebo když je složitější napsat program a ladit ho, než doplnit data získaná z zařízení během běhu skriptu. — Příklad se skriptem pro nastavení cesty, kdy na každém zařízení je IP adresa internetového poskytovatele jiná. (Moji kolegové psali takové skripty — když bylo DMVPN spoke přes 300. Bylo nutné změnit nastavení DMVPN).

Příklad z praxe: Nastavení počátečních konfigurací na novém switchi přes konzolové porty:

A. Vložil jsem konzolový kabel do zařízení.
B. Spustil jsem skript.
C. Počkal jsem na dokončení skriptu.
D. Přepojil jsem konzolový kabel do dalšího zařízení.
E. Pokud switch není poslední, přejděte k bodu B.

Celkem na základě činnosti skriptu:

  • na zařízení bylo nastaveno počáteční heslo.
  • bylo zadáno uživatelské jméno.
  • byla zadána jedinečná IP adresa zařízení.

P. S. operaci bylo nutné opakovat. Protože podle defaultu ssh nebyl nastaven/y vypnut. (Ano, to byla moje chyba.)

Použité zdroje.

1. O vytváření skriptů.
2. Příklady skriptů.

Příloha 1: Příklady skriptů.


Příklad dlouhého skriptu se dvěma dotazy: hostname a IP adresa. Byl vytvořen pro přednastavení zařízení přes konzoli (9600 baud). Také pro přípravu připojení zařízení k síti.

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

Takové skripty obvykle nejsou potřeba, ale množství zařízení – 15 kusů – umožnilo urychlit nastavení. Další konfigurace zařízení byla rychlejší pomocí okna příkazů SecureCRT.

Nastavení účtu pro ssh.

Další příklad. Nastavení také přes konzoli.

# $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:Placený software: od 99 $ (nejnižší cena pouze za SecureCRT na jeden rok)
Oficiální web
Licenci na software je nutné zakoupit pouze jednou, s podporou (pro aktualizace), poté se software používá s touto licencí neomezeně.

Funguje na operačních systémech Mac OS X a Windows.

Podporuje skripty (tento článek)
Existuje Okno příkazů
Serial/Telnet/SSH1/SSH2/Shell operačního systému

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster