Привет, сегодня хочу описать замечательную утилиту — pdsh. И небольшие хаки в работе с ней.

Данная программа предназначена для выполнения одной или нескольких команд на множестве хостов одновременно.

У неё множество возможностей и даже модулей, собственно распространяться об очевидном не буду, вот несколько полезных ссылок:


https://linux.die.net/man/1/pdsh

Installing pdsh to issue commands to a group of nodes in parallel in CentOS

https://wiki.uiowa.edu/display/hpcadmin/pdsh

Отмечу лишь моменты, которые возможно не слишком очевидны и были полезны мне:

  1. Иногда требуется передать дополнительные аргументы в ssh, например если необходимо использовать нестандартный ключ, это можно сделать вот так:
PDSH_SSH_ARGS_APPEND="-i /custom/path/to/id_rsa" pdsh -w host01.net command

2. pdsh не умеет взаимодействовать с интерактивным вводом ssh, это значит, что если доступ по ключам не настроен, или добавляется новая машина с неизвестным ключем — вы получите ошибку:

pdsh ssh exited with exit code 255

Если проблема только в подтверждении принятии ключа, это можно решить так:

PDSH_SSH_ARGS_APPEND="-i /custom/path/to/id_rsa -o StrictHostKeyChecking=no" pdsh -w host01.net command

3. Есть несколько полезных утилит поставляемых с пакетом pdsh, таких как — pdcp/rpdcp, dshbak.

Например ситуация, когда очень много хостов, и у всех одинаковый вывод, нам же не хочется смотреть на сотни идентичных слайдов, верно? Поэтому можно применить утилиту dshbak, которая умеет форматировать вывод из pdsh, в частности исключая дублирование идентичного stdout и суммируя его в конце, а также это поможет выявить аномалии, если на каком-то хосте, что-то пошло не так. Пример:

PDSH_SSH_ARGS_APPEND="-i /custom/path/to/id_rsa -o StrictHostKeyChecking=no" pdsh -w host01.net command | dshbak -c

Спасибо за внимание 🙂