Запустите команду SSH на двух хостах, чье имя происходит из другой команды

Поэтому то, что я пытаюсь сделать, должно быть довольно простым, но я не могу понять это. Мне нужно убить определенный процесс на разных блоках, все они имеют определенный диапазон IP, хотя они в конечном итоге будут меняться.

Скажем, например,

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

выход

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

Поэтому я хочу, чтобы SSH и то и другое

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

Как бы я продолжал об этом, не имея SSH в каждом, а затем убивая процесс?

Вы можете использовать цикл 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 \$2}' | xargs kill" done 

Или вы можете использовать одно из многих приложений, уже сделанных для этого. Как clusterssh и тому подобное.

Вы уверены, что все хосты, которые хотите убить процесс, находятся в кеш-файле arp?

Предполагая, что IP-адреса смежны, вам может быть лучше просто выполнить итерацию через 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