Automatizace vstupu do SecureCRT pomocí skriptů

Síťoví inženýři často čelí úkolu zkopírovat/vložit určité fragmenty z poznámkového bloku do konzole. Obvykle musíte zkopírovat několik parametrů: Uživatelské jméno/Heslo a něco dalšího. Použití skriptů umožňuje tento proces urychlit. ALE úkoly psaní skriptu a provádění skriptu by měly celkově zabrat méně času než ruční konfigurace, jinak jsou skripty k ničemu.

K čemu je tento článek? Tento článek pochází ze série Fast Start a je zaměřen na úsporu času síťových inženýrů při nastavování zařízení (jediný úkol) na více zařízeních. Využívá software SecureCRT a vestavěnou funkci spouštění skriptů.

Obsah

úvod

Program SecureCRT má vestavěný mechanismus spouštění skriptů ihned po vybalení. K čemu jsou terminálové skripty?

  • Automatizované I/O a minimální ověřování I/O.
  • Zrychlete provádění rutinních úkolů – zkraťte pauzy mezi nastavováním zařízení. (De facto snížení pauz způsobených časem k provedení akcí kopírování/minulosti na stejném hardwaru, přičemž na hardware se použijí 3 nebo více fragmentů příkazů.)

Tento dokument pokrývá úkoly:

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

Tvorba jednoduchých skriptů.

Nejjednodušší skripty používají pouze dva příkazy, Send a WaitForString. Tato funkce stačí na 90 % (nebo více) prováděných úkolů.

Skripty mohou pracovat v Pythonu, JS, VBS (Visual Basic), Perlu atd.

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

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řte skript pomocí položky skriptu.

Umožňuje automatizovat proces psaní skriptu. Začnete psát scénář. SecureCRT zaznamenává příkazy a následnou hardwarovou odezvu a zobrazuje hotový skript za vás.

A. Začněte psát skript:
SecureCRT Menu => Script => Spustit záznam skriptu
b. Proveďte akce s konzolou (proveďte konfigurační kroky v CLI).
PROTI. Dokončete psaní skriptu:
Nabídka SecureCRT => Skript => Zastavit záznam skriptu…
Uložte soubor skriptu.

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í/editaci skriptu vyvstává logická otázka: Jak skript aplikovat?
Existuje několik způsobů:

  • Ruční spuštění z nabídky Skript
  • Automatické spuštění po připojení (logon skript)
  • Automatické přihlášení bez použití skriptu
  • Ruční spouštění pomocí tlačítka v SecureCRT (tlačítko musí být ještě vytvořeno a přidáno do SecureCRT)

Ruční spuštění z nabídky Skript

Nabídka SecureCRT => Skript => Spustit…
- Posledních 10 skriptů je zapamatováno a jsou k dispozici pro rychlé spuštění:
Nabídka SecureCRT => Skript => 1 "Název souboru skriptu"
Nabídka SecureCRT => Skript => 2 "Název souboru skriptu"
Nabídka SecureCRT => Skript => 3 "Název souboru skriptu"
Nabídka SecureCRT => Skript => 4 "Název souboru skriptu"
Nabídka SecureCRT => Skript => 5 "Název souboru skriptu"

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

Nastavení skriptu automatického protokolování jsou nakonfigurována pro uloženou relaci: Připojení => Akce přihlášení => Přihlašovací skript

Automatizace vstupu do SecureCRT pomocí skriptů

Automatické přihlášení bez použití skriptu

Je možné automaticky zadat uživatelské jméno a heslo bez psaní skriptu, pouze pomocí vestavěné funkcionality SecureCRT. V nastavení připojení „Připojení“ => Akce přihlášení => Automatizovat přihlášení – je potřeba vyplnit několik svazků – což znamená dvojice: „Očekávaný text“ + „Odeslané znaky do tohoto textu“ takových párů může být mnoho. (Příklad: 1. pár čeká na uživatelské jméno, druhý čeká na heslo, třetí čeká na výzvu privilegovaného režimu, čtvrtý pár na heslo privilegovaného režimu.)

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

Automatizace vstupu do SecureCRT pomocí skriptů

Ruční spouštění pomocí tlačítka v SecureCRT (tlačítko musí být ještě vytvořeno a přidáno do SecureCRT)

V SecureCRT můžete tlačítku přiřadit skript. Tlačítko je přidáno do panelu speciálně vytvořeného pro tento účel.

A. Přidání panelu do rozhraní: Nabídka SecureCRT => Zobrazit => Panel tlačítek
b. Přidejte na panel tlačítko a přidejte skript. – Klepněte pravým tlačítkem myši na panel tlačítek az kontextové nabídky vyberte „Nové tlačítko…“.
PROTI. V dialogovém okně "Tlačítko mapy" v poli "Akce" vyberte akci (funkci) "Spustit skript".
Zadejte popis tlačítka. Barva ikony tlačítka. Dokončete nastavení kliknutím na OK.

Automatizace vstupu do SecureCRT pomocí skriptů

Poznámka:

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

1. Při přihlášení do určité relace je možné určit, který panel se má na této kartě ve výchozím nastavení otevřít.

2. Je možné nastavit předdefinované akce pro standardní akce s vybavením: zobrazit verzi, zobrazit spuštěnou konfiguraci, uložit konfiguraci.

Automatizace vstupu do SecureCRT pomocí skriptů
K těmto tlačítkům není připojen žádný skript. Pouze akční linie:

Automatizace vstupu do SecureCRT pomocí skriptů
Nastavení - takže při přepnutí na relaci se v nastavení relace otevře potřebný panel s tlačítky:

Automatizace vstupu do SecureCRT pomocí skriptů
Pro zákazníka má smysl nastavit jednotlivé skripty pro přihlášení a přejít na panel s častými příkazy pro dodavatele.

Automatizace vstupu do SecureCRT pomocí skriptů
Když stisknete tlačítko Přejít Cisco, panel se přepne na panel tlačítek Cisco.

Automatizace vstupu do SecureCRT pomocí skriptů

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

Jednoduché skripty stačí téměř pro všechny příležitosti. Jednou jsem ale potřeboval trochu zkomplikovat scénář – zrychlit práci. Tato komplikace si jednoduše vyžádala od uživatele další data v dialogovém okně.

Vyžádání dat od uživatele pomocí dialogového okna

Ve skriptu požadavku na data jsem měl 2. Toto je název hostitele a 4. oktet IP adresy. K provedení této akce - vygooglil jsem, jak na to a našel jsem to na oficiálních stránkách SecureCRT (vandyke). - funkce se nazývá prompt.

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

Tato část skriptu požadovala název hostitele a čísla z posledního oktetu. Od bylo 15 kusů techniky. A data byla prezentována v tabulce, pak jsem zkopíroval hodnoty z tabulky a vložil je do dialogových oken. Dále scénář fungoval samostatně.

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

Tento skript spustil mé příkazové okno (shell) a zkopíroval data přes FTP. Na konci relaci zavřete. K tomu není možné použít poznámkový blok, protože kopírování trvá velmi dlouho a data ve vyrovnávací paměti FTP nebudou tak dlouho uložena:

# $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 uzavřen přímý přístup k síťovým zařízením. Do zařízení bylo možné vstoupit tak, že se nejprve připojili k Výchozí bráně a z ní pak k zařízení, které je k ní připojeno. K připojení byl použit ssh klient zabudovaný do IOS/hardwarového softwaru. V souladu s tím byly v konzole požadovány uživatelské jméno a heslo. Pomocí níže uvedeného skriptu bylo uživatelské jméno a heslo zadáno 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: Byly zde 2 skripty. Jeden pro účet správce, druhý pro účet eSIGHT.

Skript s možností přímého připojení dat během provádění skriptu.

Úkolem bylo přidat statickou trasu na všechna síťová zařízení. Ale brána k internetu na každém zařízení byla jiná (a lišila se od výchozí brány). Následující skript zobrazil směrovací tabulku, vstoupil do konfiguračního režimu, nenapsal příkaz do konce (IP adresa brány do Internetu) - tuto část jsem přidal. 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 v řádku: crt.Screen.Send("ip route 10.10.10.8 255.255.255.252 ") není přidána IP adresa brány a není tam žádný znak návratu vozíku. Skript čeká na další řádek se znaky "(config) #" Tyto znaky se objevily poté, co jsem zadal ip adresu a enter.

závěr:

Při psaní skriptu a jeho provádění je třeba dodržovat pravidlo: Čas na psaní skriptu a provádění skriptu by nikdy neměl být delší než čas teoreticky strávený ručním prováděním stejné práce (kopírování / vkládání z poznámkového bloku, psaní a ladění příručka pro ansible, psaní a ladění python skriptu). To znamená, že použití skriptu by mělo ušetřit čas a neztrácet čas jednorázovou automatizací procesů (tj. když je skript jedinečný a nebude se již opakovat). Ale pokud je skript jedinečný a automatizace se skriptem a psaní / ladění skriptu zabere méně času než to udělat jiným způsobem (ansible, příkazové okno), pak je skript nejlepším řešením.
Ladění skriptu. Skript se rozrůstá postupně, ladění probíhá na záběhu na prvním, druhém, třetím zařízení a na čtvrtém bude skript s největší pravděpodobností plně funkční.

Spuštění skriptu (zadáním uživatelského jména a hesla) pomocí myši je obvykle rychlejší než kopírování uživatelského jména a hesla z poznámkového bloku. Ale z bezpečnostního hlediska to není bezpečné.
Další (skutečný) příklad při použití skriptu: Nemáte přímý přístup k síťovému zařízení. Je však potřeba nakonfigurovat všechna síťová zařízení (přenést je do monitorovacího systému, nakonfigurovat další uživatelské jméno/heslo/snmpv3username/heslo). Existuje přístup, když přejdete na přepínač Core, z něj otevřete SSH na další zařízení. Proč nemůžete použít Ansible. - Protože narážíme na limit počtu povolených simultánních relací na síťovém zařízení (řádek vty 0 4, uživatelské rozhraní vty 0 4) (další otázkou je, jak spustit různá zařízení v Ansible se stejným prvním skokem SSH).

Skript zkracuje čas při dlouhých operacích – například kopírování souborů přes FTP. Po dokončení kopírování začne skript okamžitě fungovat. Osoba bude muset vidět konec kopírování, pak si uvědomit konec kopírování a poté zadat příslušné příkazy. Scénář to dělá objektivně rychleji.

Skripty jsou použitelné tam, kde není možné použít nástroje hromadného doručování dat: Console. Nebo když jsou některá data pro zařízení jedinečná: název hostitele, adresa IP správy. Nebo při psaní programu a ladění je to obtížnější než přidávání dat přijatých ze zařízení za běhu skriptu. - Příklad se skriptem pro předepsání trasy, kdy každé zařízení má svou IP adresu poskytovatele internetu. (Moji kolegové psali takové skripty - když DMVPN mluvil přes 3. Bylo nutné změnit nastavení DMVPN).

Případová studie: Konfigurace počátečních nastavení na novém přepínači pomocí portů konzoly:

A. Připojte kabel konzoly k zařízení.
B. Spusťte skript
B. Čekal na provedení skriptu
D. Zapojte kabel konzoly do dalšího zařízení.
E. Pokud přepínač není poslední, přejděte ke kroku B.

Výsledkem práce na scénáři:

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

PS operace se musela opakovat. Protože výchozí ssh nebylo nakonfigurováno/zakázáno. (Ano, to je moje chyba.)

Použité zdroje.

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

Dodatek 1: Ukázkové skripty.


Příklad dlouhého skriptu se dvěma dotazy: název hostitele a adresa IP. Byl vytvořen pro přednastavení zařízení prostřednictvím konzoly (9600 baudů). A také připravit 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 většinou nejsou potřeba, ale množství vybavení je 15 ks. Povoleno rychlejší nastavení. Bylo rychlejší nastavit zařízení pomocí okna příkazu SecureCRT.

Nastavení účtu pro ssh.

Další příklad. Konfigurace je 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 je pouze pro SecureCRT na jeden rok)
Oficiální internetové stránky
Softwarová licence se zakoupí jednorázově s podporou (pro aktualizaci), poté je software s touto licencí používán neomezeně dlouho.

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

Existuje podpora skriptů (tento článek)
K dispozici je Příkazové okno
Operační systém Serial/Telnet/SSH1/SSH2/Shell

Zdroj: www.habr.com