Utilizarea de scripturi Windows pt

automatizarea accesului cu TELNET

 

Administrarea simpla si eficienta

a echipamentelor IT

folosind Scripturi Windows

 

 

 

Sorin P.

ian-2014

Grad de dificultate mare

Public tinta: specialisti IT


 


  Intro


 

In activitatea de specialist IT sint dese situatiile in care trebuie accesate la distanta tot felul de echipamente prin reteaua de date. Fie ca vorbim despre configurarea unei noi interfete a unui router, de adaugare a unui flux ISDN nou pe un voice-gateway aflat deja in uz sau de citirea zilnica a fisierelor log ale unor servere Unix, accesarea la distanta prin TELNET sau SSH reprezinta o activitate recurenta cotidiana.

 



  Activitati recurente la viteza maxima


 

La initializarea unei sesiuni TELNET pe un echipament, primul lucru care trebuie facut inainte de a plasa comenzile necesare, este acela de a introduce o parola de acces si (eventual) un username.

 

Cele 5-10 secunde necesare tastarii a 10-20 de caractere pot parea o chestiune minora. Ce poti face insa in situatia in care apare un incident si trebuie sa interoghezi contra-cronometru 10-20 de switch-uri si router-e in goana identificarii cauzei - avind eventual si o mica cohorta de “spectatori” (colegi din diferite compartimente), care se uita la tine in acel moment ca la Super(IT)man ? Sau in situatia in care trebuie accesate zeci (chiar sute) de echipamente (ei bine, fisa de post a unui sys/net-admin presupune si executarea celor mai indragite dintre activitati, si anume inventarierea anuala si completarea/verificarea CMDB) ? Sau cind respctivele echipamente sint eterogene (servere Windows/Unix/Linux, HDD-rack-uri, SAN/Fiber-channel switch-uri) si fiecare are alt tip de interfata de autentificare, ce necesita secvente diferite la initializare ?

 

Acestea sint momentele in care veti incepe sa apreciati script-urile. Fie ca vorbim de fisiere batch (cmd , bat), wscript (wsf), shell scripts (sh), sau chiar scripturi macro (xls - xlsm), este bine sa alocati din timpul de lucru citeva zeci de ore de studiu sa invatati cite putin din toate, urmind sa decideti mai tirziu, dupa caz, care va pot fi de ajutor.

 


Un script util (sau chiar un set)



In cele ce urmeaza, va voi vorbi, cu exemple concrete, despre cum va puteti crea un set de citva scripturi cu care sa puteti accesa mai usor prin telnet switch-uri si router-e Cisco in vederea automatizarii mai multor activitati, cum ar fi:


  1. initializarea unei sesiuni telnet de pe PC-uri Windows (XP/Win7) care sa introduca automat informatiile pt username si password

 

  1. citirea serial-number-ului sasiului si a unor componente, de exemplu a surselor de alimentare (power-supply si redundant power-supply – RPS) ale unor echipamente Cisco

  1. Jurnalizarea log-urilor cu evenimentele detectate in functionare


NOTA  Script-ul de care discut mai jos este mai degraba un "ambalaj", al carui continut poate fi modificat foarte usor pt a include tot felul de comenzi imaginabile de utilizator. Poate fi folosit nu doar pt accesarea de echipamente Cisco, ci si pt server-e UNIX/LINUX sau pt orice echipament ce poate fi accesat prin TELNET.

 

Presupun ca vi se va parea util ca rezultatul rularii sesiunilor de telnet de mai sus sa fie salvate in cite un fisier pt fiecare echipament in parte. Aceste fisiere se pot scana (am evitat sa folosesc cuvintul parsing) ulterior in vederea centralizarii simplificate a datelor  doriteintr-un fisier CSV sau XLS.


In aceasta prima parte a articolului voi discuta despre script-ul de lansare a comenzii de TELNET dintr-un DOS-prompt lansat pe un computer avind Windows 7 pe 64 biti.


 

In partea a treia a acestui articol va voi prezenta un script macro (pt fisiere EXCEL), care poate xtrage sn-urile (serial-number) echipamentelor interogate automat cu ajutorul prezentului script si a unor subansamble - pe mine m-a interesat seria surselor de alimentare.



Definirea temei si identificarea solutiei "manuale"



Primul script din set, numit de mine ATELNET.WSF, este creat pt a fi lansat dintr-un  DOS_PROMPT (veti vedea in partea a doua de ce) si va initia o sesiune de telnet pe un echipament specificat la lansare (numele de retea sau adresa IP). Deoarece doresc sa pot folosi rezultatul rularii acestui script pt culegerea de date ulterior executiei, se va crea cite un fisier log pt fiecare echipament accesat.

 

Deoarece nu doresc sa aduc in discutie o aplicatie third-party, fie ea freeware si open-source, voi apela  programul TELNET.EXE din Windows, cu parametrul -f pt a salva toata sesiunea intr-un fisier de log.

 

telnet –f nume_fis_log target_adr

 

unde

  •    -f este un switch al comenzii telnet, ce permite jurnalizarea sesiunii intr-un fisier

 

  •    nume_fis_log este numele fisierului de jurnalizare, al carui nume l-am definit: “atelnet_xxx.xxx.xxx.xxx.log

 

 

  •    target_adr este adresa echipamentului tinta; de remarcat ca acesta poate fi -evident- adresa IP, dar si alias-ul echipamentului, cu conditia ca DNS-ul din reteaua locala sa-l poata rezolva

 

  • xxx.xxx.xxx.xxx reprezinta adresa echipamentului-tinta; in scopul evitarii utilizarii a prea multor parametri, folosesc acelasi parametru target_adr

 

Exemplu de lansare sesiune telnet din DOS-PROMPT:


C:\temp\locatia_1> telnet -f atelnet_10.299.217.43.log 10.299.217.43


Sa vedem, asadar, cum arata o sesiune de telnet initiata pe un switch Cisco in varianta "manuala", folosind metoda de mai sus:



In DOS-BOX-ul de mai sus am evidentiat comenzile date manual in albastru. Ceea ce dorim este sa implementam un script care sa introduca informatia in albastru pt noi.



Script-ul ATELNET.WSF



Ce face script-ul:


Detalii script

  • Nume script: atelnet.wsf
  • Parametru: adresa IP a echipamentului tinta
  • Exemplu lansare: atelnet.wsf 10.299.217.43

Ce face script-ul

  • deschide o fereastra DOS_PROMPT
  • lanseaza o comanda telnet cu jurnalizare in fisier in fereastra de mai sus

    telnet –f nume_fis_log target_adr_ip

                     - -f este parte a comenzii telnet, ce permite jurnalizarea sesiunii intr-un fisier

                     - nume_fis_log va avea forma: “auto_telnet_test_log_xxx.xxx.xxx.xxx.log”

                     - target_adr_ip este parametrul preluat de la lansarea script-ului

                     - xxx.xxx.xxx.xxx reprezinta adresa IP a echipamentului-tinta si este                                      parametrul preluat de la lansarea script-ului

  • Introducere automata username si password din script


Va invit sa gasiti script-ul in tabelul de mai jos (in coloana 1), caruia i-am adaugat si o coloana de comentarii.




<job>

<script language="VBScript">

Option Explicit

On Error Resume Next

Dim WshShell

Dim wait_time_1

wait_time_1=200

Dim string_1, string_2

string_1="init"

string_2="init"

set WshShell=CreateObject("WScript.Shell")


'msgbox Wscript.Arguments.Count

Dim argg

argg=Wscript.Arguments(0)

Dim adr_ip

adr_ip=argg


'verify if @IP has been given

if adr_ip = "" then

msgbox "WARNING: No IP address specified." & vbCRLF & "                 Script stopped.",,"auto_telnet_logged - by SoP"

WScript.quit

end if


Dim linie_cda

string_1=my_pass.word

string_2=sp301




'Send commands to the window as needed - IP and commands need to be customized

 

'Step 1 - Telnet to remote IP'

linie_cda = "telnet -f atelnet_" & argg & ".log " & adr_ip

WshShell.run "cmd.exe"

WScript.Sleep wait_time_1


WshShell.SendKeys linie_cda

WshShell.SendKeys ("{Enter}")

WScript.Sleep wait_time_1


'Step 2 - Issue Commands with pauses'

WshShell.SendKeys string_2

WScript.Sleep wait_time_1

WshShell.SendKeys ("{Enter}")

WshShell.SendKeys string_1

WshShell.SendKeys ("{Enter}")

WScript.Sleep wait_time_1


'Step 2a - Enter desired commands

WshShell.SendKeys ("{Enter}")

WScript.Sleep wait_time_1


' call for inventory

WshShell.SendKeys "sh inv"

WshShell.SendKeys ("{Enter}")

WScript.Sleep wait_time_1

' send 5 safe spaces to assure all text flows for big ciscos

WshShell.SendKeys (" ")

WScript.Sleep wait_time_1

WshShell.SendKeys (" ")

WScript.Sleep wait_time_1

WshShell.SendKeys (" ")

WScript.Sleep wait_time_1

WshShell.SendKeys (" ")

WScript.Sleep wait_time_1

WshShell.SendKeys (" ")

WScript.Sleep wait_time_1

 

' read snmp location (if defined)

WshShell.SendKeys "sh snmp location"

WshShell.SendKeys ("{Enter}")

WScript.Sleep wait_time_1


' read snmp serial number

WshShell.SendKeys "sh snmp chassis"

WshShell.SendKeys ("{Enter}")

WScript.Sleep wait_time_1


' Step 3 - Exit Telnet

WshShell.SendKeys "exit"

WshShell.SendKeys ("{Enter}")

' tweak multiplier blow: 2 for LAN, 3 for fast-WAN, 10 for slow-WAN

WScript.Sleep 3*wait_time_1

WshShell.SendKeys ("{Enter}")


' Step 3a - Exit Command Window

WshShell.SendKeys ("exit")

WshShell.SendKeys ("{Enter}")

WScript.Sleep wait_time_1


WScript.Quit


</script>

</job>


initializare

 

 

 

 

 

 

 

 

 

 

 

preluare

parametru

nume_retea

sau

adresa IP

 

verifica daca are adresa IP

(altfel da mesaj eroare)

 

 

definite parola si username

 

 

 

 

 

lansare sesiune telnet cu log

 

 

 

 

 

zona de plasare comenzi

 

user si

parola

 

 

 

 

 

 

comanda_1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

comanda_2

 

 

 

 

comanda_3

 

 

 

 

 

iesire din telnet

 

 

 

 

inchidere DOS-BOX



In cazul in care doriti sa-l utilizati, este suficient sa copiati doar textul din coloana din stinga, urmint sa-l introduceti intr-un fisier text caruia va trebui sa-i dati extensia wsf.




  Utilizarea script-ului ATELNET.WSF



Ln general, un fisier wsf poate fi lansat direct cu un dublu-click dintr-o fereastra Windows explorer sau My Computer. Dar, deoarece atelnet.wsf necesita explicitarea echipamentului-tinta in scopul de a fi folosit ca un modul multifunctional, acesta trebuie lansat cu un parametru.


Pt aceasta, va trebui:

- fie sa deschideti un DOS-BOX in directorul in care este pus fisierul si de acolo scrieti comanda "atelnet adresa_ip" sau "atelnet nume_echipament"

- fie creati un fisier cmd in care scrieti  C:\temp\locatia_1\atelnet.wsf 172.16.14.3 ( sau doar atelnet 172.16.14.3 daca fisierul cmd se afla in locatia curenta)

- fie creati un shortcut in ale carui proprietati adaugati la Target adresa IP dupa atelnet.wsf


 



  Observatii asupra script-ului ATELNET.WSF



 

Desi fisierele wsf reprezinta o metda simpla si eficienta de a va automatiza munca, exista si un revers al medaliei: comanda WshShell.SendKeys  trimite secventa de caractere "in orb", spre fereastra activa. De aceea nu trebuie sa folositi computerul in timp ce aveti in executie fisiere wsf, altfel veti constata cu stupoare ca string-urile trimise de script vor apare in fisierul WORD pe care tocmai il editati.

 

De asemenea, cind executati astfel de comenzi nu blocati ecranul (pt a pleca de la birou intr-o mica pauza, de exemplu), deoarece respectivele comenzi vor fi trimise in alte ferestre active din windows si nu veti obtin rezultatul dorit.

 

In partea a doua a acestui artcol va voi prezenta un al doilea script care preia un set de adrese IP dintr-un fisier ini si lanseaza automat cite o fereastra atelnet pt fiecare echipament in parte, putind astfel sa executati 10-15 de astfel de interogari in paralel.

 



Continuare in partea a doua




In cazul in care informatiile postate pe site-ul meu vi s-au parut interesante, va astept sa reveniti.

 

Salveaza bookmark

 

comenteaza pe blog

 

 

 

vizitatori.

Site alternativ: sorin-p.xhost.ro

Home  Eu  Muzica mea  Stil de viata  Copyright  Revista