Linux еквівалент видаленню PowerShell "один для багатьох"


38

Починаючи з адміністрування Windows, я хочу копати глибше в Linux (Debian). Одне з моїх гострих питань, на які я не міг відповісти в пошуку в Інтернеті (не знайшов його), це: як я можу досягти так званого видалення "один на багато", як у PowerShell для Windows?

Щоб розбити його до основ, я б сказав:

Мій погляд на Linux:

  • Я можу запустити ssh на сервер і ввести свою команду
  • Я отримую результат. Для середовища з 10 серверів я повинен написати сценарій (perl / python?), Що надсилає команду для кожного з них?

Мій досвід роботи з Windows:

  1. Я набираю свою команду і за допомогою "invoke-command" я можу "надіслати" це на купу серверів (можливо, з текстового файлу), щоб виконати одночасно і отримати результат назад (як об'єкт для подальшої роботи).

  2. Я навіть можу встановити кілька сеансів, з'єднання проходить у фоновому режимі і вибірково надсилає команди на ці сеанси, а також віддалено вмикається і виходить, як мені потрібно.

(Я чув про шеф-кухаря, маріонетку тощо. Це щось подібне?)


Update 2019:
Після багато спроб - я пропоную Rex (див. Цей коментар нижче ) - просте налаштування (ефективно йому просто потрібен ssh, нічого іншого) та використання (якщо ви знаєте лише трохи perl, це ще краще, але це необов'язково)
З Rex (ify ) ви можете виконати команду adhoc і перейти до реального управління конфігурацією (... це означає: це в першу чергу CM, але приємно і для завдань adhoc). Веб-сайт видається застарілим, але наразі (станом на 01/2019) він знаходиться в активному розвитку, і канал IRC також активний.

З новим відкриттям Windows з'являється ще більше можливостей

Ви можете спробувати: rex -u user -p password -H 192.168.1.3 -e 'say run "hostname"'


Паралельно ssh може це зробити: serverfault.com/questions/2533/…
rogerdpack

MobaXTerm підтримує "багатовиконання" протягом багатьох сеансів ssh: mobaxterm.mobatek.net/features.html (прокрутка вниз). Крім того, якщо вашим основним середовищем робочої станції є Windows, це також дуже приємний інструмент для підключення до Linux коробки та багато іншого.
Кев

з tmux: :setw synchronize-panes on( unix.stackexchange.com/a/124800/161003 )
eli

Відповіді:


50

Підсумок

  • Ansible - це інструмент DevOps, який є потужною заміною PowerShell
  • RunDeck як графічний інтерфейс зручний
  • Деякі люди працюють разом RunDeck + Ansible

кластерсш

Для надсилання віддалених команд на декілька серверів, для початківців, я рекомендую clusterssh

Щоб встановити clustersshв Debian:

apt-get install clusterssh

Інший ClusterSSH підручник :

ClusterSSH - це обгортка Tk / Perl навколо стандартних інструментів Linux, таких як XTerm та SSH. Таким чином, він працюватиме на будь-якій ОС, сумісній з POSIX, де існують бібліотеки - я запускаю його на Linux, Solaris і Mac OS X. Для цього потрібні бібліотеки Perl Tk (perl-tk на Debian або Ubuntu) та X11 :: протокол (libx11-протокол-perl на Debian або Ubuntu), на додаток до xterm та OpenSSH.

Відповідальний

Що стосується віддаленої бази для адміністрування декількох систем, то Ansible є дуже цікавою альтернативою Puppet. Він більш худий, і йому не потрібні спеціальні віддалені агенти, оскільки він працює над SSH (його також придбав RedHat)

Playbooks більш досконалі, ніж параметри командного рядка.

Однак, щоб почати використовувати Ansible, вам потрібна проста установка та налаштування текстового файлу списку клієнтів.

Згодом, запустити команду на всіх серверах, це так само просто, як це зробити:

ansible all -m command -a "uptime"

Вихід також дуже добре відформатований і розділений на правило / сервер, і під час його запуску у фоновому режимі можна перенаправити файл і звернутися до нього пізніше.

Ви можете почати з простих правил, і використання Ansible стане цікавішим у міру розвитку Linux, а ваша інфраструктура стане більшою. Як такий, він зробить набагато більше, ніж PowerShell.

Як приклад, дуже проста Playbook для оновлення серверів Linux, про яку я писав:

---
- hosts: all
  become: yes
  gather_facts: False
  tasks:
   - name: updates a server
     apt: update_cache=yes
   - name: upgrade a server
     apt: upgrade=full

У ньому також визначено багато модулів, які дозволяють легко писати вичерпні політики.

Індекс модуля - відповідна документація

Він також має цікавий офіційний центр / "соціальну" мережу сховищ для пошуку вже сформованої відповідальної політики громадою. Відповідна галактика

Ansible також широко використовується, і ви знайдете безліч проектів у github, як цей у мене для налаштування FreeRadius .

Хоча Ansible - це безкоштовна платформа з відкритим кодом, він також має платний інтерфейс веб-панелі, Ansible Tower, хоча ліцензування досить дороге.

Сьогодні, після придбання RedHat, Tower також має версію з відкритим кодом, відому як AWX .

Як бонус, Ansible також може адмініструвати сервери Windows, хоча я ніколи цього не використовував.

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

Як встановити Ansible

Рундек

Знову ж таки, для віддаленої основи, простішої у використанні, але не настільки потужної, як Ansible, я рекомендую Rundeck .

Це дуже потужний графічний інтерфейс для багатьох користувачів / входу, в якому ви можете автоматизувати більшу частину своїх звичайних щоденних завдань і навіть надавати переповнені уявлення для системних служб або служб технічної допомоги.

Під час виконання команд він також дає вікна з результатом, розбитим сервером / завданням.

Він може запускати безліч завдань у фоновому режимі безперешкодно, і дозволяє вам переглядати звіт і виводити згодом.

зображення rundeck

Як встановити RunDeck

Зверніть увагу: є веб-інтерфейс, який працює з Ansible + RunDeck; не всі справи для цього призначаються.

Також само собою зрозуміло, що використання Ansible та / або RunDeck може розглядатися як форма або частина інфраструктурної документації і з часом дозволяє копіювати та вдосконалювати дії / рецепти / Playbooks.

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


1
Ansible - це відмінне рішення порівняно з деяким сценарієм або утилітою, яка просто передає команду на декілька серверів SSH. Ansible робить це (і краще підходить для цієї мети, ніж Ляльковий чи шеф-кухар), але також дає вам можливість досягти своєї мети кращим чином, наприклад, використовуючи вбудований модуль, щоб встановити щось безвідмовно, а не просто надсилати команду встановлення і сподіваючись на краще.
JBentley

24

Якщо ви хочете робити це в інтерактивному режимі, ви можете використовувати, terminatorщо дозволяє транслювати команду на кілька терміналів.

введіть тут опис зображення

Див.: Як запустити одну і ту ж команду Linux на більш ніж одній вкладці / оболонці одночасно?


Дуже дратує, коли ви випадково потрапили на ярлик для цієї функції ... :)
труба

Точно так само tmuxі з Crtl + b:set sync on

12

Ви також можете використовувати pssh(або parallel-ssh), який є клієнтом SSH, який підключається до списку хостів і паралельно виконує команду на всіх хостах:

$ parallel-ssh -i -H "host1 host2" uname -a
[1] 11:37:12 [SUCCESS] host2
Linux host2 3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:16:20 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
[2] 11:37:12 [SUCCESS] host1
Linux host1 3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:16:20 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

11

Можливо, ви можете досягти своєї мети за допомогою простої функції zsh (bash). Скажімо, у вас є сервери l61 l62 l63, і вам часто потрібно запускати команду на них:

function run_on_cluster()
{
    (for srv in l61 l62 l63;
    do
        echo "ssh $srv $1";
    done) | parallel --gnu
}

Отже, у командному рядку:

$ run_on_cluster "uname -r"
2.6.32-279.el6.x86_64
2.6.32-279.el6.x86_64
2.6.32-504.23.4.el6.x86_64

5
Я рекомендую надрукувати ім'я серверів перед їх виведенням. Виконання сценарію паралельно також приносить інші примхи, як, наприклад, хитання результатів сценарію - необхідно вжити додаткових заходів для збереження активності виводу. Виконання кожного завдання на передньому плані також пропонує можливість мінімальної взаємодії вводу.
Rui F Ribeiro

3

Якщо ви використовуєте KDE, ось інший метод.
- Відкрийте вікно Konsole.
Для кожного сервера, з яким потрібно спілкуватися:
- відкрити вкладку
- встановити ssh-з'єднання з сервером
У меню "Редагувати" виберіть "копіювати вхід" на "всі вкладки"

Кожна команда, яку ви введете на цій вкладці, буде скопійована на всі сервери.
Ви можете перейти з вкладки на вкладку, щоб переглянути різні результати.

Примітка: мітки мій меню (у лапках) можуть бути неправильними, оскільки я не використовую англійську версію KDE


1

Паралельно GNU

Це дозволяє прості однолінійки із збереженими налаштуваннями, тому ви можете створити профіль "prod", який буде містити список серверів і загальні комутатори. Потім просто додайте потрібну команду, і ви готові. Також можна копіювати файли в сервер і автоматично видаляє їх наприкінці, і це досить зручно для ще більших сценаріїв. Також це дуже швидко.

Єдина проблема полягає в тому, що у неї так багато варіантів;) Але документація також містить безліч прикладів, тому ви можете просто подивитися на них на початку.


2
Привіт, Ласкаво просимо до Linux та Linux. Хтось уже дав сценарій, використовуючи gnu-паралель, має приклад. Я раджу озирнутися, оцінюються більш детальні відповіді та дадуть більше балів.
Rui F Ribeiro

1
@RuiFRibeiro Вибачте, що я не помітив, ТАК андроїд помилок програми з кодовими кодами, і я не міг побачити більшу частину вмісту (це генерує порожній пробіл). Ви згадали, що гну-паралель - це манірний вихід - він може записати це по порядку, але вам потрібно сказати це зробити :)
alkuzad

Так, я не знайомий з цим, але вже підозрював це, тому згадування відповіді потребує вдосконалення. Спасибі. Ніщо не заважає написати кращу відповідь навколо неї, проте для коментування я рекомендую коментувати цю відповідь.
Rui F Ribeiro

1

Хочу згадати і тут "Рекс": https://www.rexify.org/

Це дивовижний інструмент, який використовує perl + ssh (користувача / пароль або ключ автентифікації), і тому, що perl встановлюється на кожній (?!) Linux-системі, я думаю, що це здається більш природним (він має деякі схожість з Ansible & Co.)

Ви можете запускати adhoc команди відразу на декількох серверах (server1, server2, server ... - після встановлення автентифікації або альтернативно використовувати параметри -p / -u та -s / -S для виконання sudo команди):

$ rex -H "server[1..3]" -e 'say run "uptime"'

або створити файл, де ви вкажете різні "завдання" та зателефонуйте їм звідти

$ rex -f myConfigFile.rex uptime

Він може бути встановлений з допомогою сховищ або навіть з Перлз CPAN (або cpanm Rex) , і це початкова установка легко, см:
- https://www.rexify.org/ або
- https://www.rexify.org/docs/guides/ start_using__r__ex.html та
- http://www.admin-magazine.com/Archive/2014/21/First-steps-in-IT-automation-by-Rex

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.