Wysyłanie poleceń CISCO wysyłanych przez SSH / Telnet

Informacje ogólne

  • Nazwa skryptu: publip.sh (publi (point) sh ... publipSH.
  • Elastyczność: w pełni konfigurowalny.
  • Ograniczenia: wymaga, aby hasło było takie samo dla wszystkich urządzeń lub trzeba dodać kilka wierszy kodu ...
  • Poziom ryzyka: wysoki. Uważaj na wpisy, niewłaściwa manipulacja może zamrozić całą sieć.
  • Wymagana wiedza o Linuksie: Otwórz / edytuj plik (vi nazwa_pliku) i zapisz zmiany (Esc to: wq?. Uruchom skrypt za pomocą polecenia ./Scriptname z folderu docelowego.

Co to jest skrypt publip.sh?

Ten skrypt pozwala administratorowi sieci wysyłać polecenia Cisco na wielu wybranych urządzeniach zdalnych (router, zapora, przełącznik, punkty dostępu bezprzewodowego ...), poprzez SSH lub Telnet (skrypt automatycznie obsługuje oba typy połączeń).

  • Te wiersze poleceń zostaną początkowo wprowadzone w sekwencji, jedno polecenie na wiersz (jako plik wsadowy lub plik konfiguracyjny), w małym pliku o nazwie commandes.txt (nie ma limitu rozmiaru)
  • Wprowadź wszystkie adresy IP (lub alias DNS) różnych urządzeń w sieci (liczba urządzeń nie jest ograniczona).
  • Wreszcie, podczas uruchamiania skryptu, zostaniesz poproszony o podanie hasła, które w naszym przypadku musi być takie samo dla wszystkich urządzeń.

Skrypt idzie znacznie dalej!

W rzeczywistości jest w pełni autonomiczny i może powodować błędy połączenia, wprowadzanie danych i zapisywanie zmian w pliku dziennika. Skrypt ten identyfikuje również sprzęt, z którym może się połączyć za pośrednictwem SSH lub Telnet, a następnie przechowuje archiwum procedur generujących błędy krytyczne (skrypt awaryjny, błędna interpretacja commanf przez sprzęt). Różne typy błędów to:

  • 1 - Limit czasu połączenia
  • 2 - Błąd logowania, nieprawidłowe hasło
  • 3 - Alias ​​DNS lub adres IP nie istnieje
  • 4 - Awarie skryptu Expect (utwórz plik dziennika sprzętu)
  • 5 - Wyłączone połączenie zdalne
  • 6 - Popraw alias DNS, ale nieistniejący adres IP
  • 7 - Sprzęt nie Cisco (HP Procurve)
  • 8 - Sprzęt inny niż Cisco (X1000)
  • 9 - Sprzęt inny niż Cisco (Alcatel)
  • 10 - Polecenie nie rozpoznane przez sprzęt
  • 11 - Błąd nie wymieniony powyżej ($? = 1)

Będziesz mógł obsługiwać cały sprzęt jednocześnie i zbierać cenne informacje w sieci!

Zawartość plików pomocniczych

commandes.txt

Będziesz musiał wprowadzić polecenia ... Plik musi dla wszelkich zmian konfiguracji routera zacząć od „conf t” i przez „end”. Modyfikacje muszą być wykonywane w sposób hierarchiczny i nie zapomnij zapisać zmian! Mały przykład:

 # commandes.txt conf t router ospf 100 sieć 50.50.100.0 0.0.0.255 obszar 0 wyjście interfejs fa0 / 0 ip ospf hello-interval 5 ip ospf dead-interval 20 obszar wyjścia 0 uwierzytelnianie wiadomość-digest koniec 

napisz mem

liste.txt

Wprowadź adres IP lub alias DNS wszystkich urządzeń:

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

Skrypt nie uwzględnia pustych przestrzeni.

Scenariusz

Skrypt będzie oznaczony małym # [1], który zostanie omówiony na dole skryptu

 #! / bin / bash # skrypt.sh echo "veuillez donner le mot de passe" stty -echo # [1] odczyt hasł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 "eksportuj eksport trasy routeur polecenie eksportu rm -f $ erreur # [3] rm -f $ ssh rm -f $ telnet cat $ liste | podczas czytania routeur; zrobić if ["$ routeur"! = ""] następnie if [! -f $ ssh] # [4] następnie echo 'oczekuj 2> i 1 <> $ ssh echo' spawn ssh [email protected] $ routeur '>> $ ssh echo' expect {'>> $ ssh echo' "Hasło:" {send "$ password r"} '>> $ ssh echo' timeout {exit} '>> $ ssh echo'} '>> $ ssh echo' expect "#" '>> $ ssh cat $ cmdcisco | podczas odczytu komendy echo „wyślij” $ commande r „„ echo ”spodziewa się„ # ”'gotowe >> $ ssh echo„ wyślij ”wyjście r” ”>> $ ssh echo„ expect ”closed”' >> $ ssh echo 'exit' >> $ ssh echo 'EOF' >> $ ssh chmod + x $ ssh # [5] czas fi -p $ ssh> $ temp 2> & 1 # [6] COD_RET = $? auth = "cat $ temp | grep -c" Password: "" # [7] if ["$ auth" -gt "1"] następnie echo "Problème d'authentification sur $ routeur!" echo "$ routeur: złe logowanie / hasło" >> $ erreur continue fi temps = "grep" real '$ temp | sed / real / § / '| cut -d'§ '-f2 | cut -d '' -f1 | cut -d '.' -f1 'jeśli [$ temps -ge 10 -a! „'grep' zamknięte '$ temp'”] # [8] a następnie echo „L'equipement $ routeur ne réponds pas!”; echo "$ routeur: limit czasu połączenia" >> $ erreur kontynuuj fi jeśli ["$ COD_RET"! = "0"] # [9] następnie #Erreur de connexion a l'équipement en SSH jeśli [! -f $ telnet] następnie echo 'oczekuj 2> & 1 <> $ telnet echo' spawn telnet $ routeur '>> $ telnet echo' wyślij "admin" ">> $ telnet echo 'oczekuj" Hasło: "' >> $ telnet echo 'wyślij "$ hasło r"' >> $ telnet echo 'oczekuj "#"' >> $ telnet cat $ cmdcisco | podczas odczytu komendy echo „wyślij” $ komenda r „„ echo ”spodziewaj się„ # ”” gotowe >> $ telnet echo „wyślij” wyjdź r ”” >> $ telnet echo „oczekuj” zamknięte „” >> $ telnet echo 'exit' >> $ telnet echo 'EOF' >> $ telnet chmod + x $ telnet fi $ telnet> $ temp 2> & 1 fi COD_RET = $? auth = "cat $ temp | grep -c" Password: "" # [10] if ["$ auth" -gt "1"] następnie echo "Problème d'authentification sur $ routeur!" echo "$ routeur: wrong log-in / password" >> $ erreur elif ["'grep' Błąd wyszukiwania nazwy hosta '$ temp'"] następnie echo "l'equipement $ routeur n'existe pas!" echo "$ routeur: does not exist" >> $ erreur elif ["'grep' Nieznany host '$ temp'"] a następnie echo "la saisie de l'ip ou du nom $ routeur est wronge!" echo "$ routeur: wrong spelling" >> $ erreur elif ["'grep' send: identyfikator odradzania exp4 nie otwarty '$ temp'"] następnie echo "/! ERREUR dans la procédure. !! echo "$ routeur: Spodziewaj się, że wykonanie skryptu nie powiodło się!" >> $ erreur cp $ temp $ routeur.error.log elif ["'grep' Authentication nie powiodło się '$ temp'"], a następnie echo "Mot de passe erroné pour $ routeur!" echo "$ routeur: wrong log-in / password" >> $ erreur elif ["'grep' Connection odmówiono '$ temp'"] a następnie echo "Connexion à distance sur $ routeur désactivé!" echo "$ routeur: vty connection disabled" >> $ erreur elif ["'grep' Brak trasy do hosta '$ temp'"] a następnie echo "Alias ​​DNS $ routeur istniejący mais IP invalide!" echo "$ routeur: No route to host" >> $ erreur elif ["'grep' ProCurve '$ temp'"] a następnie echo "routeur $ routeur HP et non Cisco!" echo "$ routeur: router bez Cisco (HP ProCurve)" >> $ erreur elif ["'grep' Alcatel '$ temp'"] a następnie echo "routeur $ routeur Alcatel i inne firmy Cisco!" echo "$ routeur: router bez Cisco (Alcatel)" >> $ erreur elif ["'grep' Witaj w X1000 '$ temp'"], a następnie echo "routeur $ routeur X1000 i nie Cisco!" echo "$ routeur: non Cisco equipement (X1000)" >> $ erreur elif ["'grep'% Nieznane polecenie '$ temp'" -o "'grep'% Nieprawidłowe '$ temp'"] następnie echo "/! Commandes Cisco non reconnues par l'equipement. Consultez le fichier log de $ routeur !!! ” echo "$ routeur: Znaleziono nierozpoznane polecenia" >> $ erreur cp $ temp $ routeur.error.log elif ["'grep' Połączono z '$ temp'" -o "'grep' Połączenie zamknięte przez obcego hosta. ' $ temp '"] następnie echo" $ routeur Telnet OK! " elif ["'grep' Connexion enregistree sur le terminal '$ temp'" -o "'grep' Połączenie z '$ temp'"] następnie echo "$ routeur SSH OK!" elif ["$ COD_RET"! = "0"], a następnie echo "Problème de connexion a l'equipement $ routeur!" echo "$ routeur: connection problem" >> $ erreur fi fi gotowe rm -f $ temp # [11] zakończ 

Komentarze

  • 1 : Ukryj hasło
  • 2 : Wszystkie pliki są przechowywane w zmiennych (ścieżka względna) umożliwiają uruchomienie skryptu z dowolnego miejsca.
  • 3 : Usuwa istniejące pliki wygenerowane, jeśli skrypt został już wykonany.
  • 4 : Utwórz skrypt Oczekiwanie
  • 5 : Ustaw uprawnienia dla skryptu Oczekiwanie
  • 6 : Wykonaj skrypt Expect, agregując błąd wyjściowy ze standardowym wyjściem, obliczając czas wykonania, aby obsłużyć limit czasu.
  • 7 : Sprawdź problemy z uwierzytelnianiem, licząc liczbę wystąpień „Hasło” w pliku tymczasowym.
  • 8 : Sprawdź czas wykonania i sprawdź, czy nie jest on wyższy niż 10 (oczekiwana wartość limitu czasu)
  • 9 : W przypadku błędu połączenia SSH powtórz procedurę za pomocą usługi Telnet.
  • 10 : Sprawdź wszystkie przypadki błędów wygenerowane przez skrypt. (Por. II).
  • 11 : Usuń plik tymczasowy.

Poprzedni Artykuł Następny Artykuł

Najważniejsze Wskazówki