Como automatizar a conexão com vários dispositivos de rede, executando um comando e salvando a saída em um arquivo?

2

Eu tenho que executar um comando em cerca de 1000 dispositivos de rede e salvar a saída em um arquivo. Em um arquivo, tenho uma lista de todos os nomes de dispositivos de rede que precisam ser conectados ao SSH. Eu então tenho que executar um comando, digamos show interface description por exemplo, depois salve a saída em um arquivo. Todos os dispositivos são configurados com um nome de usuário e senha genéricos iguais em todos os dispositivos. Então, basicamente, eu preciso de um script para executar esses comandos em todos os dispositivos no arquivo de lista:

ssh user@device1
password: passwordhere
user@device1> show interface description
user@device1> exit

Em seguida, salve toda a saída em um arquivo. Estou usando o Red Hat Enterprise Server.

    
por SJB 24.05.2013 / 12:13

3 respostas

3

A principal coisa que você precisa para automatizar é a digitação da senha ssh . Há duas maneiras que eu sei que você pode tentar, configurar% sem senha ssh ou instalar sshpass :

  • Use sshpass para inserir a senha. Se você tiver os repositórios do DAG configurados, poderá instalar com o yum:

    yum install sshpass
    

    Se não, você pode baixar o RPM diretamente ou adicionar o repositório e então instale:

    1. Faça o download do pacote rpmforge-release. Escolha um dos dois links abaixo, selecionando para corresponder à arquitetura do seu host. Se você não tiver certeza de qual usar, verifique sua arquitetura com o comando uname -i

    2. Instale a chave GPG do DAG

      rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt
      
    3. Instale o pacote baixado

      rpm -i rpmforge-release-0.5.2-2.el6.rf.*.rpm
      
    4. Instale sshpass

      yum install sshpass
      

    Depois de ter instalado o sshpass , dado um arquivo chamado, por exemplo, ips.txt que contém os nomes ou IPs dos seus dispositivos, um por linha, você pode automatizar o processo da seguinte forma:

    while read ip; do 
      echo -n "$ip: " >> local_file.log;
      sshpass -p 'your password' ssh user@$ip remote_command >> local_file.log
    done < ips.txt
    
  • Como alternativa, você pode configurar ssh sem senha para cada um dos dispositivos e ignorar a instalação de sshpass :

    1. Configurar senha sem% ssh

      ssh-keygen -t rsa
      while read ip; do 
        ssh-copy-id -i ~/.ssh/id_rsa.pub user@$ip; 
      done < ips.txt
      
    2. Execute seus trabalhos

      while read ip; do 
        echo -n "$ip: " >> local_file.log;
        ssh user@$ip remote_command >>local_file.log
      done < ips.txt
      
por 24.05.2013 / 12:55
3

Alguns anos atrás, tive um problema semelhante de automatizar conexões remotas. Eu usei o expect , que é uma ferramenta muito flexível, mas às vezes um pouco sutil de usar. Ele fará qualquer coisa que um usuário possa fazer digitando na linha de comando, mas todas as reações possíveis do (s) sistema (s) devem ser reconhecidas pelo script expect (daí o nome da ferramenta: não gosta do inesperado).
No entanto, pode ser um martelo para o seu problema, e a solução proposta pela @erdon pode ser mais leve e apropriada.

    
por 24.05.2013 / 13:54
0

Você pode usar o script Python e Paramiko para isso. Desculpe pela ficha, mas eu já tenho um script para isso postado aqui " link "onde o script está localizado em" link "

Este script "netscript.py" tem estas opções:

netscript.py -t <target> -u <username> -p <password> -i <command_file> -v
- the target is the IP address/hostname
- username/password should have allowed privilege to run commands
- command_file is a text file where the commands are listed
- v for verbose wherein you can pipe this to a file

Basta criar um script que faça o loop desse script python ao conectar-se a cada dispositivo e executar o mesmo conjunto de comandos e canalizar cada saída para um arquivo.

Espero que isso ajude.

    
por 17.05.2015 / 07:33