Autor Tópico: [Resolvido] - Aplicativo para correr comandos via ssh para multiplas maquinas  (Lida 9678 vezes)

Offline slkslk

  • Usuário Ubuntu
  • *
  • Mensagens: 344
    • Ver perfil
Precisava de um aplicativo (ou script) que permita correr comandos via ssh em várias máquinas, simultaneamente ou sequencialmente, sem ter de fazer "ssh x.x.x.x -l root, e passwd" em todas elas. Todas as máquinas têm os mesmos users e passwds. Se me permitisse detectar quais os ip's ligados dentro dum segmento (via ping, por ex.) também seria excelente. Alguém conhece algo que me possa fazer este trabalhinho?

Cumps
« Última modificação: 03 de Julho de 2009, 08:13 por slkslk »
“Carpe diem, quam minimum credula postero.”
(Aproveite o dia, acredite o mínimo possível no amanhã), Horácio, Odes I,11,8

Offline gwarah

  • Usuário Ubuntu
  • *
  • Mensagens: 77
    • Ver perfil
Re: Aplicativo para correr comandos via ssh para multiplas maquinas
« Resposta #1 Online: 01 de Julho de 2009, 11:42 »
em todas as máquinas tu deves editar o arquivo /etc/hosts.equiv ou ~/.rhosts e adicionar os ips das máquinas que irão conversar (máquinas confiáveis).

dá uma olhada no comando "man hosts.equiv" ou http://www.mkssoftware.com/docs/man4/rhosts.4.asp

para ver a sintaxe do arquivo

Com estes arquivos editados, vamos ao script:

Vamos supor que existam 3 máquinas

1) ip=192.168.2.101
2) ip=192.168.2.102
3) ip=192.168.2.103

e tu vais rodar na máquina 1:

-----------------
#/bin/bash

export maquinas='192.168.2.102 192.168.2.103'
for ip in `echo ${maquinas}`
do
     # roda o comando ls nas estações
     rsh username@${ip} ls
done

# end

------------------

Tu podes substituir ls por outro comando ou script.
dá uma olhada em man rsh ou http://www.mkssoftware.com/docs/man1/rsh.1.asp para detalhes do rsh.

Acho que algo por aí...

boa sorte.
"Cantar a beleza de ser um eterno aprendiz" (Gonzaguinha)

Offline slkslk

  • Usuário Ubuntu
  • *
  • Mensagens: 344
    • Ver perfil
Re: Aplicativo para correr comandos via ssh para multiplas maquinas
« Resposta #2 Online: 02 de Julho de 2009, 05:25 »
Acho que é mesmo o que eu andava à procura! Obrigado!  ;D Vou experimentar e depois posto o resultado.

Um abraço
“Carpe diem, quam minimum credula postero.”
(Aproveite o dia, acredite o mínimo possível no amanhã), Horácio, Odes I,11,8

Offline slkslk

  • Usuário Ubuntu
  • *
  • Mensagens: 344
    • Ver perfil
Re: Aplicativo para correr comandos via ssh para multiplas maquinas
« Resposta #3 Online: 03 de Julho de 2009, 08:12 »
Bem, foi uma epopeia conseguir resolver o meu problema... gwarah, obrigado pela sua ajuda mas depois de horas a tentar e não me pergunte porquê, não me parava de pedir a password, mesmo com o hosts.equiv preenchido e nunca consegui pôr o rsh a funcionar como suposto. No entanto o rsh levou-me a vários tópicos, nomeadamente este endereço

http://lists.freebsd.org/pipermail/freebsd-questions/2005-April/085390.html

onde está um script fantástico que permite sondar os ip's conectados à rede. Como trabalho por DHCP, foi logo uma pequena pérola que desejava à muito. Com isto, e instalando o openssh em todos com o mesmo sistema que tinha indicado para o rsh, consigo manualmente abrir várias consolas sem ter de pôr a password e executar o comando

/etc/init.d/firestarter stop && apt-get update && apt-get upgrade && /etc/init.d/firestarter start

o que me permite desactivar a firewall e dar assim acesso das máquinas à internet, fazer as actualizações e reactivar a firewall. Durante a minha luta encontrei um software que me pareceu soberbo, o tentakel

http://tentakel.biskalar.de/

e onde existe uma lista de uma boa dúzia de programas com vista a executar exactamente os tais comandos em multiplas máquinas. Contudo não o consegui pôr a funcionar, mas de qualquer modo prefiro esta abordagem mais manual da questão pois consigo executar outro tipo de comandos mais específicos a cada máquina para efectuar as minhas manutenções de rotina.

Cumps
“Carpe diem, quam minimum credula postero.”
(Aproveite o dia, acredite o mínimo possível no amanhã), Horácio, Odes I,11,8

Offline gwarah

  • Usuário Ubuntu
  • *
  • Mensagens: 77
    • Ver perfil
Re: [Resolvido] - Aplicativo para correr comandos via ssh para multiplas maquinas
« Resposta #4 Online: 03 de Julho de 2009, 11:01 »
legal estas dicas slkslk. O script q vc falou dá um broadcast na rede e descobre os ips locais.

teve 2 coisas que esqueci de te dizer: uma que tu podia bypassar a senha dispensando assim a necessidade da passwd, outra é que os comandos passados são das máquinas remotas e não locais.

O script fica melhor assim:

-----------------
#/bin/bash

export senha
export maquinas='192.168.2.102 192.168.2.103'
export file_result="result.txt"

echo "incio...." > $file_result.txt
for ip in `echo ${maquinas}`
do
     # roda o comando ls nas estações
     echo acessando ${ip}
     rsh username@${ip} <<!  >> $file_result.txt
# poste aqui o que vc quer rodar nas máquinas remotas
echo "hostname: " `hostname`
echo "diretórios: "
ls
!
    # separador
    echo "=================" >> $file_result.txt
done

echo resultados
more $file_result.txt

# end

------------------

pode-se melhora-lo colocando um broadcast com o exemplo q vc passou e bypassar senha.

abs,
"Cantar a beleza de ser um eterno aprendiz" (Gonzaguinha)

Offline slkslk

  • Usuário Ubuntu
  • *
  • Mensagens: 344
    • Ver perfil
Re: [Resolvido] - Aplicativo para correr comandos via ssh para multiplas maquinas
« Resposta #5 Online: 08 de Julho de 2009, 07:00 »
Bem, depois de muito tentar, ficou resolvido assim:

Primeiro corro o script numa consola para detectar ip's conectados.


#!/bin/sh
IP=190
while [ $IP -le 253 ]
do
echo -e ".\c"
if ( arping -c 1 -q 192.168.0.$IP ) then
echo -e "\n192.168.0.$IP Online"
fi
IP=$(( $IP +1 ))
done
echo -e "\n"


Noutra consola ao lado corro o seguinte script (tem de se instalar o sshpass):


#!/bin/sh
echo "Qual o ip a actualizar?"
read line
ip=$line
sshpass -p 'aminhapasswd' ssh root@$ip '/etc/init.d/firestarter stop && apt-get update && apt-get upgrade && /etc/init.d/firestarter start && exit'
echo "Actualização Concluída no ip ... $ip ..."


E corre todos os comandos que quiser na máquina remota. No caso para a firewall, arranca os updates, arranca novamente a firewall (bloqueando o acesso à net) e fecha a consola remota.

Seria excelente ligar as duas rotinas para a segunda apanhar os ip's da primeira, e garantir os timeouts com um máx de 15 seg, pois nem todos os ip's são máquinas linux....

Se alguém tiver ideias...  :)
« Última modificação: 08 de Julho de 2009, 07:03 por slkslk »
“Carpe diem, quam minimum credula postero.”
(Aproveite o dia, acredite o mínimo possível no amanhã), Horácio, Odes I,11,8

Offline gwarah

  • Usuário Ubuntu
  • *
  • Mensagens: 77
    • Ver perfil
Re: [Resolvido] - Aplicativo para correr comandos via ssh para multiplas maquinas
« Resposta #6 Online: 14 de Julho de 2009, 05:40 »
Vc pode fazer tudo em um unico console. Algo assim

#!/bin/sh
IP=190
while [ $IP -le 253 ]
do
   echo -e ".\c"
   if ( arping -c 1 -q 192.168.0.$IP ) then
     echo -e "\n192.168.0.$IP Online"
     echo "atualiza esta máquina (s/n)?"
     read resposta
     if [ "${resposta}" = "S" ] then
       sshpass -p 'aminhapasswd' ssh root@$IP '/etc/init.d/firestarter stop && apt-get update && apt-get upgrade && /etc/init.d/firestarter start && exit'
       echo "Actualização Concluída no ip ... $IP ..."
       echo "==========================="
     fi
   fi
   IP=$(( $IP +1 ))
done
echo -e "\n"

[]s
"Cantar a beleza de ser um eterno aprendiz" (Gonzaguinha)

Offline slkslk

  • Usuário Ubuntu
  • *
  • Mensagens: 344
    • Ver perfil
Re: [Resolvido] - Aplicativo para correr comandos via ssh para multiplas maquinas
« Resposta #7 Online: 14 de Julho de 2009, 06:42 »
Ficou perfeito!!!  ;D Obrigado gwarah, era mesmo o que pretendia!
“Carpe diem, quam minimum credula postero.”
(Aproveite o dia, acredite o mínimo possível no amanhã), Horácio, Odes I,11,8