Linux эквивалентен удалению PowerShell «один ко многим»

Исходя из администрирования Windows, я хочу углубиться в Linux (Debian). Один из моих горящих вопросов, на которые я не мог ответить на поиск в Интернете (не нашел его): как я могу добиться так называемого удаленного доступа «один ко многим», как в PowerShell для Windows?

Чтобы разбить его на основы, я бы сказал:

Мой взгляд на Linux:

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

Мой опыт работы с Windows:

  1. Я набираю свою команду и с помощью «invoke-command» могу «отправить» это на кучу серверов (возможно, из текстового файла) для одновременного выполнения и вернуть результат (как объект для дальнейшей работы).

  2. Я могу даже установить несколько сеансов, соединение удерживается в фоновом режиме и выборочно отправлять команды на эти сеансы, а также удалять и удалять, как мне нужно.

(Я слышал о шеф-поваре, марионетке и т. Д. Это что-то вроде этого?)

Update: сначала я отправлю cssh или pssh или dsh, а затем посмотрю на Ansible. ( Кроме того, я надеюсь узнать ), как tmux делает это параллельное удаленное, как «terminator». Спасибо @jlliagre за то, что он указал на аналогичный вопрос с большим количеством идей: как мне одновременно запускать одну и ту же команду linux в нескольких вкладках / оболочках?

tmux:: setw synchronize-panes on

Update: для более чем простых команд adhoc (хотя и это возможно) я предлагаю Rex (см. Мой комментарий ниже) – простая настройка и использование (если вы знаете, что perl это еще лучше)

Резюме:

  • Ansible – инструмент для удаления, который является мощной заменой PowerShell
  • RunDeck как графический интерфейс удобен
  • Некоторые люди запускают RunDeck + Ansible вместе

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

Чтобы установить clusterssh в Debian:

 apt-get install clusterssh 

Другой учебник кластершшу :

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

Что касается удаленной инфраструктуры для администрирования нескольких систем, Ansible – очень интересная альтернатива Puppet. Он более тощий, и ему не нужны специальные удаленные агенты, поскольку он работает через SSH (он также был куплен RedHat)

Учебники более сложны, чем варианты командной строки.

Однако для начала использования 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, хотя лицензирование довольно дорого.

В качестве бонуса Ansible также способен администрировать серверы Windows, хотя я никогда не использовал его для этого.

Он также способен администрировать сетевое оборудование (маршрутизаторы, коммутаторы и брандмауэр), что делает его очень интересным решением в качестве решения для под ключ автоматизации.

Как установить Ansible

Опять же, для удаленной структуры, более простой в использовании, но не столь сильной, как Ansible, я рекомендую Rundeck . Это очень мощный графический интерфейс с несколькими пользователями / входами, в котором вы можете автоматизировать большую часть ваших повседневных задач и даже опускать взгляды на сисопов или людей службы поддержки.

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

Изображение rundeck

Как установить RunDeck

Обратите внимание: есть люди, работающие с Ansible + RunDeck в качестве веб-интерфейса; для этого присваиваются не все случаи.

Само собой разумеется, что использование Ansible и / или RunDeck может быть истолковано как форма или часть документации по инфраструктуре, а со временем позволяет тиражировать и улучшать действия / рецепты / Playbooks.

Наконец, вы говорите о центральном сервере команд, я бы создал его только для задачи. На самом деле технический термин – это прыжок. «Ящики перехода» улучшают безопасность, если вы настроили их правильно .

Если вы хотите сделать это в интерактивном режиме, вы можете использовать terminator который позволяет транслировать команду на несколько терминалов.

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

См. Также: Как выполнить одну и ту же команду linux одновременно в нескольких вкладках / оболочках?

Вы также можете использовать 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 

Возможно, вы можете достичь своей цели с помощью простой функции 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 

Если вы используете KDE, вот еще один метод.
– Откройте окно Konsole.
Для каждого сервера, с которым вы хотите общаться:
– открыть вкладку
– установить соединение ssh с сервером;
В меню «Редактировать» выберите «Копировать ввод» на «все вкладки»,

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

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

GNU параллельна

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

Единственная проблема заключается в том, что у нее так много вариантов;) Но в документации также есть много примеров, поэтому вы можете просто взглянуть на них в начале.

Здесь я также хочу упомянуть «Rex»: 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 

Он может быть установлен через репозитории или даже с perls 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