Advertisement
Rnery

Jump Server..

Jan 6th, 2024
1,292
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.10 KB | Source Code | 0 0
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3.  
  4. from paramiko import SSHClient, AutoAddPolicy
  5. from json import load
  6.  
  7. class SSHManager:
  8.     def __init__(self, host, credentials_file="config.json"):
  9.         self.host = host
  10.         self.credentials_file = credentials_file
  11.         self.client = None
  12.         self.load_credentials()
  13.  
  14.     def load_credentials(self):
  15.         with open(self.credentials_file, 'r') as file:
  16.             credentials = load(file)
  17.             self.username = credentials["username"]
  18.             self.password = credentials["password"]
  19.  
  20.     def connect(self):
  21.         try:
  22.             self.client = SSHClient()
  23.             self.client.set_missing_host_key_policy(AutoAddPolicy())
  24.             self.client.connect(self.host, username=self.username, password=self.password)
  25.         except Exception as e:
  26.             raise RuntimeError(f"Erro ao conectar: {e}")
  27.  
  28.     def execute_command(self, command):
  29.         try:
  30.             _, stdout, _ = self.client.exec_command(command)
  31.             return stdout.read().decode('utf-8')
  32.         except Exception as e:
  33.             raise RuntimeError(f"Erro ao executar comando: {e}")
  34.  
  35.     def close(self):
  36.         if self.client:
  37.             self.client.close()
  38.  
  39. def ler_ips_do_arquivo(nome_arquivo):
  40.     with open(nome_arquivo, 'r') as file:
  41.         return [line.strip() for line in file.readlines()]
  42.  
  43. def main():
  44.     try:
  45.         arquivo_ips = 'ips.txt'  # Substitua pelo nome do seu arquivo de IPs
  46.         arquivo_comandos = 'comandos.txt'  # Substitua pelo nome do seu arquivo de comandos
  47.  
  48.         ips = ler_ips_do_arquivo(arquivo_ips)
  49.         comandos = [line.strip() for line in open(arquivo_comandos, 'r').readlines()]
  50.  
  51.         total_roteadores = len(ips)
  52.         roteadores_acessados = 0
  53.         roteadores_nao_acessados = 0
  54.  
  55.         with open('relatorio.txt', 'w') as relatorio:
  56.             for ip in ips:
  57.                 try:
  58.                     ssh_manager = SSHManager(ip)
  59.                     ssh_manager.connect()
  60.  
  61.                     resultados = [ssh_manager.execute_command(comando) for comando in comandos]
  62.  
  63.                     roteadores_acessados += 1
  64.                     relatorio.write(f'{ip} - LOG OK\n')
  65.  
  66.                     with open(f'ANTES_{ip}.log', 'w') as log_antes:
  67.                         log_antes.write(resultados[0])  # Supondo que o resultado do primeiro comando seja o log antes
  68.  
  69.                     with open(f'DEPOIS_{ip}.log', 'w') as log_depois:
  70.                         log_depois.write(resultados[1])  # Supondo que o resultado do segundo comando seja o log depois
  71.  
  72.                     ssh_manager.close()
  73.  
  74.                 except RuntimeError as e:
  75.                     roteadores_nao_acessados += 1
  76.                     relatorio.write(f'{ip} - LOG NOK - {e}\n')
  77.  
  78.         relatorio.write(f'\nNúmero de roteadores: {total_roteadores}\n')
  79.         relatorio.write(f'Roteadores acessados: {roteadores_acessados}\n')
  80.         relatorio.write(f'Roteadores não acessados: {roteadores_nao_acessados}\n')
  81.  
  82.     except Exception as e:
  83.         print(f"Erro: {e}")
  84.  
  85. if __name__ == "__main__":
  86.     main()
  87.  
Tags: python
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement