TGViewer
Bash Days | Linux | DevOps Bash Days | Linux | DevOps @bashdays · 23.6K subscribers
Post #77 8.7K
Ты всяко слышал или используешь Ansible/Puppet/Chef для размножения своего хозяйства. Молодец! Инфраструктура как код — мастхев, но при условии, что код не превращен в кусок спутавшихся спагетти. Как показывает практика, в 99.9% случаев IaC = IaG (Infrastructure-as-Govno).

Ладно, сегодня разговор не про это, сегодня поговорим про то же самое, но сбоку. Ведь одну задачу можно решать разными способами. И сегодня на повестке у нас с тобой маленький и изящный инструмент под названием Parallel ssh (PSSH).

PSSH = это инструмент для запуска одной команды на нескольких серверах, без применения bash циклов. Для bash скриптов и пайплайнов это прям идеальная штуковина. Ну и конечно же для каких-то разовых работ, к примеру если нужно закинуть один файл на несколько серверов.

После установки pssh, в комплекте ставятся еще такие утилиты: pscp, prsync, pnuke, pslurp. То есть из коробки у тебя еще есть 4 инструмента чтобы параллелить свои джобы под разные задачи.

Установка стандартная: apt/yum/brew install pssh

После установки, можешь посмотреть что прилетело в этом пакете: dpkg -L pssh | grep bin

parallel-nuke, parallel-rsync, parallel-scp, parallel-slurp, parallel-ssh

Для полной автоматизации, тебе нужно прокинуть public ssh ключи. Нужно взять ключ с сервера на котором будет запускаться pssh и положить на сервера где будут выполняться команды.

Генерим ключик: ssh-keygen

Закидываем ключики на хосты с помощью команды, либо переносим ручками:

ssh-copy-id root@10.222.0.2
ssh-copy-id root@10.222.0.3

Если public ключи прописаны корректно, то в дальнейшем при использовании утилит из пакета pssh, не будет запрашиваться пароль. Это нам и нужно, это обычная практика.

Давай теперь рассмотрим как всем этим добром пользоваться.

Для начала тебе нужно создать файл инвентаря, где ты пропишешь все свои сервера на которых нужно что-то делать:

vim ~/.pssh_hosts_1

и добавить в него к примеру такое:

root@10.222.0.2
root@10.222.0.3

Теперь можно запускать!

parallel-ssh -i -h ~/.pssh_hosts_1 uptime

Опа! Работает! Утилитка сходила на 2 моих сервера и притащила аптайм. Как ты заметил я запускаю parallel-ssh а не pssh. Чтобы запускать эти утилиты с коротким именем, нужно создать симлинки или алиасы. Это не критично, больше для удобства. Я голову не грею и запускаю с длинным именем.

У тебя могут быть несколько файлов .pssh_stage/prod/test, допустим для прода, стейджа и тестов, тут сам уже этим наруливаешь и при запуске указываешь какой файл инвентаря использовать через ключ -h. Ну а ключ -i выводит данные на экран.

Давай апдейтним пакеты:

parallel-ssh -h ~/.pssh_hosts_1 -- apt -y update

Флаг разделитель «--» означает, что команда pssh завершена и запущена новая команда. В этом случае разделитель указывает оболочке, что не нужно пытаться анализировать, то что следует после параметров командной строки. Эту тему рассмотрим в отдельном посте.

Остальные утилиты pscp, prsync, pnuke, pslurp, делают то же самое что и их собратья, синтаксис аналогичный. К примеру для копирования файла на несколько серверов делаем так:

parallel-scp -h ~/.pssh_hosts_1 /tmp/bs.txt /tmp

Аналогично поступаем и с другими утилитами из этого пакета:

pnuke = завершить процессы
pslurp = скачать файлы с удаленных хостов
prsync = мощнейшая штука для синка файлов туда-сюда

Да, обрати внимание, что pslurp создаст папки с именем каждого хоста, чтобы туда разложить файлы. На случай если файлы будут иметь одинаковые имена.

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

Конечно Ansible/Puppet/Chef никто не отменял, но с помощью пакета pssh, ты сможешь изобрести что-то своё и главное тебе понятное.

Кстати в природе существует еще pdsh (parallel distributed shell). Но я предпочитаю именно пакет pssh, так как он включает в себя еще 4 нужные мне софтины.

Основное рассмотрели. Похоже пора перечитать книгу «пиши сокращай», но блин из песни слов не выкинешь. Пардон за простыню, но инфа полезная. Хорошего тебе дня!

tags: #utils #linux
—
💩 @bashdays
  • 👍 148
More from @bashdays
  1. Oct 4, 2026Архивирование и хранение. Часть 2/4. Всем привет, с вами снова TagdTagd. Первая часть тут:…
  2. Sep 29, 2026Самый жаркий холивар в команде — это не systemd, а какие заказать роллы на всю команду. Од…
  3. Sep 24, 2026Post #1565
  4. Sep 23, 2026Здрасти приехали, решил я в кой-то веке воспользоваться услугами Codex, создал аккаунт, по…
  5. Sep 22, 2026Всем привет, с вами TagdTagd. Сегодня опять поднимем тему архивов, но немного с другой сто…
  6. Sep 15, 2026Всем привет, с вами TagdTagd. И это вторая часть. Практическая. С первой частью можешь озн…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →