Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python3
- # -*- coding: utf-8 -*-
- # Refeito sem classe..
- from paramiko import SSHClient, AutoAddPolicy, ProxyCommand
- from json import load
- def load_credentials(client, jump_host, jump_username, jump_password):
- if jump_host:
- client = SSHClient()
- client.set_missing_host_key_policy(AutoAddPolicy())
- client.connect(
- jump_host,
- username=jump_username,
- password=jump_password,
- )
- def connect(client, host, username, password, jump_host=None, jump_username=None, jump_password=None):
- try:
- if not client:
- client = SSHClient()
- client.set_missing_host_key_policy(AutoAddPolicy())
- if jump_host:
- proxy_cmd = ProxyCommand(f"ssh -q -W %h:%p {jump_host}")
- client.connect(
- host,
- username=username,
- password=password,
- sock=proxy_cmd,
- )
- else:
- client.connect(
- host,
- username=username,
- password=password,
- )
- except Exception as e:
- raise RuntimeError(f"Erro ao conectar: {e}")
- def execute_command(client, command):
- try:
- _, stdout, _ = client.exec_command(command)
- return stdout.read().decode('utf-8')
- except Exception as e:
- raise RuntimeError(f"Erro ao executar comando: {e}")
- def close(client):
- if client:
- client.close()
- def ler_ips_do_arquivo(nome_arquivo):
- with open(nome_arquivo, 'r') as file:
- return [line.strip() for line in file.readlines()]
- def main():
- try:
- # Substitua pelos dados do seu servidor intermediário (jump server)
- jump_host = 'jump_server_ip' # IP do servidor intermediário
- jump_username = 'user1' # Nome de usuário do servidor intermediário
- jump_password = 'passw1' # Senha do servidor intermediário
- arquivo_ips = 'ips.txt' # Substitua pelo nome do seu arquivo de IPs
- arquivo_comandos = 'comandos.txt' # Substitua pelo nome do seu arquivo de comandos
- client = None
- ips = ler_ips_do_arquivo(arquivo_ips)
- comandos = [line.strip() for line in open(arquivo_comandos, 'r').readlines()]
- total_roteadores = len(ips)
- roteadores_acessados = 0
- roteadores_nao_acessados = 0
- with open('relatorio.txt', 'w') as relatorio:
- for ip in ips:
- try:
- # Substitua pelos dados do seu roteador final
- load_credentials(client, jump_host, jump_username, jump_password)
- connect(client, ip, 'user2', 'passw2', jump_host, jump_username, jump_password)
- resultados = [execute_command(client, comando) for comando in comandos]
- if len(resultados) >= 2: # Verificar se há pelo menos dois elementos na lista resultados
- roteadores_acessados += 1
- relatorio.write(f'{ip} - LOG OK\n')
- with open(f'ANTES_{ip}.log', 'w') as log_antes:
- log_antes.write(resultados[0]) # Supondo que o resultado do primeiro comando seja o log antes
- with open(f'DEPOIS_{ip}.log', 'w') as log_depois:
- log_depois.write(resultados[1]) # Supondo que o resultado do segundo comando seja o log depois
- close(client)
- except RuntimeError as e:
- roteadores_nao_acessados += 1
- relatorio.write(f'{ip} - LOG NOK - {e}\n')
- relatorio.write(f'\nNúmero de roteadores: {total_roteadores}\n')
- relatorio.write(f'Roteadores acessados: {roteadores_acessados}\n')
- relatorio.write(f'Roteadores não acessados: {roteadores_nao_acessados}\n')
- except Exception as e:
- print(f"Erro: {e}")
- if __name__ == "__main__":
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement