Entrada automática en SecureCRT mediante scripts

Los ingenieros de redes a menudo se enfrentan a la tarea de copiar/pegar ciertos fragmentos de un bloc de notas a la consola. Por lo general, debe copiar varios parámetros: nombre de usuario/contraseña y algo más. El uso de scripts le permite acelerar este proceso. PERO las tareas de escribir el script y ejecutar el script deberían tomar menos tiempo en total que la configuración manual, de lo contrario, los scripts son inútiles.

¿Para qué es este artículo? Este artículo es de la serie Fast Start y tiene como objetivo ahorrar tiempo a los ingenieros de red al configurar el equipo (tarea única) en varios dispositivos. Utiliza el software SecureCRT y la función de ejecución de scripts integrada.

contenido

introducción

El programa SecureCRT tiene un mecanismo de ejecución de script incorporado listo para usar. ¿Para qué sirven los scripts de terminal?

  • E/S automatizada y validación mínima de E/S.
  • Acelere la ejecución de tareas rutinarias, reduciendo las pausas entre las configuraciones del equipo. (Reducción de facto de las pausas causadas por el tiempo para realizar acciones de copiar/pasar en el mismo hardware, con 3 o más fragmentos de comando que se aplicarán al hardware).

Este documento cubre las tareas:

  • Creación de guiones sencillos.
  • Ejecución de scripts en SecureCRT.
  • Ejemplos de uso de scripts simples y avanzados. (Práctica de la vida real.)

Creación de guiones sencillos.

Los scripts más simples usan solo dos comandos, Enviar y EsperarCadena. Esta funcionalidad es suficiente para el 90% (o más) de las tareas realizadas.

Los scripts pueden funcionar en Python, JS, VBS (Visual Basic), Perl, etc.

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

Por lo general, un archivo con la extensión "*.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

Por lo general, un archivo con la extensión "*.vbs"

Cree un script utilizando una entrada de script.

Le permite automatizar el proceso de escribir un guión. Empiezas a escribir un guión. SecureCRT registra los comandos y la respuesta posterior del hardware y muestra el script terminado para usted.

A. Comience a escribir el guión:
Menú SecureCRT => Guión => Iniciar guión de grabación
b. Realice acciones con la consola (realice los pasos de configuración en la CLI).
v Termina de escribir el guión:
Menú SecureCRT => Guión => Dejar de grabar guión…
Guarde el archivo de secuencia de comandos.

Ejemplo de comandos ejecutados y script guardado:

Entrada automática en SecureCRT mediante scripts

Ejecución de scripts en SecureCRT.

Después de crear/editar el guión, surge una pregunta natural: ¿Cómo aplicar el guión?
Hay varias maneras:

  • Ejecutar manualmente desde el menú Script
  • Inicio automático después de la conexión (script de inicio de sesión)
  • Inicio de sesión automático sin usar un script
  • Activación manual con un botón en SecureCRT (aún no se ha creado y agregado un botón a SecureCRT)

Ejecutar manualmente desde el menú Script

Menú SecureCRT => Script => Ejecutar…
- Los últimos 10 scripts se recuerdan y están disponibles para un inicio rápido:
Menú SecureCRT => Script => 1 "Nombre de archivo de script"
Menú SecureCRT => Script => 2 "Nombre de archivo de script"
Menú SecureCRT => Script => 3 "Nombre de archivo de script"
Menú SecureCRT => Script => 4 "Nombre de archivo de script"
Menú SecureCRT => Script => 5 "Nombre de archivo de script"

Inicio automático después de la conexión (script de inicio de sesión)

Los ajustes del script de registro automático se configuran para la sesión guardada: Conexión => Acciones de inicio de sesión => Script de inicio de sesión

Entrada automática en SecureCRT mediante scripts

Inicio de sesión automático sin usar un script

Es posible ingresar automáticamente el nombre de usuario de la contraseña sin escribir un script, utilizando solo la funcionalidad integrada de SecureCRT. En la configuración de conexión "Conexión" => Acciones de inicio de sesión => Automatizar el inicio de sesión: debe completar varios paquetes, lo que significa que los pares: "Texto esperado" + "Caracteres enviados a este texto", puede haber muchos de estos pares. (Ejemplo: el primer par esperando el nombre de usuario, el segundo esperando la contraseña, el tercero esperando el aviso del modo privilegiado, el cuarto par esperando la contraseña del modo privilegiado).

Ejemplo de inicio de sesión automático en Cisco ASA:

Entrada automática en SecureCRT mediante scripts

Activación manual con un botón en SecureCRT (aún no se ha creado y agregado un botón a SecureCRT)

En SecureCRT, puede asignar un script a un botón. El botón se agrega a un panel especialmente creado para este propósito.

A. Agregar un panel a la interfaz: Menú SecureCRT => Ver => Barra de botones
b. Agregue un botón al panel y agregue un script. – Haga clic con el botón derecho en la barra de botones y seleccione "Nuevo botón..." en el menú contextual.
v En el cuadro de diálogo "Botón de mapa", en el campo "Acción", seleccione la acción (función) "Ejecutar script".
Especifique un título para el botón. El color del icono del botón. Finalice la configuración haciendo clic en Aceptar.

Entrada automática en SecureCRT mediante scripts

Nota:

El panel con botones es una funcionalidad muy útil.

1. Es posible, cuando inicie sesión en una sesión específica, especificar qué panel abrir en esta pestaña de forma predeterminada.

2. Es posible establecer acciones predefinidas para acciones estándar con el equipo: mostrar la versión, mostrar la configuración en ejecución, guardar la configuración.

Entrada automática en SecureCRT mediante scripts
No se adjunta ninguna secuencia de comandos a estos botones. Solo línea de acción:

Entrada automática en SecureCRT mediante scripts
Configuración: para que al cambiar a una sesión, se abra el panel necesario con botones en la configuración de la sesión:

Entrada automática en SecureCRT mediante scripts
Tiene sentido que el cliente configure scripts individuales para Iniciar sesión e ir al panel con comandos frecuentes para el proveedor.

Entrada automática en SecureCRT mediante scripts
Cuando presiona el botón Go Cisco, el panel cambia a la barra de botones de Cisco.

Entrada automática en SecureCRT mediante scripts

Ejemplos de uso de scripts simples y avanzados. (Práctica de la vida real.)

Los guiones simples son suficientes para casi todas las ocasiones. Pero una vez tuve que complicar un poco el guión, para acelerar el trabajo. Esta complicación simplemente solicitaba datos adicionales en un cuadro de diálogo del usuario.

Solicitud de datos del usuario mediante un cuadro de diálogo

En el script de solicitud de datos tenía 2. Este es el nombre de host y el 4.º octeto de la dirección IP. Para realizar esta acción, busqué en Google cómo hacerlo y lo encontré en el sitio web oficial de SecureCRT (vandyke). - la funcionalidad se llama aviso.

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

Esta parte del script solicitó el nombre de host y los números del último octeto. Ya que había 15 piezas de equipo. Y los datos se presentaron en una tabla, luego copié los valores de la tabla y los pegué en los cuadros de diálogo. Además, el guión funcionó de forma independiente.

Copia FTP a equipos de red.

Este script abrió mi ventana de comandos (shell) y copió datos a través de FTP. Al finalizar, cierra la sesión. Es imposible usar el bloc de notas para esto, porque la copia lleva mucho tiempo y los datos en el búfer FTP no se almacenarán durante tanto tiempo:

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

Ingresar nombre de usuario/contraseña usando un script

A un cliente se le cerró directamente el acceso al equipo de red. Era posible ingresar al equipo conectándose primero al Default Gateway, y de éste luego al equipo conectado a él. Se utilizó el cliente ssh integrado en el software IOS/hardware para conectarse. En consecuencia, se solicitó el nombre de usuario y la contraseña en la consola. Con el siguiente script, el nombre de usuario y la contraseña se ingresaron automáticamente:

# $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: Había 2 scripts, uno para la cuenta de administrador, el segundo para la cuenta de eSIGHT.

Script con la capacidad de agregar datos directamente durante la ejecución del script.

La tarea era agregar una ruta estática en todos los equipos de la red. Pero la puerta de enlace a Internet en cada equipo era diferente (y difería de la puerta de enlace predeterminada). El siguiente script mostró la tabla de enrutamiento, ingresó al modo de configuración, no escribió el comando hasta el final (la dirección IP de la puerta de enlace a Internet): agregué esta parte. Después de presionar Enter, el script continuó ejecutando el comando.

# $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 este script, en la línea: crt.Screen.Send("ip route 10.10.10.8 255.255.255.252") no se agrega la dirección IP de la puerta de enlace y no hay carácter de retorno de carro. El script está esperando la siguiente línea con los caracteres "(config) #". Estos caracteres aparecieron después de que ingresé la dirección IP e ingresé.

CONCLUSIÓN:

Al escribir un script y ejecutarlo, se debe seguir la regla: El tiempo para escribir un script y ejecutar un script nunca debe ser mayor que el tiempo teóricamente dedicado a hacer el mismo trabajo manualmente (copiar / pegar desde un bloc de notas, escribir y depurar). un libro de jugadas para ansible, escribir y depurar secuencias de comandos de python). Es decir, el uso de la secuencia de comandos debería ahorrar tiempo y no perder tiempo en la automatización de procesos de una sola vez (es decir, cuando la secuencia de comandos es única y no habrá más repeticiones). Pero si la secuencia de comandos es única y la automatización con la secuencia de comandos y la escritura/depuración de la secuencia de comandos lleva menos tiempo que hacerlo de cualquier otra forma (ansible, ventana de comandos), entonces la secuencia de comandos es la mejor solución.
Depuración de un script. La secuencia de comandos crece gradualmente, la depuración se lleva a cabo durante la ejecución en el primer, segundo y tercer dispositivo y, para el cuarto, es muy probable que la secuencia de comandos esté completamente operativa.

Ejecutar un script (introduciendo nombre de usuario y contraseña) con el ratón suele ser más rápido que copiar el nombre de usuario y la contraseña de un bloc de notas. Pero no seguro desde el punto de vista de la seguridad.
Otro ejemplo (real) al usar un script: no tiene acceso directo al equipo de red. Pero es necesario configurar todo el equipo de la red (llévelo al sistema de monitoreo, configure un nombre de usuario/contraseña/snmpv3nombre de usuario/contraseña adicionales). Hay acceso cuando vas al conmutador Core, desde allí abres SSH a otros equipos. ¿Por qué no puedes usar Ansible? - Porque nos encontramos con un límite en la cantidad de sesiones simultáneas permitidas en equipos de red (línea vty 0 4, interfaz de usuario vty 0 4) (otra pregunta es cómo iniciar diferentes equipos en Ansible con el mismo primer salto SSH).

El script reduce el tiempo durante operaciones largas, por ejemplo, copiar archivos a través de FTP. Una vez completada la copia, el script comienza a funcionar inmediatamente. Una persona deberá ver el final de la copia, luego darse cuenta del final de la copia y luego ingresar los comandos apropiados. El guión lo hace objetivamente más rápido.

Los scripts son aplicables donde es imposible utilizar herramientas de entrega masiva de datos: Consola. O cuando algunos de los datos del equipo son únicos: nombre de host, dirección IP de administración. O cuando escribir un programa y depurarlo es más difícil que agregar datos recibidos del equipo mientras se ejecuta el script. - Un ejemplo con un script para prescribir una ruta, cuando cada equipo tiene su propia dirección IP del proveedor de Internet. (Mis colegas escribieron dichos scripts, cuando el DMVPN hablaba era más de 3. Era necesario cambiar la configuración del DMVPN).

Estudio de caso: Configuración de los ajustes iniciales en un conmutador nuevo mediante los puertos de la consola:

A. Conectó el cable de la consola al dispositivo.
B. Ejecutar el script
B. Esperó la ejecución del script
D. Conectó el cable de la consola al siguiente dispositivo.
E. Si el interruptor no es el último, vaya al paso B.

Como resultado del trabajo del script:

  • la contraseña inicial se establece en el equipo.
  • Nombre de usuario ingresado
  • se ingresa la dirección IP única del dispositivo.

PD: hubo que repetir la operación. Porque el ssh predeterminado no estaba configurado/deshabilitado. (Sí, este es mi error.)

Fuentes utilizadas.

1. Acerca de la creación de guiones
2. Ejemplos de guiones

Apéndice 1: guiones de muestra.


Un ejemplo de un script largo, con dos consultas: nombre de host y dirección IP. Fue creado para el preajuste de equipos a través de la consola (9600 baudios). Y también para preparar la conexión de equipos a la red.

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

Por lo general, no se necesitan dichos scripts, pero la cantidad de equipo es de 15 piezas. Permitió una configuración más rápida. Fue más rápido configurar el equipo usando la ventana de comando SecureCRT.

Configuración de una cuenta para ssh.

Otro ejemplo. La configuración también se realiza 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()


Acerca de SecureCRT:Software pago: desde $99 (el precio más bajo es solo para SecureCRT por un año)
Sitio web oficial
Una licencia de software se compra una vez, con soporte (para actualización), luego el software se usa con esta licencia por un tiempo ilimitado.

Funciona en los sistemas operativos Mac OS X y Windows.

Hay soporte para scripts (este artículo)
Hay Ventana de comandos
Serie/Telnet/SSH1/SSH2/Sistema operativo Shell

Fuente: habr.com