Executa um comando SSH em dois hosts cujo nome vem de outro comando

0

Então, o que estou tentando fazer deve ser bem simples, mas não consigo entender. Eu preciso matar um determinado processo em caixas diferentes, todos eles têm um intervalo de IP definido, embora eles acabem por mudar.

Digamos, por exemplo,

arp |sort |awk '{print $1}'|grep 10.20.30.18 # IP's range from 180 to 189 so this does the trick

saída é

xxx.xxx.xxx.180
xxx.xxx.xxx.181

Então eu quero SSH em ambos e fazer

ps -ef | grep X11 | grep -v grep | awk '{print $2}' | xargs kill

Como eu poderia falar sobre isso sem ter que usar o SSH em cada um deles e depois matar o processo?

    
por Gilles 20.11.2013 / 17:00

2 respostas

2

Você pode usar um loop for :

HOSTS='server1.example.com server2.example.com server3.example.com'

for server in $HOSTS
do
   ssh $server "ps -ef | grep X11 | grep -v grep | awk '{print \}' | xargs kill"
done

Ou você pode usar um dos muitos aplicativos já criados para isso. Como clusterssh e afins.

    
por 20.11.2013 / 17:06
0

Tem certeza de que todos os hosts nos quais você quer matar o processo estão em seu cache de arp?

Assumindo que os IPs são contíguos, você pode ser melhor se simplesmente iterar pelos ips:

for i in {180..189}
do
 ssh -l username 10.20.30.$[i} "ps -ef | grep X11 | grep -v grep | awk '{print $2}' | xargs kill"
done
    
por 20.11.2013 / 17:21

Tags