Introducción Teórica: SecureCRT + Python para Ingenieros de Redes.
Introducción
SecureCRT es una solución que ofrece mucha ayuda a los Ingeniero de Redes en cuanto a eficiencia se refiere a la hora administrar y operar una red. El conjunto de herramientas que trae nos permiten agilizar y automatizar tareas tediosas y repetitivas. Como habrán visto en el articulo SecureCRT para Ingenieros de Redes, son muchos los beneficios que podemos obtener. Son aún muchos más los beneficios que nos trae combinar SecureCRT con Python.
Para los que aún operamos las redes a través del CLI, SecureCRT nos brinda una oportunidad excelente para introducirnos con la Programabilidad y Automatización de Redes.
Las tareas de configuración o verificación rutinarias se pueden automatizar utilizando potentes capacidades de «Scripting» que incluyen compatibilidad con scripting de ActiveX para VBScript, JScript y PerlScript en Windows y compatibilidad con Python en todas las plataformas(Windows y Linux).
En este articulo veremos lo que necesitas aprender para iniciar a escribir tus propios Scripts en Python y poder automatizar tareas. Es importante que tengan instalado SecureCRT para que puedan sacarle el mejor provecho. En la página oficial podrán descargar una evaluación de 30 días.
Python Scripting en SecureCRT
SecureCRT contiene un intérprete de Python incorporado, lo que significa que los scripts de Python se pueden ejecutar desde SecureCRT sin tener que instalar software adicional.
Los scripts para SecureCRT son archivos de texto que se crean con cualquier editor de texto.
No se requiere un encabezado. No es necesario para los scripts de Python siempre que se use la extensión de archivo “.py”. Si se desea usar un encabezado (por ejemplo, si está usando un archivo sin una extensión o con una extensión que no es común), el encabezado debe comenzar en la primera línea del script.
SecureCRT utilizará los encabezados de script para identificar en qué lenguaje el script está escrito y la versión de la interfaz de script de SecureCRT. Cada línea del encabezado del script debe comenzar con hash (#)
. Un encabezado de un script en SecureCRT incluye una línea $language
que identifica el lenguaje del script y una línea $interface
para identificar la versión de interfaz de SecureCRT.
La sintaxis del encabezado del script siempre es la misma, independientemente del lenguaje del script que esté utilizando.
A continuación veamos un script de SecureCRT simple pero completo con un encabezado que lo identifica como Python:
# $language = "Python" # $interface = "1.0" import platform def main(): # Imprime version de SecureCRT y Version de Python crt.Dialog.MessageBox("La Version de SecureCRT version es: {0} y \ la Version de Python es: {1}".format(crt.Version, \ platform.python_version())) main()
Este código al correrlo imprime el siguiente mensaje:
Uso de la función Main
No es un requisito que coloque su código dentro de la función Main()
, sin embargo, puede haber razones por las que desee hacer esto. El intérprete de Python analizará y ejecutará el código de script global (código de script que ha definido fuera de cualquier función) antes de que se ejecute su Main()
. Si tiene un código de “inicialización” que desea asegurarse de que se haya ejecutado completamente antes de que comience su código de script real, puede ser útil ubicar su código de inicialización a nivel global. Esto asegurará que su código de inicialización se ejecutará antes de que se ejecute su código principal.
Otra razón por la que puede querer una función Main()
es permitir a sus scripts una forma de abortarse en caso de problemas. En Python para SecureCRT, no hay una forma integrada de salir de un script a nivel global. Sin embargo, si desea salir de una función, puede usar el keywordReturn
para hacerlo.
Objetos de Python para SecureCRT
Los scripts interactúan con SecureCRT a través de objetos, métodos y variables que se encuentran en el módulo de SecureCRT llamado “crt”. También se puede crear una instancia de estos objetos y acceder a sus métodos y variables. Ejemplo:
#Creando un sub-objeto a partir de "crt.Dialog" dialogo = crt.Dialog dialogo.Prompt("Inicia Sesion:") #Llamando el metodo prompt directamente desde el objeto "crt" crt.Dialog.Prompt("Login:")
Básicamente estas dos formas de utilizar el método Prompt arrojan el mismo resultado.
El modulo “crt” contiene los siguientes objetos que pueden ser utilizados para crear Scripts en Python:
- Arguments Object. El objeto Argumentos permite que los scripts accedan a los argumentos que se pasan al script por una o más opciones de línea de comandos de SecureCRT / ARG.
- Clipboard Object. El objetoClipboard proporciona acceso al portapapeles de la aplicación.
- CommandWindow Object. Proporciona acceso a la ventana de comandos.
- Dialog Object. El objeto Dialog proporciona acceso a funciones simples de interfaz de usuario proporcionadas por SecureCRT.
- File Transfer Object. El objeto FileTransfer proporciona métodos para realizar transferencias de archivos iniciadas por scripts.
- Screen Object. El objeto Screen proporciona acceso a la pantalla de terminal de SecureCRT.
- Session Object. El objeto Session proporciona acceso al estado y las propiedades que existen para la conexión o sesión actual.
- SessionConfigurationObject. El objeto SessionConfiguration proporciona métodos para acceder a la configuración de la sesión mediante secuencias de comandos.
- Tab Object. El objeto Tab proporciona acceso a las funciones de tabulación que existen para la conexión o sesión actual. El objeto Tab también se puede usar para trabajar con ventanas de sesión en mosaico.
- Window Object. El objeto Window proporciona acceso a propiedades y métodos relacionados con la ventana de SecureCRT, como el estado visible de la ventana, el título, etc.
Más adelante hablaremos un poco mas de los objetos más utilizados para las tareas que normalmente realizamos.
¿Cómo correr un script de Python en SecureCRT?
En la sección anterior vimos un script simple y funcional de Python para SecureCRT. Sin embargo, de lo que no hablamos fue de como correr este script. SecureCRT proporciona un menú para correr, detener o cancelar un script.
Menú Script
Opción: Run
Abre un cuadro de diálogo, donde puede elegir e iniciar un script.
Cuando estuvimos introduciendo los Scripts de Python en una sección anterior, mostramos un código básico en Python y el resultado que se tendría en SecureCRT al correr dicho código. En estos momentos puede tomar ese código, guardarlo en un archivo e intentar correrlo utilizando la opción Run.
Opción: Cancel
Cancela el script actualmente en ejecución.
Opción: Start Recording Script
Cuando se selecciona esta opción, todas las pulsaciones de teclas y respuestas en la sesión actual se grabarán hasta que se seleccione la opción Stop Recording Script o Cancel Recording Script. Si se graba un guión y se desconecta una sesión, se le pedirá que guarde el guión.
Opción: Stop Recording Script
Detiene la grabación en progreso y le solicita que guarde el script grabado como un archivo de script de Visual Basic (.vbs) o Python (.py). Si se graba un guión y se desconecta una sesión, también se le pedirá que guarde el guión.
Opción: Cancel Recording Script
Detiene la grabación en progreso y no se guarda nada.
Scripts de Ejemplos para SecureCRT
Al instalar SecureCRT este también incluye una carpeta con scripts de ejemplos en Visual Basic y Python. Estos scripts pueden utilizarse muy bien para ver como funcionan los objetos. Muchos los aprovechamos para obtener ideas y buscarles casos de uso en nuestras tareas como Ingenieros de Redes.
Veamos algunos ejemplos de estos Scripts y pensemos en casos de usos.
Script: AddCommentToLogFile.py
Este script de ejemplo le permite agregar una línea de texto o comentario personalizado al archivo que habilitó para hacer Logging de sesión(guardar registros). Se le solicitará al usuario que agregue el texto al archivo de Log; el registro se detendrá; el texto proporcionado por el usuario se agregará al archivo de Log; entonces se volverá activar el archivo de Log a la sesión en la que corrió el script en SecureCRT.
Lo que hace el script es simple, pero lo interesante es todo lo que podemos aprender de esta demostración:
- Solicitar la entrada de datos al usuario utilizando la función SecureCRT
InputBox ()
. - Acceder a
Session.LogFileName
para determinar el nombre del archivo de Log almacenado para la sesión actual. - Usar la propiedad
Session.Logging
para determinar si el Log está actualmente activo. - Utilizar el método Python
replace ()
para sustituir Substrings dentro de un String existente. - Usar el objeto
"File"
de Python para abrir un archivo de texto existente y agregar datos.
Casos de uso que podemos darle a lo aprendido desde el punto de vista de un Ingeniero de Redes:
- Con este Script podemos aprender a crear un asistente que nos pida usuario y contraseña antes de acceder a los equipos a realizar configuraciones o recolectar información.
- Podemos activar el Logging de una sesión y guardar salidas de comandos específicas en un router. NOTA: Capturar las salidas de los comandos requiere de una función que no está en este script y que veremos más adelante.
- Es posible capturar la salida de los comandos enviados a un router, cambiar ciertos textos, ajustarlos o agregarles comentarios antes de guardarlo en un archivo de texto. NOTA: Capturar las salidas de los comandos requiere de una función que no está en este script y que veremos más adelante.
Script: AutoResponder.py
Muestra cómo configurar una lista de comandos / texto que se envían al al equipo que estamos conectado tan pronto como se detecta un texto “activador” enviado por el equipo. Una vez iniciado, este script se ejecutará indefinidamente hasta que se desconecte la sesión o se cierre la aplicación. Para detener el script, elija “Cancelar” en el menú principal “Script” de SecureCRT.
Lo que hace el script es simple, pero lo interesante es todo lo que podemos aprender de esta demostración:
- Cómo usar la propiedad
Session.Connected
para determinar si la pestaña actual tiene una conexión activa. - Cómo esperar a que aparezca uno de los múltiples valores de cadena y detectar cuál se encontró usando el método
Screen.WaitForStrings
.
Casos de uso que podemos darle a lo aprendido desde el punto de vista de un Ingeniero de Redes:
- Podemos enviar comandos a un router, esperar la salida y en base al resultado tomar múltiples decisiones. El script puede ejecutar una configuración si ciertas condiciones se dieron.
Script: BasicReadStringExample.py
Este script de ejemplo captura la salida de un comando (ls -l) enviado a una máquina remota utilizando el método Screen.ReadString ().
El texto capturado se muestra en una ventana de cuadro de mensaje.
Lo que hace el script es simple, pero lo interesante es todo lo que podemos aprender de esta demostración:
- Cómo usar la funcionalidad básica del método
Screen.ReadString ()
para capturar fácilmente datos de un sistema remoto. - Cómo usar la propiedad
Screen.IgnoreEscape
para cambiar la forma en queReadString
(también se aplica aWaitForString ()
yWaitForStrings ()
) maneja caracteres no imprimibles.
Casos de uso que podemos darle a lo aprendido desde el punto de vista de un Ingeniero de Redes:
- Con este script podemos enviar un “show configuration” a un router, capturar la salida y realizar un backup guardando el resultado en un archivo de texto.
Script: LogOutputOfSpecificCommand-UseReadString.py
Envía comandos uno por uno como se enumeran en la matriz COMANDOS al equipo remoto. Los resultados de cada comando se capturan en una variable y luego se escriben en un archivo de registro(Log) individual (un archivo de registro para cada comando). Una vez que se han ejecutado todos los comandos, se inicia un navegador de archivos, con el primer archivo de salida de comandos seleccionado dentro de la ventana del navegador de archivos.
Este script de ejemplo muestra cómo registrar la salida de comandos específicos en archivos separados (un archivo para cada comando) sin tener que activar manualmente el inicio de sesión antes y después de ejecutar cada comando.
Lo que hace el script es simple, pero lo interesante es todo lo que podemos aprender de esta demostración:
- Uso de una matriz de comandos que se enviarán al sistema remoto (COMANDOS)
- Usando
SCRIPT_TAB.Screen.Send ()
para emitir cada comando. - Usando el método
SCRIPT_TAB.Screen.ReadString ()
para no solo esperar una indicación de que el comando enviado se ha completado, sino también capturar todo el texto recibido mientras el comando se estaba ejecutando.
Casos de uso que podemos darle a lo aprendido desde el punto de vista de un Ingeniero de Redes:
- Este un buen script para poder generar otro que nos permita realizar un levantamiento de servicios en múltiple equipos, guardando los comandos en una arreglo, enviar los comandos a pantalla e ir capturando su salida. Utilizando funciones de otros scripts podemos guardar estas salidas en un archivo de texto.
Script: CopyOutputToClipboard.py
Este ejemplo de script está diseñado para ejecutarse mientras está conectado a un firewall Cisco Pix u otro dispositivo enrutador.
Cuando se inicia, los siguientes comandos se envían al dispositivo:enable
configure terminal pager 0 show config show serial show sysopt exit exit
Los resultados de los comandos ‘show config'
, 'show serial' y 'show sysopt
‘ se capturan y almacenan en el portapapeles del sistema. Luego, un cuadro de mensaje muestra el contenido del portapapeles del sistema.
Lo que hace el script es simple, pero lo interesante es todo lo que podemos aprender de esta demostración:
- Uso de
crt.Screen.ReadString
para capturar la salida de un comando como se repite en el sistema remoto. - Cómo copiar datos de una variable de script en el portapapeles del sistema utilizando el objeto crt.Clipboard
- Uso del método
ReadString
para buscar un indicador de shell (para que se pueda determinar cuándo se ha completado un comando remoto) o alguna otra línea completa de datos. - Cómo usar el método Python
str.replace
para sustituir texto dentro de una cadena existente.
Casos de uso que podemos darle a lo aprendido desde el punto de vista de un Ingeniero de Redes:
- Este script de por sí ya es un caso de uso para Ingenieros de Redes, en el que simplemente se pueden cambiar los comandos por otros y obtener el resultado que deseamos.
Script: SendCommandToAllTabs.py
Este script de ejemplo muestra cómo enviar el mismo comando a todas las pestañas que actualmente tienen una conexión activa.
Lo que hace el script es simple, pero lo interesante es todo lo que podemos aprender de esta demostración:
- Enviar un comando a todas las pestañas utilizando la capacidad de scripting de pestañas de SecureCRT
- Solicitar al usuario la entrada de datos utilizando el método
crt.Dialog.Prompt ().
- Acceder al número total de pestañas en la ventana SecureCRT mediante la propiedad
crt.GetTabCount
- Activar una pestaña en la interfaz de usuario desde un script.
- Cómo usar la propiedad
Session.Connected
para determinar si una pestaña tiene actualmente una conexión activa o no. - Enviar datos a una pestaña usando la pantalla. Método de envío en SecureCRT.
Casos de uso que podemos darle a lo aprendido desde el punto de vista de un Ingeniero de Redes:
- Con este equipo podemos aprender a realizar configuraciones o levantar informaciones de routers de manera simultanea en múltiples sesiones de SecureCRT.
Conclusión
En esta publicación pudimos conocer una gran parte de las funcionalidades y oportunidades que tenemos de implementar Python Scripting vía SecureCRT. Con esto podemos mejorar nuestras habilidades y ser mas eficiente al trabajar con equipos de redes que se administrar a través del CLI.
Esperen pronto Tutoriales y Cursos prácticos donde aprenderán a implementar lo aprendido hoy en sus ambientes de trabajo.
A continuación les comparto este link donde podrán encontrar otros Scripts de Python en SecureCRT:
https://www.vandyke.com/support/securecrt/python_examples.html
Comenten debajo cualquier pregunta, duda o sugerencia que tengan.