Automatización da entrada en SecureCRT mediante scripts
Os enxeñeiros de rede adoitan enfrontarse á tarefa de copiar/pegar determinados fragmentos dun bloc de notas á consola. Normalmente tes que copiar varios parámetros: nome de usuario/contrasinal e outra cousa. O uso de scripts permítelle acelerar este proceso. PERO as tarefas de escribir o guión e executar o guión deberían levar menos tempo en total que a configuración manual, se non, os guións son inútiles.
Para que serve este artigo? Este artigo é da serie Fast Start e ten como obxectivo aforrar tempo aos enxeñeiros de rede ao configurar equipos (unha tarefa) en varios dispositivos. Usa o software SecureCRT e a funcionalidade de execución de scripts integrada. Contido
O programa SecureCRT ten un mecanismo de execución de scripts incorporado. Para que serven os scripts de terminal?
E/S automatizada e validación mínima de E/S.
Acelera a execución de tarefas rutineiras, reducindo as pausas entre as configuracións do equipo. (Redución de feito das pausas causadas polo tempo para realizar accións copiar/pasar no mesmo hardware, con 3 ou máis fragmentos de comandos para aplicar ao hardware).
Este documento recolle as tarefas:
Creación de guións sinxelos.
Execución de scripts en SecureCRT.
Exemplos de uso de scripts sinxelos e avanzados. (Práctica desde a vida real).
Creación de guións sinxelos.
Os scripts máis sinxelos usan só dous comandos, Send e WaitForString. Esta funcionalidade é suficiente para o 90% (ou máis) das tarefas realizadas.
Os scripts poden funcionar en Python, JS, VBS (Visual Basic), Perl, etc.
# $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
Normalmente un ficheiro coa extensión "*.vbs"
Crea un script usando unha entrada de script.
Permite automatizar o proceso de escritura dun script. Comezas a escribir un guión. SecureCRT rexistra os comandos e a resposta do hardware posterior e mostra o script rematado por ti.
A. Comeza a escribir o guión:
Menú SecureCRT => Script => Iniciar script de gravación
b. Realice accións coa consola (realice os pasos de configuración na CLI).
V. Remate de escribir o guión:
Menú SecureCRT => Script => Deter o script de gravación...
Garda o ficheiro de script.
Exemplo de comandos executados e script gardado:
Execución de scripts en SecureCRT.
Despois de crear/editar o guión, xorde unha pregunta lóxica: Como aplicar o guión?
Hai varias maneiras:
Execución manual desde o menú Script
Inicio automático despois da conexión (script de inicio de sesión)
Inicio de sesión automático sen utilizar un script
Activación manual cun botón en SecureCRT (aínda non se creou e engadiu un botón a SecureCRT)
Execución manual desde o menú Script
Menú SecureCRT => Script => Executar...
- Lémbranse os últimos 10 scripts e están dispoñibles para un inicio rápido:
Menú SecureCRT => Script => 1 "Nome do ficheiro de script"
Menú SecureCRT => Script => 2 "Nome do ficheiro de script"
Menú SecureCRT => Script => 3 "Nome do ficheiro de script"
Menú SecureCRT => Script => 4 "Nome do ficheiro de script"
Menú SecureCRT => Script => 5 "Nome do ficheiro de script"
Inicio automático despois da conexión (script de inicio de sesión)
A configuración do script de rexistro automático está configurada para a sesión gardada: Conexión => Accións de inicio de sesión => Script de inicio de sesión
Inicio de sesión automático sen utilizar un script
É posible introducir automaticamente o nome de usuario do contrasinal sen escribir un script, utilizando só a funcionalidade integrada de SecureCRT. Na configuración de conexión "Conexión" => Accións de inicio de sesión => Inicio de sesión automatizado - cómpre encher varios paquetes - o que significa os pares: "Texto esperado" + "Caracteres enviados a este texto" pode haber moitos destes pares. (Exemplo: primeiro par esperando o nome de usuario, segundo esperando contrasinal, terceiro esperando polo modo privilexiado, cuarto par para o contrasinal do modo privilexiado).
Exemplo de inicio de sesión automático en Cisco ASA:
Activación manual cun botón en SecureCRT (aínda non se creou e engadiu un botón a SecureCRT)
En SecureCRT, pode asignar un script a un botón. O botón engádese a un panel especialmente creado para este fin.
A. Engadindo un panel á interface: Menú SecureCRT => Ver => Barra de botóns
b. Engade un botón ao panel e engade un script. - Fai clic co botón dereito na barra de botóns e selecciona "Novo botón..." no menú contextual.
V. No cadro de diálogo "Botón de mapa", no campo "Acción", seleccione a acción (función) "Executar script".
Especifique un título para o botón. A cor da icona do botón. Finaliza a configuración facendo clic en Aceptar.
Nota:
O panel con botóns é unha funcionalidade moi útil.
1. É posible, ao iniciar sesión nunha sesión específica, especificar que panel abrir nesta pestana por defecto.
2. É posible establecer accións predefinidas para accións estándar con equipos: mostrar a versión, mostrar a configuración en execución, gardar a configuración.
Non hai ningún script anexado a estes botóns. Só liña de acción:
Configuración - para que ao cambiar a unha sesión, ábrase o panel necesario con botóns na configuración da sesión:
Ten sentido que o cliente configure scripts individuais para o inicio de sesión e vaia ao panel con comandos frecuentes para o vendedor.
Cando preme o botón Go Cisco, o panel cambia á barra de botóns de Cisco.
Exemplos de uso de scripts sinxelos e avanzados. (Práctica desde a vida real).
Os guións sinxelos son suficientes para case todas as ocasións. Pero unha vez necesitaba complicar un pouco o guión, acelerar o traballo. Esta complicación só solicitou datos adicionais nun cadro de diálogo do usuario.
Solicitando datos ao usuario mediante un cadro de diálogo
Tiven 2 no script de solicitude de datos. Este é o nome de host e o cuarto octeto do enderezo IP. Para realizar esta acción, busquei en Google como facelo e atopeino no sitio web oficial de SecureCRT (vandyke). - a funcionalidade chámase prompt.
Esta parte do script pediu o nome de host e os números do último octeto. Xa que había 15 equipos. E os datos presentáronse nunha táboa, despois copiei os valores da táboa e pegueinos nas caixas de diálogo. Ademais, o guión funcionou de forma independente.
Copia FTP a equipos de rede.
Este script lanzou a miña xanela de comandos (shell) e copiou datos vía FTP. Ao final, pecha a sesión. É imposible usar o bloc de notas para iso, porque a copia leva moito tempo e os datos do búfer FTP non se almacenarán durante tanto tempo:
# $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()
Introducir nome de usuario/contrasinal mediante un script
Nun cliente, o acceso directo ao equipo de rede foi pechado. Era posible entrar no equipo conectándose primeiro á Pasarela predeterminada, e desde ela ao equipo conectado a ela. Utilizouse o cliente ssh integrado no software IOS/hardware para conectarse. En consecuencia, o nome de usuario e o contrasinal foron solicitados na consola. Co seguinte script, introducíronse automaticamente o nome de usuario e o contrasinal:
# $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. Un para a conta de administrador, o segundo para a conta eSIGHT.
Script coa capacidade de engadir datos directamente durante a execución do script.
A tarefa consistía en engadir unha ruta estática en todos os equipos de rede. Pero a pasarela a Internet en cada equipo era diferente (e difería da pasarela predeterminada). O seguinte script mostrou a táboa de enrutamento, entrou no modo de configuración, non escribiu o comando ata o final (o enderezo IP da pasarela a Internet) - Engadín esta parte. Despois de premer Intro, o script continuou executando o 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()
Neste script, na liña: crt.Screen.Send("ip route 10.10.10.8 255.255.255.252") non se engade o enderezo IP da pasarela e non hai carácter de retorno de carro. O script está esperando a seguinte liña cos caracteres "(config) #" Estes caracteres apareceron despois de que introducín o enderezo IP e introducín.
Conclusión:
Ao escribir un guión e executalo, débese seguir a regra: O tempo para escribir un guión e executalo nunca debe ser superior ó tempo teoricamente dedicado a facer o mesmo traballo manualmente (copiar/pegar desde un bloc de notas, escribir e depurar un manual para ansible, escribir e depurar scripts en Python). É dicir, o uso do script debería aforrar tempo e non perder tempo na automatización puntual dos procesos (é dicir, cando o script é único e non haberá máis repetición). Pero se o script é único e a automatización co script e a escritura/depuración do script leva menos tempo que facelo doutro xeito (ansible, xanela de comandos), entón o script é a mellor solución.
Depurando un script. O script crece gradualmente, a depuración realízase no primeiro, segundo e terceiro dispositivo e, no cuarto, probablemente o script estea totalmente operativo.
Executar un script (introducindo nome de usuario+contrasinal) co rato adoita ser máis rápido que copiar o nome de usuario e o contrasinal dun bloc de notas. Pero non é seguro dende o punto de vista da seguridade.
Outro exemplo (real) cando se usa un script: Non tes acceso directo ao equipo de rede. Pero hai que configurar todos os equipos de rede (traelo ao sistema de vixilancia, configure un nome de usuario/contrasinal/snmpv3nome de usuario/contrasinal adicional). Hai acceso cando vas ao interruptor Core, desde el abres SSH a outros equipos. Por que non podes usar Ansible. - Porque atopámonos cun límite no número de sesións simultáneas permitidas nos equipos de rede (liña vty 0 4, interface de usuario vty 0 4) (outra pregunta é como iniciar diferentes equipos en Ansible co mesmo primeiro salto SSH).
O script reduce o tempo durante operacións longas, por exemplo, copiando ficheiros a través de FTP. Despois de completar a copia, o script comeza a funcionar inmediatamente. Unha persoa terá que ver o final da copia, despois darse conta do final da copia e introducir os comandos adecuados. O guión faino obxectivamente máis rápido.
Os scripts son aplicables onde é imposible utilizar ferramentas de entrega masiva de datos: Consola. Ou cando algúns dos datos do equipo son únicos: nome de host, enderezo IP de xestión. Ou cando se escribe un programa e se depura é máis difícil que engadir datos recibidos do equipo mentres se está a executar o script. - Un exemplo cun script para prescribir unha ruta, cando cada equipo ten o seu propio enderezo IP do provedor de Internet. (Os meus colegas escribiron tales guións - cando o DMVPN falaba era máis de 3. Era necesario cambiar a configuración DMVPN).
Caso práctico: Configurar as opcións iniciais nun novo interruptor usando os portos da consola:
R. Conectou o cable da consola ao dispositivo.
B. Executar o script
B. Agardou a execución do guión
D. Conectou o cable da consola ao seguinte dispositivo.
E. Se o interruptor non é o último, vai ao paso B.
Como resultado do traballo do guión:
o contrasinal inicial está definido no equipo.
Nome de usuario introducido
insírese o enderezo IP exclusivo do dispositivo.
PD: houbo que repetir a operación. Porque o ssh predeterminado non estaba configurado/desactivado. (Si, este é o meu erro.)
Un exemplo de script longo, con dúas consultas: nome de host e enderezo IP. Foi creado para predefinir equipos a través da consola (9600 baudios). E tamén para preparar a conexión dos equipos á rede.
Estes scripts normalmente non son necesarios, pero a cantidade de equipos é de 15 unidades. Permitiuse unha configuración máis rápida. Foi máis rápido configurar o equipo mediante a xanela Comando SecureCRT.
Configurando unha conta para ssh.
Outro exemplo. A configuración tamén se realiza a través da 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 de pago: desde $ 99 (o prezo máis baixo só é para SecureCRT durante un ano) Sitio web oficial
Unha licenza de software adquírese unha vez, con soporte (para actualización), entón o software úsase con esta licenza durante un tempo ilimitado.
Funciona en sistemas operativos Mac OS X e Windows.
Hai soporte de script (este artigo)
Ten Ventá de comandos
Sistema operativo Serial/Telnet/SSH1/SSH2/Shell