Comandos VTY remoto
Ejecución de uno o más comandos de la CLI interactiva es una tarea común en la gestión de la red . Tener un script para automatizar esta tarea se convierte en una herramienta fundamental.
Este script automatiza sesiones telnet o SSH interactivas. Cualquier comando que se puede emitir en la CLI se puede emitir a través de la secuencia de comandos comando de marcha VTY de forma automatizada. A continuación se muestran algunos usos de ejemplo:
- Ejecutar un conjunto de comandos en cientos de dispositivos
- Los cambios de configuración
- Archivo de configuraciones y software
- Auditorías, inventario y descubrimiento
- Automatizado de solución de problemas
Requerimientos
Este guión está escrito en esperar. Se requiere una versión actual de esperar. Esperar y requisitos de instalación de esperar se puede encontrar en Espera Homepage
Probado en RHEL 5 corriendo esperar 5.43.0-5.1 y Mac OS X 10.6 correr esperar 5.44.1.11.
La escritura es una plataforma independiente y debería funcionar en cualquier plataforma que pueda ejecutar esperar.
VTY Ejecutar Comandos
El script soporta opciones de línea de comandos para la configuración. A continuación se muestra una lista de las opciones de línea de comandos disponibles:
Nota : | Ejecute la secuencia de comandos con vty_runcmd.exp <opciones> |
Opciones Necesarias
Opción | Valor de la opción | Descripción |
---|---|---|
-H | Nombre de host o dirección IP | Introduzca el nombre o la dirección IP del dispositivo para ejecutar el comando remoto en |
-U | Nombre de usuario | Introduzca el nombre de usuario de inicio de sesión o usuario del sistema, normalmente se requiere para Unix o conexiones AAA. Utilice ninguno si requiere login / nombre de usuario |
-P | contraseña | Introduzca la contraseña para el usuario / nombre de usuario del sistema abetos. Esta es la primera contraseña, el modo no de habilitación |
Opciones opcionales
Opción | Valor de la opción | Descripción |
---|---|---|
-E | contraseña | Introduzca la contraseña de activación o secreta. Esto es para entrar en el modo de activación. |
-T | segundo | Introduzca el tiempo de espera para esperar que espera en segundos |
-M | ssh o telnet | Introduzca ssh o telnet para el método de conexión. TELNET es el valor predeterminado. Para SSH, la secuencia de comandos entrará automáticamente en sí para entradas de host autorizado. |
-F | nombre de archivo | Introduzca el nombre del archivo que se utiliza como archivo de comandos. Por defecto se usa STDIN |
La automatización de secuencia de comandos para ejecutar en varios hosts
Consulte Comandos VTY remoto automatizado para obtener más detalles sobre la manera de ejecutar el script desde cron y cómo ejecutarla de forma circular para múltiples hosts.
Pasos para instalar la secuencia de comandos
- Corte y pegue el siguiente script en un archivo de texto llamado vty_runcmd.exp
- Editar la primera línea de la secuencia de comandos y actualice el " # / usr / bin / esperar - "comando para que señale al instaladaesperar binario
- (Unix, Linux, Mac OS únicamente) cambia el modo para que el script se ejecutará utilizando " chmod 755 vty_runcmd.exp "
- Ejecute la secuencia de comandos con " . / vty_runcmd.exp <opciones> "
Fuente de scripts
! # / Usr / bin / esperar - # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Vty_runcmd.exp # # Este es un script de esperar que se conectará a un dispositivo mediante ssh o # Telnet, a continuación, ejecute el comando especificado. La salida será ya sea # Escrito a un archivo de salida o impresos en stdout. # # Creado por Tim Evens (tim@evensweb.com), 5/2009 # Rectificado por Sergio Zavala (sergio.zavala en sidetec.com.mx), 12/2010 # # Copyright Tim Evens, 2009 # # HISTORIA: # Tim Evens 21/05/09 programa inicial creado # Sergio Zavala 12/26/10 código de retorno Conexión corregida # Tim Evens 1/05/10 conexión validado # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + + + + + + + + + + + + + + + + + + + + + + + Vars # globales # + + + + + + + + + + + + + + + + + + + + + + + + + + establecer el tiempo de 30 # A continuación partidos instrucciones tales como "Router #", "Router>", "enrutador $" conjunto de avisos "\> \ * $ | # \ * $ | \ \ $ \ * $" # ----------------------------------------------- # Connect (método, sistema, serie, usuario, contraseña) # Esta función se conecta a un host mediante telnet o ssh. # # DEVOLUCIONES: # Cero en caso de éxito # 1 = método de host o tiempo de espera o no válido # 2 = login válido # 3 = tiempo de espera de espera de inicio de sesión # 4 = Error de conexión al host durante esperar esperar # 9 = error desconocido # ----------------------------------------------- proc Connect {método anfitrión usr pw} { establecer rval 0 establecer usr_chk 0 establecer pw_chk 0 establecer max_checks 4 spawn_id mundial timeout mundial sistema mundial puts "Conexión mediante $ method a $ host como usuario $ usr" # Ver si estamos usando ssh si {[string comparar $ method "ssh"] == 0} { configurar host "$ usr @ $ host" } # Ejecutar comandos y conectarse ID SET [spawn $ method $ host] si {$ id <= 0} { pone "ERROR: No se pudo conectar al servidor \ n" establecer rval 1 } Else { pone "Uso de Id. de proceso: $ id" } # Inicie el proceso esperado / enviado para iniciar sesión esperar { # A continuación se encarga de indicar al usuario -Nocase re-"Nombre: | ^ login:" { enviar "$ usr \ r" incr usr_chk; # Continuar con esperar bucle en tanto que no hemos tocado esto muchas veces si {$ usr_chk <$ max_checks} { exp_continue } Else { establecer rval 2 pone "ERROR:. Login reintento fallado nombre de usuario de inicio de sesión no válido" } # A continuación se encarga de la solicitud de contraseña } Nocase-re "palabra:" { enviar "$ pw \ r" incr pw_chk; # Continuar con esperar bucle en tanto que no hemos tocado esto muchas veces si {$ pw_chk <$ max_checks} { exp_continue } Else { establecer rval 2 pone "ERROR:. Login reintento fallado contraseña de inicio de sesión no válido" } # A continuación se encarga de la sin preguntar si / cuando SSH primero se conecta a un host } Nocase-re "\ (sí / no \)" { enviar "sí \ r" exp_continue # A continuación se encarga de la pronta normales para detectar cuando se conectó } Nocase-re "$ mensaje" { pone "\ nSUCCESS: Conectado y listo para enviar comandos \ n" # A continuación es para esperar tiempo de espera de la espera de un } Timeout { pone "ERROR: tiempo de espera de conexión de espera de inicio de sesión del sistema" establecer rval 3 # A continuación se para cuando la conexión se cierra antes de terminar Eof} { pone "ERROR: Conexión al anfitrión ha fallado: $ expect_out (buffer)" establecer rval 4 } } # Devuelve el código de error return $ rval } # Fin de Connect () # ----------------------------------------------- # Uso () # Esta función se imprimirá el uso # ----------------------------------------------- Uso de proc {} { pone "Uso: vty_runcmd.exp <opciones>" pone "\ n" pone "opciones necesarias:" pone "-h <hostname|ip> = nombre de host o IP" pone "-u <nombre = nombre de usuario para iniciar sesión en" pone "-p <contraseña> = contraseña para inicio de sesión" pone "\ n" pone "Otras opciones" pone "-e <Enable contraseña> = Habilitar contraseña" pone "t-<segundos> = tiempo de espera en segundos" pone "-m = <ssh|telnet> uso sea ssh o telnet, telnet por defecto" pone "-f <nombre = archivo de comandos, por defecto es STDIN" pone "\ n" } # Fin de Check_ARGS () # ----------------------------------------------- # Main () # # DEVOLUCIONES: # 0 en caso de éxito # 1 si se aprueba inválida arg # 2 no hay suficientes argumentos (args requeridas no se cumplen) # ----------------------------------------------- establecer rval 0 configurar el nombre de host "" configurar nombre de usuario "" establecer la contraseña "" establecer enable_pw "" establecer cmdfile "" establecer método "telnet" # Loop a través de los argumentos de línea de comandos de {set n 0} {$ n <$ argc} {n} {incr set arg [lindex $ argv $ n] # Compruebe los argumentos si {[string comparar $ arg "-u"] == 0} { si {$ n <$ n +1} { incr n configurar nombre de usuario [lindex $ argv $ n] } Else { establecer rval 1 pone "ERROR: Falta ARG por $ arg \ n" } Elseif} {[string comparar $ arg "-p"] == 0} { si {$ n <$ n +1} { incr n establecer una contraseña [lindex $ argv $ n] } Else { establecer rval 1 pone "ERROR: Falta ARG por $ arg \ n" } Elseif} {[string comparar $ arg "-h"] == 0} { si {$ n <$ n +1} { incr n configurar el nombre de host [lindex $ argv $ n] } Else { establecer rval 1 pone "ERROR: Falta ARG por $ arg \ n" } Elseif} {[string comparar $ arg "-m"] == 0} { si {$ n <$ n +1} { incr n establecer el método [lindex $ argv $ n] } Else { establecer rval 1 pone "ERROR: Falta ARG por $ arg \ n" } Elseif} {[string comparar $ arg "-t"] == 0} { si {$ n <$ n +1} { incr n establecer el tiempo [lindex $ argv $ n] } Else { establecer rval 1 pone "ERROR: Falta ARG por $ arg \ n" } Elseif} {[string comparar $ arg "-f"] == 0} { si {$ n <$ n +1} { incr n establecer cmdfile [lindex $ argv $ n] } Else { establecer rval 1 pone "ERROR: Falta ARG por $ arg \ n" } Elseif} {[string comparar $ arg "-e"] == 0} { si {$ n <$ n +1} { incr n set enable_pw [lindex $ argv $ n] } Else { establecer rval 1 pone "ERROR: Falta ARG por $ arg \ n" } } } # Fin del check arg # Asegurarnos de que encontramos la cantidad de argumentos esperados si {[llargo $ hostname]> 0 && [$ método llargo]> 0 && [Llargo $ nombre de usuario]> 0 && [llargo $ password]> 0} { # Imprime los argumentos encontrados pone "nombre de host = $ host, usuario = $ usuario, $ password = pw, method = $ method" } Else { establecer rval 2 pone "ERROR: Falta argumentos requeridos, debe tener-h,-u,-p \ n" Uso } # ------------------ # Ahora que tenemos las ARGS correctos y sabemos qué hacer, vamos a proceder a # Conectarse, ejecutar los comandos, a continuación, salir. # ------------------ # Asegurarnos de que no hemos encontrado ningún error si {$ rval <= 0} { si {[llargo $ cmdfile] <= 0} { pone "Introduzca el texto de envío (tipo" fin "en la última línea hasta el final):" expect_user-nocase-re "(. *) \ nend \ n" establecer send_text $ expect_out (1, cadena) } Else { puts "Uso de $ cmdfile para texto enviar" # Set cmdfile_fd [abierto $ cmdfile r] si {[catch {set cmdfile_fd [abierto cmdfile $ r]} err_msg]} { pone stderr "No se pudo abrir $ cmdfile para leer \ n $ err_msg" salida 1 } # Leído en la información de archivo - Advertencia hay un límite en el tamaño establecer send_text [leer $ cmdfile_fd 10000] # Estrecha archivo abierto cerrar $ cmdfile_fd } # Conectar y comprobar el estado de retorno antes de proceder si {[Conectar "$ method" "$ hostname" "$ usuario" "$ password"]> 0} { # Parar aquí, sin necesidad de imprimir un error ya Connect función hace que salida 1 } # Si hay una contraseña de activación, permite tratar de enviarlo si {[llargo $ enable_pw]> 0} { pone "modo enable *** Utilizando" enviar "enable \ r" esperar { -Timeout 3 # A continuación se encarga de la solicitud de contraseña -Nocase-re "palabra:" { enviar "$ enable_pw \ r" exp_continue # A continuación se encarga de la pronta normales para detectar cuando se conectó }-Re "# \ * $" { pone "- El éxito en el modo enable -" # A continuación es para esperar tiempo de espera de la espera de un } Timeout { pone "ERROR: Habilitar tiempo de espera de contraseña" establecer rval 3 # A continuación se para cuando la conexión se cierra antes de terminar Eof} { pone "ERROR: Conexión al anfitrión ha fallado: $ expect_out (buffer)" establecer rval 4 } } } # Loop a través de la send_text y enviar una línea a la vez foreach line [SPLIT $ send_text \ n] { # Asegúrese de excluir líneas vacías si {[llargo $ line]> 0} { enviar "$ line \ r" # Inicie el proceso esperado / enviado para iniciar sesión esperar { # A continuación maneja el sí / no mensajes -Nocase-re "\ (sí / no \)" { enviar "sí \ r" exp_continue # A continuación se encarga de la s / n solicita } Nocase-re "\ (sí / no \)" { enviar "sí \ r" exp_continue # A continuación se encarga de la s / n solicita } Nocase-re "- continúa -" { enviar "" exp_continue # A continuación se encarga de la pronta normales para detectar cuando se conectó } Nocase-re "$ mensaje" { pone "\ n - ÉXITO para el normal indicador de entrada - \ n" } } } } # Ahora que hemos terminado, envía una salida pone "*** Acabado con guión" enviar "exit \ r" dormir 1 } # # FIN DE LA ESCRITURA DE # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
Ejemplos
ASA show version utilizando TELNET
[Red @ red bin] $. / Vty_runcmd.exp-h 172.16.0.33-u tim-p userpass-e enablepass hostname = 172.16.0.33, user = tim, pw = userpass, method = telnet Introduzca el texto de envío (tipo "fin" en la última línea hasta el final): mostrar la versión final Conexión mediante telnet a 172.16.0.33 como usuario tim generar telnet 172.16.0.33 Uso de la identificación de procesos: 13811 Tratando 172.16.0.33 ... Conectado con el FP-N1-7-FWSM-P1 (172.16.0.33). Carácter de escape es '^]'. - ================================================= ================== - Se prohíbe el acceso no autorizado |! | | | - ================================================= ================== - Verificación de acceso de usuario Advertencia: La autenticación está habilitada para el contexto del sistema. Usar las credenciales de administrador de contexto. Nombre de usuario: tim Contraseña: ******** Escriba ayuda o '?' para obtener una lista de comandos disponibles. FP-N1-7-FWSM-P1/PartnerFW> ÉXITO: Conectado y listo para enviar comandos *** Uso del modo de habilitación permitir Contraseña: ******** FP-N1-7-FWSM-P1/PartnerFW # - El éxito en el modo enable - mostrar la versión FWSM Firewall Versión 4.0 (6) <context> Device Manager Versión 6.1 (5) F Compilado de lun 22-jun-09 02:33 por fwsmbld FP-N1-7-FWSM-P1 hasta 55 días 11 horas clúster de conmutación de hasta 116 días 12 horas Hardware: WS-SVC-FWM-1 La clave de activación ejecución no se ha establecido, con la configuración predeterminada: Funciones con licencia de este contexto de usuario: Failover: Activo / Activo VPN-DES: Habilitado VPN-3DES-AES: Habilitado GTP / GPRS: Desactivado BGP Stub: Desactivado Aceleración de servicios: Discapacitados Configuración Última modificación por tim en 23:42:12.528 UTC lun 01 de noviembre 2009 FP-N1-7-FWSM-P1/PartnerFW # - Pedirá ÉXITO de inicio de sesión normal - *** Acabado con guión [Red @ red bin] $
ASA show version usando SSH - acepta automáticamente las claves RSA
[Red @ red ~] $ bin / vty_runcmd.exp-m ssh-h 172.16.0.33-u tim-p userpass-e enablepass hostname = 172.16.0.33, user = tim, pw = userpass, method = ssh Introduzca el texto de envío (tipo "fin" en la última línea hasta el final): espectáculo ver final Conexión mediante ssh a 172.16.0.33 como usuario tim generar ssh tim@172.16.0.33 Uso de la identificación de procesos: 14855 La autenticidad de acogida '172 .16.0.33 (172.16.0.33) 'no se puede establecer. RSA huella digital es 1d: 81:48:7 e: ec: 5a: ba: e1: f5: e5: a3: 92:41: a8: 6a: 61. ¿Está seguro de que desea continuar la conexión (sí / no)? sí Advertencia: Permanentemente añadido .16.0.33 '172 '(RSA) a la lista de hosts conocidos. tim@172.16.0.33 's contraseña: - ================================================= ================== - Se prohíbe el acceso no autorizado |! | | | - ================================================= ================== - Escriba ayuda o '?' para obtener una lista de comandos disponibles. FP-N1-7-FWSM-P1/PartnerFW> ÉXITO: Conectado y listo para enviar comandos *** Uso del modo de habilitación permitir Contraseña: ******** FP-N1-7-FWSM-P1/PartnerFW # - El éxito en el modo enable - espectáculo ver FWSM Firewall Versión 4.0 (6) <context> Device Manager Versión 6.1 (5) F Compilado de lun 22-jun-09 02:33 por fwsmbld FP-N1-7-FWSM-P1 hasta 55 días 11 horas clúster de conmutación de hasta 116 días 12 horas Hardware: WS-SVC-FWM-1 La clave de activación ejecución no se ha establecido, con la configuración predeterminada: Funciones con licencia de este contexto de usuario: Failover: Activo / Activo VPN-DES: Habilitado VPN-3DES-AES: Habilitado GTP / GPRS: Desactivado BGP Stub: Desactivado Aceleración de servicios: Discapacitados Configuración modificada por última vez por enable_15 al 06:05:31.674 UTC lun 01 de noviembre 2009 FP-N1-7-FWSM-P1/PartnerFW # - Pedirá ÉXITO de inicio de sesión normal - *** Acabado con guión [Red @ red ~] $
No hay comentarios:
Publicar un comentario