Advertisement
Rnery

Jump Server Modificado.

Jan 6th, 2024
1,243
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.74 KB | Source Code | 0 0
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3.  
  4. """
  5. ALTERAÇÕES:
  6.  
  7. O script foi alterado pra suportar duas conexões: uma para o servidor intermediário (jump server)
  8. e outra para os roteadores finais
  9.  
  10. Adicionei parâmetros opcionais: jump_host, jump_username, e jump_password à classe SSHManager
  11. Esses parâmetros são usados para a conexão com o servidor intermediário (jump server)
  12. Substitua os valores de exemplo pelos dados reais do seu ambiente.
  13. """
  14.  
  15. from paramiko import SSHClient, AutoAddPolicy, ProxyCommand
  16. from json import load
  17.  
  18. class SSHManager:
  19.     def __init__(self, host, username, password, jump_host=None, jump_username=None, jump_password=None):
  20.         self.host = host
  21.         self.username = username
  22.         self.password = password
  23.         self.jump_host = jump_host
  24.         self.jump_username = jump_username
  25.         self.jump_password = jump_password
  26.         self.client = None
  27.         self.load_credentials()
  28.  
  29.     def load_credentials(self):
  30.         if self.jump_host:
  31.             self.client = SSHClient()
  32.             self.client.set_missing_host_key_policy(AutoAddPolicy())
  33.             self.client.connect(
  34.                 self.jump_host,
  35.                 username=self.jump_username,
  36.                 password=self.jump_password,
  37.             )
  38.  
  39.     def connect(self):
  40.         try:
  41.             if not self.client:
  42.                 self.client = SSHClient()
  43.                 self.client.set_missing_host_key_policy(AutoAddPolicy())
  44.                 if self.jump_host:
  45.                     proxy_cmd = ProxyCommand(f"ssh -q -W %h:%p {self.jump_host}")
  46.                     self.client.connect(
  47.                         self.host,
  48.                         username=self.username,
  49.                         password=self.password,
  50.                         sock=proxy_cmd,
  51.                     )
  52.                 else:
  53.                     self.client.connect(
  54.                         self.host,
  55.                         username=self.username,
  56.                         password=self.password,
  57.                     )
  58.         except Exception as e:
  59.             raise RuntimeError(f"Erro ao conectar: {e}")
  60.  
  61.     def execute_command(self, command):
  62.         try:
  63.             _, stdout, _ = self.client.exec_command(command)
  64.             return stdout.read().decode('utf-8')
  65.         except Exception as e:
  66.             raise RuntimeError(f"Erro ao executar comando: {e}")
  67.  
  68.     def close(self):
  69.         if self.client:
  70.             self.client.close()
  71.  
  72. def ler_ips_do_arquivo(nome_arquivo):
  73.     with open(nome_arquivo, 'r') as file:
  74.         return [line.strip() for line in file.readlines()]
  75.  
  76. def main():
  77.     try:
  78.         jump_host = 'jump_server_ip'
  79.         jump_username = 'user1'
  80.         jump_password = 'passw1'
  81.        
  82.         arquivo_ips = 'ips.txt'  # Substitua pelo nome do seu arquivo de IPs
  83.         arquivo_comandos = 'comandos.txt'  # Substitua pelo nome do seu arquivo de comandos
  84.  
  85.         ips = ler_ips_do_arquivo(arquivo_ips)
  86.         comandos = [line.strip() for line in open(arquivo_comandos, 'r').readlines()]
  87.  
  88.         total_roteadores = len(ips)
  89.         roteadores_acessados = 0
  90.         roteadores_nao_acessados = 0
  91.  
  92.         with open('relatorio.txt', 'w') as relatorio:
  93.             for ip in ips:
  94.                 try:
  95.                     ssh_manager = SSHManager(
  96.                         ip,
  97.                         username='user2',
  98.                         password='passw2',
  99.                         jump_host=jump_host,
  100.                         jump_username=jump_username,
  101.                         jump_password=jump_password
  102.                     )
  103.                     ssh_manager.connect()
  104.  
  105.                     resultados = [ssh_manager.execute_command(comando) for comando in comandos]
  106.  
  107.                     roteadores_acessados += 1
  108.                     relatorio.write(f'{ip} - LOG OK\n')
  109.  
  110.                     with open(f'ANTES_{ip}.log', 'w') as log_antes:
  111.                         log_antes.write(resultados[0])  # Supondo que o resultado do primeiro comando seja o log antes
  112.  
  113.                     with open(f'DEPOIS_{ip}.log', 'w') as log_depois:
  114.                         log_depois.write(resultados[1])  # Supondo que o resultado do segundo comando seja o log depois
  115.  
  116.                     ssh_manager.close()
  117.  
  118.                 except RuntimeError as e:
  119.                     roteadores_nao_acessados += 1
  120.                     relatorio.write(f'{ip} - LOG NOK - {e}\n')
  121.  
  122.         relatorio.write(f'\nNúmero de roteadores: {total_roteadores}\n')
  123.         relatorio.write(f'Roteadores acessados: {roteadores_acessados}\n')
  124.         relatorio.write(f'Roteadores não acessados: {roteadores_nao_acessados}\n')
  125.  
  126.     except Exception as e:
  127.         print(f"Erro: {e}")
  128.  
  129. if __name__ == "__main__":
  130.     main()
  131.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement