Automatització de l'entrada a SecureCRT mitjançant scripts

Els enginyers de xarxa sovint s'enfronten a la tasca de copiar/enganxar determinats fragments d'un bloc de notes a la consola. Normalment heu de copiar diversos paràmetres: Nom d'usuari/Contrasenya i una altra cosa. L'ús d'scripts permet accelerar aquest procés. PERÒ les tasques d'escriure l'script i executar l'script haurien de trigar menys temps que la configuració manual, en cas contrari, els scripts no serveixen per a res.

Per a què serveix aquest article? Aquest article és de la sèrie Fast Start i té com a objectiu estalviar temps als enginyers de xarxa quan configuren equips (una tasca) en diversos dispositius. Utilitza el programari SecureCRT i la funcionalitat d'execució d'scripts integrada.

Contingut

Introducció

El programa SecureCRT té un mecanisme d'execució d'scripts integrat. Per a què serveixen els scripts de terminal?

  • E/S automatitzada i validació mínima d'E/S.
  • Accelera l'execució de les tasques rutinàries, reduint les pauses entre la configuració de l'equip. (Reducció de fet de les pauses causades pel temps per realitzar accions de còpia/passat al mateix maquinari, amb 3 o més fragments d'ordres que s'aplicaran al maquinari.)

Aquest document inclou les tasques:

  • Creació de scripts senzills.
  • Execució d'scripts a SecureCRT.
  • Exemples d'ús de scripts simples i avançats. (Pràctica des de la vida real.)

Creació de scripts senzills.

Els scripts més senzills utilitzen només dues ordres, Send i WaitForString. Aquesta funcionalitat és suficient per al 90% (o més) de les tasques realitzades.

Els scripts poden funcionar en Python, JS, VBS (Visual Basic), Perl, etc.

Pitó

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

Normalment un fitxer amb l'extensió "*.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

Normalment un fitxer amb l'extensió "*.vbs"

Creeu un script mitjançant una entrada d'script.

Permet automatitzar el procés d'escriptura d'un script. Comences a escriure un guió. SecureCRT registra les ordres i la resposta del maquinari posterior i us mostra l'script acabat.

A. Comença a escriure el guió:
Menú SecureCRT => Script => Inicia l'script d'enregistrament
b. Realitzeu accions amb la consola (realitzeu els passos de configuració a la CLI).
V. Acabeu d'escriure el guió:
Menú SecureCRT => Script => Atura la gravació de l'script...
Deseu el fitxer d'script.

Exemple d'ordres executades i script desat:

Automatització de l'entrada a SecureCRT mitjançant scripts

Execució d'scripts a SecureCRT.

Després de crear/editar el guió, sorgeix una pregunta natural: Com aplicar el guió?
Hi ha diverses maneres:

  • S'executa manualment des del menú Script
  • Inici automàtic després de la connexió (script d'inici de sessió)
  • Inici de sessió automàtic sense utilitzar un script
  • Activació manual amb un botó a SecureCRT (encara no s'ha creat i afegit un botó a SecureCRT)

S'executa manualment des del menú Script

Menú SecureCRT => Script => Executar...
- Els darrers 10 scripts es recorden i estan disponibles per a un llançament ràpid:
Menú SecureCRT => Script => 1 "Nom del fitxer d'script"
Menú SecureCRT => Script => 2 "Nom del fitxer d'script"
Menú SecureCRT => Script => 3 "Nom del fitxer d'script"
Menú SecureCRT => Script => 4 "Nom del fitxer d'script"
Menú SecureCRT => Script => 5 "Nom del fitxer d'script"

Inici automàtic després de la connexió (script d'inici de sessió)

La configuració de l'script de registre automàtic es configura per a la sessió desada: Connexió => Accions d'inici de sessió => Script d'inici de sessió

Automatització de l'entrada a SecureCRT mitjançant scripts

Inici de sessió automàtic sense utilitzar un script

És possible introduir automàticament el nom d'usuari de la contrasenya sense escriure cap script, utilitzant només la funcionalitat integrada de SecureCRT. A la configuració de connexió "Connexió" => Accions d'inici de sessió => Automatitzar l'inici de sessió - heu d'omplir diversos paquets - que signifiquen els parells: "Text esperat" + "Caràcters enviats a aquest text" hi pot haver molts parells. (Exemple: el primer parell esperant el nom d'usuari, el segon esperant la contrasenya, el tercer esperant el missatge del mode privilegiat, el quart parell per a la contrasenya del mode privilegiat.)

Exemple d'inici de sessió automàtic a Cisco ASA:

Automatització de l'entrada a SecureCRT mitjançant scripts

Activació manual amb un botó a SecureCRT (encara no s'ha creat i afegit un botó a SecureCRT)

A SecureCRT, podeu assignar un script a un botó. El botó s'afegeix a un panell creat especialment per a aquest propòsit.

A. Afegeix un panell a la interfície: Menú SecureCRT => Visualitza => Barra de botons
b. Afegiu un botó al tauler i afegiu un script. - Feu clic amb el botó dret a la barra de botons i seleccioneu "Botó nou..." al menú contextual.
V. Al quadre de diàleg "Botó del mapa", al camp "Acció", seleccioneu l'acció (funció) "Executar script".
Especifiqueu un títol per al botó. El color de la icona del botó. Finalitzeu la configuració fent clic a D'acord.

Automatització de l'entrada a SecureCRT mitjançant scripts

Nota:

El panell amb botons és una funcionalitat molt útil.

1. Quan inicieu sessió en una sessió específica, és possible especificar quin panell s'obrirà a aquesta pestanya de manera predeterminada.

2. És possible establir accions predefinides per a accions estàndard amb equip: mostrar la versió, mostrar la configuració en execució, desar la configuració.

Automatització de l'entrada a SecureCRT mitjançant scripts
No s'adjunta cap script a aquests botons. Només línia d'acció:

Automatització de l'entrada a SecureCRT mitjançant scripts
Configuració: de manera que quan es canvia a una sessió, s'obri el tauler necessari amb botons a la configuració de la sessió:

Automatització de l'entrada a SecureCRT mitjançant scripts
Té sentit que el client configure scripts individuals per iniciar sessió i vagi al tauler amb ordres freqüents per al venedor.

Automatització de l'entrada a SecureCRT mitjançant scripts
Quan premeu el botó Go Cisco, el tauler canvia a la barra de botons de Cisco.

Automatització de l'entrada a SecureCRT mitjançant scripts

Exemples d'ús de scripts simples i avançats. (Pràctica des de la vida real.)

Els scripts senzills són suficients per a gairebé totes les ocasions. Però una vegada vaig haver de complicar una mica el guió, per accelerar el treball. Aquesta complicació simplement sol·licitava dades addicionals en un quadre de diàleg de l'usuari.

Sol·licitud de dades a l'usuari mitjançant un quadre de diàleg

En tenia 2 a l'script de sol·licitud de dades. Aquest és el nom d'amfitrió i el quart octet de l'adreça IP. Per realitzar aquesta acció, vaig buscar a Google com fer-ho i ho vaig trobar al lloc web oficial de SecureCRT (vandyke). - la funcionalitat s'anomena 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") 

Aquesta part de l'script va demanar el nom d'amfitrió i els números de l'últim octet. Ja que hi havia 15 peces d'equip. I les dades es van presentar en una taula, després vaig copiar els valors de la taula i els vaig enganxar als quadres de diàleg. A més, el guió va funcionar de manera independent.

Còpia FTP a l'equip de xarxa.

Aquest script va llançar la meva finestra d'ordres (shell) i va copiar dades mitjançant FTP. En acabar, tanqueu la sessió. És impossible utilitzar el bloc de notes per a això, perquè la còpia triga molt de temps i les dades del buffer FTP no s'emmagatzemaran durant tant de temps:

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

Introduir el nom d'usuari/contrasenya mitjançant un script

En un dels clients es va tancar directament l'accés als equips de xarxa. Va ser possible entrar a l'equip connectant-se primer a la passarel·la predeterminada i, a partir d'aquesta, a l'equip connectat a ella. Es va utilitzar el client ssh integrat al programari IOS/maquinari per connectar-se. En conseqüència, el nom d'usuari i la contrasenya es van demanar a la consola. Amb l'script següent, el nom d'usuari i la contrasenya s'han introduït automàticament:

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

Nota: hi havia 2 scripts. Un per al compte d'administrador i el segon per al compte eSIGHT.

Script amb la capacitat d'afegir dades directament durant l'execució de l'script.

La tasca era afegir una ruta estàtica a tots els equips de xarxa. Però la passarel·la a Internet de cada equip era diferent (i era diferent de la passarel·la predeterminada). El següent script mostrava la taula d'encaminament, va entrar al mode de configuració, no va escriure l'ordre fins al final (l'adreça IP de la passarel·la a Internet): he afegit aquesta part. Després de prémer Enter, l'script va continuar executant l'ordre.

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

En aquest script, a la línia: crt.Screen.Send("ip route 10.10.10.8 255.255.255.252") l'adreça IP de la passarel·la no s'afegeix i no hi ha cap caràcter de retorn de carro. L'script està esperant la següent línia amb els caràcters "(config) #" Aquests caràcters van aparèixer després d'introduir l'adreça IP i entrar.

conclusió:

En escriure un script i executar-lo, s'ha de seguir la regla: El temps per escriure un script i executar un script mai no hauria de ser superior al temps teòricament dedicat a fer el mateix treball manualment (copiar/enganxar des d'un bloc de notes, escriure i depurar). un llibre de jugades per a ansible, escriure i depurar script Python). És a dir, l'ús de l'script hauria d'estalviar temps i no perdre temps en l'automatització puntual dels processos (és a dir, quan l'script és únic i no hi haurà més repetició). Però si l'script és únic i l'automatització amb l'script i escriure/depurar l'script triga menys temps que fer-ho de qualsevol altra manera (ansible, finestra d'ordres), aleshores l'script és la millor solució.
Depuració d'un script. L'script creix gradualment, la depuració es realitza a l'inici del primer, segon i tercer dispositiu i, al quart, és probable que l'script estigui completament operatiu.

Executar un script (introduint nom d'usuari+contrasenya) amb el ratolí sol ser més ràpid que copiar el nom d'usuari i la contrasenya des d'un bloc de notes. Però no segur des del punt de vista de la seguretat.
Un altre exemple (real) quan utilitzeu un script: no teniu accés directe als equips de xarxa. Però cal configurar tots els equips de xarxa (introduir-los al sistema de supervisió, configurar un Nom d'usuari/contrasenya/snmpv3nom d'usuari/contrasenya addicional). Hi ha accés quan aneu a l'interruptor Core, des d'ell obriu SSH a altres equips. Per què no podeu utilitzar Ansible? - Perquè ens trobem amb un límit en el nombre de sessions simultànies permeses en equips de xarxa (línia vty 0 4, interfície d'usuari vty 0 4) (una altra pregunta és com iniciar diferents equips a Ansible amb el mateix primer salt SSH).

L'script redueix el temps durant les operacions llargues, per exemple, la còpia de fitxers mitjançant FTP. Un cop finalitzada la còpia, l'script comença a funcionar immediatament. Una persona haurà de veure el final de la còpia, després adonar-se del final de la còpia i, a continuació, introduir les ordres adequades. El guió ho fa objectivament més ràpid.

Els scripts són aplicables quan és impossible utilitzar eines de lliurament massiu de dades: Consola. O quan algunes de les dades de l'equip són úniques: nom d'amfitrió, adreça IP de gestió. O quan s'escriu un programa i es depura és més difícil que afegir dades rebudes de l'equip mentre s'executa l'script. - Un exemple amb un script per a la prescripció d'una ruta, quan cada equip té la seva pròpia adreça IP del proveïdor d'Internet. (Els meus col·legues van escriure aquests scripts: quan el DMVPN parlava era de més de 3. Calia canviar la configuració del DMVPN).

Cas pràctic: Configuració de la configuració inicial en un commutador nou mitjançant els ports de la consola:

A. Connecteu el cable de la consola al dispositiu.
B. Executeu l'script
B. S'ha esperat l'execució del guió
D. Connecteu el cable de la consola al dispositiu següent.
E. Si l'interruptor no és l'últim, aneu al pas B.

Com a resultat del treball del guió:

  • la contrasenya inicial s'estableix a l'equip.
  • S'ha introduït el nom d'usuari
  • s'introdueix l'adreça IP única del dispositiu.

PD: calia repetir l'operació. Perquè ssh per defecte no s'ha configurat/desactivat. (Sí, aquest és el meu error.)

Fonts utilitzades.

1. Sobre la creació d'scripts
2. Exemples de guió

Apèndix 1: Exemples de scripts.


Un exemple d'script llarg, amb dues consultes: Nom d'amfitrió i adreça IP. Va ser creat per a la preconfiguració d'equips a través de la consola (9600 bauds). I també per preparar la connexió dels equips a la xarxa.

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

Aquests scripts no solen ser necessaris, però la quantitat d'equip és de 15 peces. Es permet una configuració més ràpida. Va ser més ràpid configurar l'equip mitjançant la finestra d'ordres SecureCRT.

Configuració d'un compte per a ssh.

Un altre exemple. La configuració també es fa a través de la consola.

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


Sobre SecureCRT:Programari de pagament: a partir de 99 dòlars (el preu més baix només és per a SecureCRT durant un any)
Lloc web oficial
Una llicència de programari s'adquireix una vegada, amb suport (per a l'actualització), després el programari s'utilitza amb aquesta llicència durant un temps il·limitat.

Funciona amb sistemes operatius Mac OS X i Windows.

Hi ha suport de script (aquest article)
Hi Finestra de comandaments
Sistema operatiu sèrie/Telnet/SSH1/SSH2/Shell

Font: www.habr.com