Envío de comandos CISCO enviados a través de SSH / Telnet

Información general

  • Nombre del script: publip.sh (publi (point) sh ... publipSH.
  • Flexibilidad: totalmente personalizable.
  • Restricciones: requiere que la contraseña sea la misma para todos los dispositivos, o tendrá que agregar algunas líneas de código ...
  • Nivel de riesgo: Alto. Tenga mucho cuidado con las entradas, una manipulación incorrecta puede congelar toda su red.
  • Conocimiento de Linux requerido: abra / edite un archivo (vi nombre_archivo) y guarde las modificaciones (Esc y luego: wq?. Ejecute un script usando el comando ./Scriptname desde la carpeta de destino.

¿Qué es el script publip.sh?

Esta secuencia de comandos le permite a un administrador de red enviar comandos de Cisco a varios dispositivos remotos seleccionados (enrutador, firewall, conmutador, puntos de acceso inalámbrico ...), a través de SSH o Telnet (la secuencia de comandos maneja automáticamente ambos tipos de conexión).

  • Estas líneas de comando se ingresarán inicialmente en una secuencia, un comando por línea (como un lote o un archivo de configuración), en un archivo pequeño llamado commandes.txt (no hay límite de tamaño)
  • Ingrese todas las direcciones IP (o alias de DNS) para los distintos dispositivos en su red (no hay límite para la cantidad de dispositivos).
  • Finalmente, cuando ejecute el script, se le pedirá que ingrese una contraseña, que en nuestro caso debe ser la misma para todos los dispositivos.

¡El guión va mucho más allá!

De hecho, es completamente autónomo y puede colgar errores de conexión, entrada de datos y registrar cambios en un archivo de registro. Esta secuencia de comandos también identifica el equipo para el cual puede conectarse a través de SSH o Telnet y luego guarda un archivo de los procedimientos que generan errores críticos (secuencia de comandos de bloqueo, mala interpretación de una comunicación por parte del equipo). Los diferentes tipos de errores son:

  • 1 - Tiempo de espera de conexión
  • 2 - Error de inicio de sesión, contraseña incorrecta
  • 3 - Alias ​​de DNS o IP no existentes
  • 4 - Fallos de la secuencia de comandos Expect (crear archivo de registro del equipo)
  • 5 - Conexión remota deshabilitada
  • 6 - Corregir el alias de DNS pero IP no existente
  • 7 - Equipo no Cisco (HP Procurve)
  • 8 - Equipos no Cisco (X1000)
  • 9 - Equipos no Cisco (Alcatel)
  • 10 -Envío de comando no reconocido por el equipo.
  • 11 - Error no listado arriba ($? = 1)

¡Podrá operar en todos sus equipos al mismo tiempo y recopilar información valiosa en su red!

El contenido de los archivos subsidiarios.

commandes.txt

Deberá ingresar los comandos ... El archivo debe, para cualquier cambio en la configuración del enrutador, comenzar con "conf t" y antes de "finalizar". Las modificaciones deben realizarse de manera jerárquica y ¡no olvide guardar sus cambios! Pequeño ejemplo:

 # commandes.txt conf t router ospf 100 red 50.50.100.0 0.0.0.255 área 0 interfaz de salida fa0 / 0 ip ospf hello-interval 5 ip ospf dead-interval 20 área de salida 0 autenticación mensaje-resumen finalización 

escribir mem

liste.txt

Ingrese el alias IP o DNS de todos los equipos involucrados:

 # liste.txt 10.25.85.46 routeur-marseille switch-assemblee-generale 80.54.136.105 

El sript no tiene en cuenta los espacios vacíos.

La secuencia de comandos

El script estará subtitulado con el pequeño # [1], que se tratará al final del script.

 #! / bin / bash # script.sh echo "veuillez donner le mot de passe" stty -echo # [1] leer contraseña stty echo export ssh = "./ ssh.sh" # [2] export telnet = "./ telnet.sh "export erreur =" ./ rapport_erreurs.log "export temp =" ./ tmp_routeur.log "export cmdcisco =" ./ commandes.txt "export liste =" ./ liste.txt "exportar contraseña export exportar ruta export exportar rm -f $ erreur # [3] rm -f $ ssh rm -f $ telnet cat $ liste | mientras lees routeur; haz si ["$ routeur"! = ""] entonces si [! -f $ ssh] # [4] luego echo 'expect 2> & 1 <> $ ssh echo' spawn ssh [correo electrónico protegido] $ routeur '>> $ ssh echo' expect {'>> $ ssh echo' "Contraseña:" {enviar "$ password \ r"} '>> $ ssh echo' timeout {exit} '>> $ ssh echo'} '>> $ ssh echo' expect "#" '>> $ ssh cat $ cmdcisco | mientras se lee commande do echo "send \" $ commande \ r \ "" echo 'expect "#"' hecho >> $ ssh echo 'send "exit \ r"' >> $ ssh echo 'expect "closed"' >> $ ssh echo 'exit' >> $ ssh echo 'EOF' >> $ ssh chmod + x $ ssh # [5] fi time -p $ ssh> $ temp 2> & 1 # [6] COD_RET = $? auth = "cat $ temp | grep -c" Contraseña: "" # [7] if ["$ auth" -gt "1"] entonces haga eco en "Problème d'authentification sur $ routeur!" echo "$ routeur: inicio de sesión / contraseña incorrectos" >> $ erreur continue fi temps = "grep" real '$ temp | sed 's / real / § /' | cortar -d'§ '-f2 | corte -d '' -f1 | corte -d '.' -f1 'si [$ temps -ge 10 -a! "'grep' closed '$ temp'"] # [8] luego echo "L'equipement $ routeur ne réponds pas!"; echo "$ routeur: tiempo de conexión agotado" >> $ erreur continue fi si ["$ COD_RET"! = "0"] # [9] luego #Erreur de connexion a l'équipement en SSH if [! -f $ telnet] luego echo 'expect 2> & 1 <> $ telnet echo' engendra telnet $ routeur '>> $ telnet echo' enviar "admin \ r" '>> $ telnet echo' expect "Contraseña:" '>> $ telnet echo 'enviar "$ password \ r"' >> $ telnet echo 'expect "#"' >> $ telnet cat $ cmdcisco | mientras se lee commande do echo "send \" $ commande \ r \ "" echo 'expect "#"' hecho >> $ telnet echo 'send "exit \ r"' >> $ telnet echo 'expect "closed"' >> $ telnet echo 'exit' >> $ telnet echo 'EOF' >> $ telnet chmod + x $ telnet fi $ telnet> $ temp 2> & 1 fi COD_RET = $? auth = "cat $ temp | grep -c" Contraseña: "" # [10] if ["$ auth" -gt "1"] entonces haga eco en "Problème d'authentification sur $ routeur!" echo "$ routeur: inicio de sesión / contraseña incorrectos" >> $ erreur elif ["'grep' Error en la búsqueda del nombre del host '$ temp'"] luego eco "l'equipement $ routeur n'existe pas!" echo "$ routeur: no existe" >> $ erreur elif ["grep 'Host desconocido' $ temp '"] luego echo "la saisie de l'ip ou du nom $ routeur est incorrecte!" echo "$ routeur: ortografía incorrecta" >> $ erreur elif ["'grep' send: spawn id exp4 no está abierto '$ temp'"] luego echo "/! \ ERREUR dans la procédure. Consulte el archivo de registro de $ routeur! !! " echo "$ routeur: ¡Espera que la ejecución del script haya fallado!" >> $ erreur cp $ temp $ routeur.error.log elif ["'grep' Autenticación fallida '$ temp'"] luego se hace eco de "Mot de passe erroné pour $ routeur!" echo "$ routeur: inicio de sesión / contraseña incorrectos" >> $ erreur elif ["'grep' Conexión rechazada '$ temp'"] luego echo "Connexion à distance sur $ routeur désactivé!" echo "$ routeur: conexión vty deshabilitada" >> $ erreur elif ["'grep' No hay ruta para hospedar '$ temp'"] y luego se hace eco de "Alias ​​DNS $ routeur existant mais IP invalide!" echo "$ routeur: No hay ruta para hospedar" >> $ erreur elif ["grep 'ProCurve' $ temp '"] y luego se hace eco de "routeur $ routeur HP y no Cisco!" echo "$ routeur: no enrutador Cisco (HP ProCurve)" >> $ erreur elif ["'grep' Alcatel '$ temp'"] luego echo "routeur $ routeur Alcatel et non Cisco!" echo "$ routeur: no enrutador Cisco (Alcatel)" >> $ erreur elif ["grep 'Bienvenido a X1000' $ temp '"] y luego a "routeur $ routeur X1000 et non Cisco!" echo "$ routeur: no equipo Cisco (X1000)" >> $ erreur elif ["'grep'% comando desconocido '$ temp'" -o "'grep'% Invalid '$ temp'"] luego echo "/! \ Comandos de Cisco no reconnues par l'equipement. echo "$ routeur: Se encontraron comandos no reconocidos" >> $ erreur cp $ temp $ routeur.error.log elif ["grep 'Conectado a' $ temp '" -o "' grep 'Conexión cerrada por un host extranjero'. $ temp '"] luego se hace eco de" $ routeur Telnet OK! " elif ["'grep' Connexion enregistree sur le terminal '$ temp'" -o "'grep' Conexión a '$ temp'"] luego hace eco de "$ routeur SSH ¡OK!" elif ["$ COD_RET"! = "0"] y luego se hace eco de "Problème de connexion a l'equipement $ routeur!" echo "$ routeur: problema de conexión" >> $ erreur fi fi done rm -f $ temp # [11] exit 

Comentarios

  • 1 : Ocultar la entrada de contraseña
  • 2 : todos los archivos se almacenan en variables (ruta relativa) que le permiten ejecutar el script desde cualquier lugar.
  • 3 : Elimina los archivos existentes generados si el script ya se ha ejecutado.
  • 4 : Crear la secuencia de comandos Expect
  • 5 : Establecer permisos para el script Expect
  • 6 : Ejecute el script Expect, agregando el error de salida con la salida estándar, calculando el tiempo de ejecución para manejar el tiempo de espera.
  • 7 : compruebe si hay problemas de autenticación contando el número de ocurrencias de "Contraseña" en el archivo temporal.
  • 8 : verifique el tiempo de ejecución y verifique que no sea superior a 10 (el valor de tiempo de espera esperado)
  • 9 : Para error de conexión SSH, repita el procedimiento a través de Telnet.
  • 10 : Revise todos los casos de error generados por el script. (Cf II).
  • 11 : Eliminar el archivo temporal.

Artículo Anterior Artículo Siguiente

Los Mejores Consejos