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.
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.
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.
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.
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.
Tags shell-script