Як запускати команди на декількох хостах Linux за допомогою PSSH

Я впевнений, ви чули, що всі круті діти сьогодні граються в автоматизацію оркестровки. Але чи знаєте ви чому? Ну, по-перше, ресурси, що споживаються сучасними навантаженнями на мікросервіси, стають набагато складнішими та розгортаються в набагато більшій кількості випадків, ніж будь-коли раніше. А по-друге, все більше і більше цих ресурсів є віртуальними, а не фізичними - так багато з них існуватимуть лише протягом хвилин або навіть секунд.

Все це означає, що навіть якби ви хотіли ввійти в систему на кожному з багатьох серверів, це просто не мало б сенсу. У більшості випадків насправді це навіть неможливо. Натомість у вас буде багато розумних сценаріїв. А інструменти, які ви використовуєте для запуску подібних сценаріїв, зазвичай називаються оркестраторами.

Я впевнений, що ви стикалися з принаймні одним чи двома членами клубу оркестровки. Окрім Ansible, є Terraform, Chef, Puppet та інші. Але є також інструменти нижчого рівня, які працюють як доповнення до основних інструментів Linux, таких як SSH. Хоча, бачачи, як він буде працювати в оригіналі на Windows і, звичайно, macOS, я не впевнений, що цілком коректно називати SSH інструментом "Linux".

Одним з таких доповнень SSH є набір інструментів, який називається pssh - що означає Parallel SSH. Це те, про що ми будемо дізнаватися в цій статті - яка витягнута з мого нового курсу Pluralsight, Оптимізація системи Linux.

Поки що, я збираюся розповісти вам трохи про лабораторію, якою я користуюся, щоб ви могли легше її відтворити та стежити за нею вдома. У мене запущено три контейнери Ubuntu LXD. Базою для всіх наших операцій буде той, що має IP-адресу 10.0.3.140, тоді як два вузлові вузли, які ми будемо віддалено надавати, використовуватимуть 10.0.3.93 та 10.0.3.43.

Все, що ми будемо робити, передбачає, що ми маємо без пароля SSH-доступ із мого базового контейнера до кожного з двох вузлів. Якщо ви не впевнені, як це зробити, ви можете переглянути SSH-модуль мого протоколу Deep Dive: SSH та курс Telnet на Pluralsight. Якщо ви поспішаєте, цей посібник Red Hat доставить вас туди ж.

Установка pssh на Ubuntu простий і швидкий: sudo apt install pssh. На CentOS це не стає важчим.

Я створив простий файл інвентаризації хоста, який називається sshhosts.txt, який містить не більше ніж IP-адреси моїх двох вузлів:

$ less sshhosts.txt 10.0.3.93 10.0.3.43 

Тепер я збираюся запустити команду pssh паралельно-ssh для виконання однієї команди на моїх хостах.

$ parallel-ssh -i -h sshhosts.txt df -ht ext4 

-i говорить програмі, щоб вона працювала як інтерактивна - інакше нам не показали б жодного виводу команди. -h вказує на файл hosts, який я назвав sshhosts.txt. А сама команда буде старою утилітою Unix df. Це поверне список приводів, приєднаних до системи, а також їх точки монтування та інформацію про використання. Тут -h відображатиме місце на диску в зручних для читання одиницях, а t обмежуватиме доступ лише до дисків, відформатованих як ext4.

Чому я дбаю про бізнес ext4? Оскільки Ubuntu використовує менеджер пакунків оснащення, і кожна оснастка створює власний віртуальний пристрій. І що? Ну, я не хочу, щоб мені доводилося прочісувати десяток або близько того віртуальних пристроїв, що звітують про 0 вільного місця, лише щоб дістатися до реальних дисків, що повідомляють про фактичне використання.

$ parallel-ssh -i -h sshhosts.txt df -ht ext4 [1] 22:02:00 [SUCCESS] 10.0.3.43 Filesystem Size Used Avail Use% Mounted on /dev/sda2 457G 131G 304G 30% / [2] 22:02:00 [SUCCESS] 10.0.3.93 Filesystem Size Used Avail Use% Mounted on /dev/sda2 457G 131G 304G 30% / 

І ось вам! Повна інформація про місце на диску про обидва мої вузли. Я впевнений, ви помітили, що інформація ідентична. Це тому, що це обидва контейнери, що працюють на моїй робочій станції, тому, наскільки їм відомо, вони обидва мають повний доступ до мого власного диска.

Для наступного трюку я збиратиму файли / etc / group з кожного мого вузла. Це операція, яка може бути корисною для швидкого контролю стану безпеки ваших вузлів. Ви можете додати сценарій, який аналізує вхідні дані та попереджає вас про наявність аномалій.

Перш ніж почати, я створив каталог, що називається локально-хост-файлами. Тоді я буду використовувати parallel-slurpкоманду - чиє ім’я чудово описує її функцію. Знову -h вказує на файл hosts. Встановлює -Lкаталог хост-файлів як цільове розташування для запису даних, які ми збираємося генерувати, /etc/groupце віддалений файл, який ми хочемо розігнати, і groupце ім’я, яке ми хотіли б присвоїти локально.

mkdir host-files parallel-slurp -h sshhosts.txt -L host-files/ /etc/group group 

Коли це буде зроблено, каталог хост-файлів буде містити підкаталоги, названі за IP-адресою кожного з ваших вузлів. Як бачите, існує файл під назвою "group", який містить дані / etc / group з кожного вузла.

$ tree host-files/ host-files/ ├── 10.0.3.43 │   └── group └── 10.0.3.93 └── group 

Чи додається pssh з якимись іншими ласощами? Так. А біг aproposдає вам цілий список.

$ apropos parallel parallel-nuke (1) - parallel process kill program parallel-rsync (1) - parallel process kill program parallel-scp (1) - parallel process kill program parallel-slurp (1) - parallel process kill program parallel-ssh (1) - parallel ssh program 

Ця стаття заснована на змісті мого курсу Pluralsight "Оптимізація системи Linux". Набагато більше корисності щодо адміністрування у вигляді книг, курсів та статей, доступних на bootstrap-it.com.