Script para login em vários servidores e executar comandos e anexar saída em um arquivo [duplicado]

3

Eu tenho a tarefa de fazer login em cerca de 300 dispositivos, executar os seguintes comandos e depois copiar a saída em um arquivo.

Eu posso usar o SSH como um método de login e posso dar um nome de usuário e senha predefinidos.

Quando estivermos no dispositivo, preciso fazer login no modo especialista e fornecer a senha predefinida.

$ expert
>>> provide password 
$ lspci | egrep -i --color 'network|ethernet'

Copie a saída para o arquivo

Eu preparei o seguinte script:

#!/bin/bash   
username=XXXX
passwd=XXX
cd /tmp

for host in 'cat servers.txt'; 
do 
ssh $username@$host $passwd;

expert

echo "### $host ###" >> output.txt

lspci | egrep -i --color 'network|ethernet' >> output.txt

done

Depois de solicitar a senha, segue:

Running commands is not allowed
./fibertest.sh: line 9: expert: command not found 

Parece que não está executando o comando no controle remoto, mas na máquina local.

    
por sonal khandekar 12.11.2014 / 08:48

3 respostas

0

Você pode experimentar pssh (também conhecido como ssh paralelo) , ele executa comando (s) em vários máquinas e busca o resultado / saída em uma pasta local.

    
por 12.11.2014 / 09:44
0

Sugiro que você comece a usar o Expect. A expectativa é que a linguagem baseada em tcl seja criada para esse tipo de propósito - interagir (mas realmente interagir como comandos remotos e análise de saída, etc ...) com sistemas remotos.

Você pode escrever scripts simples e esperar muito. De uma chance. Também existem módulos para Perl e Python, portanto, se você estiver interessado em escrever scripts nesses idiomas, poderá fazê-lo.

Aqui está a lista de alguns tutoriais muito bons em Esperar: link

Estou usando o Expect para gerenciar cerca de 40 servidores, várias tarefas administrativas, coletando saídas de comando em intervalos definidos, etc ...

Por exemplo, é ótimo se você tem máquinas onde você não usa a chave SSH auth e você não quer usar programas como o sshpass, mas você ainda quer poder logar (automaticamente, sem interação humana) através do script . Este é apenas um exemplo, mas a Espera é muito, muito mais poderosa do que isso.

    
por 14.08.2015 / 10:11
0

Para executar os comandos no servidor usando o SSH, você precisa colocar os comandos na mesma linha que o comando SSH.

Exemplo

EDIT: depois de pensar sobre isso eu removi a senha $ no comando ssh, porque o servidor tentará executá-la como o comando. Você é obrigado a configurar chaves ssh ou combinar isso com um script de espera para obter a senha.

ssh $username@$host "expert; echo \"### $host ###\" >> output.txt; lspci | egrep -i --color 'network|ethernet' >> output.txt; scp output.txt $ADMIN_SERVER:$host-output.txt"

cat *-output.txt > output.txt

É uma linha longa, mas tudo o que você precisa fazer é colocar os comandos entre aspas e separá-los com ponto e vírgula, lembre-se de evitar as aspas que usa nos comandos internos. Lembre-se também de que você deseja copiar seus arquivos de saída de volta para o seu servidor de administração / onde quer que você esteja executando o formulário de script e, em seguida, concatene-os todos juntos.

    
por 14.09.2015 / 18:16