Advertisement
Rnery

Refeito sem classe..

Jan 6th, 2024
1,333
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.04 KB | Source Code | 0 0
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3.  
  4. # Refeito sem classe..
  5.  
  6. from paramiko import SSHClient, AutoAddPolicy, ProxyCommand
  7. from json import load
  8.  
  9. def load_credentials(client, jump_host, jump_username, jump_password):
  10.     if jump_host:
  11.         client = SSHClient()
  12.         client.set_missing_host_key_policy(AutoAddPolicy())
  13.         client.connect(
  14.             jump_host,
  15.             username=jump_username,
  16.             password=jump_password,
  17.         )
  18.  
  19. def connect(client, host, username, password, jump_host=None, jump_username=None, jump_password=None):
  20.     try:
  21.         if not client:
  22.             client = SSHClient()
  23.             client.set_missing_host_key_policy(AutoAddPolicy())
  24.             if jump_host:
  25.                 proxy_cmd = ProxyCommand(f"ssh -q -W %h:%p {jump_host}")
  26.                 client.connect(
  27.                     host,
  28.                     username=username,
  29.                     password=password,
  30.                     sock=proxy_cmd,
  31.                 )
  32.             else:
  33.                 client.connect(
  34.                     host,
  35.                     username=username,
  36.                     password=password,
  37.                 )
  38.     except Exception as e:
  39.         raise RuntimeError(f"Erro ao conectar: {e}")
  40.  
  41. def execute_command(client, command):
  42.     try:
  43.         _, stdout, _ = client.exec_command(command)
  44.         return stdout.read().decode('utf-8')
  45.     except Exception as e:
  46.         raise RuntimeError(f"Erro ao executar comando: {e}")
  47.  
  48. def close(client):
  49.     if client:
  50.         client.close()
  51.  
  52. def ler_ips_do_arquivo(nome_arquivo):
  53.     with open(nome_arquivo, 'r') as file:
  54.         return [line.strip() for line in file.readlines()]
  55.  
  56. def main():
  57.     try:
  58.         # Substitua pelos dados do seu servidor intermediário (jump server)
  59.         jump_host = 'jump_server_ip'  # IP do servidor intermediário
  60.         jump_username = 'user1'        # Nome de usuário do servidor intermediário
  61.         jump_password = 'passw1'        # Senha do servidor intermediário
  62.        
  63.         arquivo_ips = 'ips.txt'          # Substitua pelo nome do seu arquivo de IPs
  64.         arquivo_comandos = 'comandos.txt'  # Substitua pelo nome do seu arquivo de comandos
  65.  
  66.         client = None
  67.         ips = ler_ips_do_arquivo(arquivo_ips)
  68.         comandos = [line.strip() for line in open(arquivo_comandos, 'r').readlines()]
  69.  
  70.         total_roteadores = len(ips)
  71.         roteadores_acessados = 0
  72.         roteadores_nao_acessados = 0
  73.  
  74.         with open('relatorio.txt', 'w') as relatorio:
  75.             for ip in ips:
  76.                 try:
  77.                     # Substitua pelos dados do seu roteador final
  78.                     load_credentials(client, jump_host, jump_username, jump_password)
  79.                     connect(client, ip, 'user2', 'passw2', jump_host, jump_username, jump_password)
  80.  
  81.                     resultados = [execute_command(client, comando) for comando in comandos]
  82.  
  83.                     if len(resultados) >= 2:  # Verificar se há pelo menos dois elementos na lista resultados
  84.                         roteadores_acessados += 1
  85.                         relatorio.write(f'{ip} - LOG OK\n')
  86.  
  87.                         with open(f'ANTES_{ip}.log', 'w') as log_antes:
  88.                             log_antes.write(resultados[0])  # Supondo que o resultado do primeiro comando seja o log antes
  89.  
  90.                         with open(f'DEPOIS_{ip}.log', 'w') as log_depois:
  91.                             log_depois.write(resultados[1])  # Supondo que o resultado do segundo comando seja o log depois
  92.  
  93.                     close(client)
  94.  
  95.                 except RuntimeError as e:
  96.                     roteadores_nao_acessados += 1
  97.                     relatorio.write(f'{ip} - LOG NOK - {e}\n')
  98.  
  99.         relatorio.write(f'\nNúmero de roteadores: {total_roteadores}\n')
  100.         relatorio.write(f'Roteadores acessados: {roteadores_acessados}\n')
  101.         relatorio.write(f'Roteadores não acessados: {roteadores_nao_acessados}\n')
  102.  
  103.     except Exception as e:
  104.         print(f"Erro: {e}")
  105.  
  106. if __name__ == "__main__":
  107.     main()
  108.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement