
Я уже рассказывал в статье Настройка ssh авторизации по ключу о том как заходить на ваши наиболее часто используемые сервера не заморачиваясь вводом пароля. Сегодня речь пойдет о том, как удобно и быстро производить однотипные операции на множестве серверов одновременно.
Итак, представим ситуацию, вы управляете 10 серверами, и на каждом к примеру вам надо установить одинаковый софт. Что первое приходит в голову? Заходить на каждый из серверов и вставлять из буфера обмена команды для установки нужного вам ПО? Но ведь это не Linux Style!
Добрые люди давно придумали средство для распределенного администрирования серверов — dsh (Distributed shell). Другими словами — это программа которая получает на вход команду и распространяет ее по необходимому количеству серверов, выполняет там и выдает вам результат.
Для начала надо определится с какого сервера мы будет давать команды. Этот сервер я буду называть главным. Именно на нем и надо поставить пакет dsh:
sudo apt-get install dsh
Дальше необходимо на каждом из серверов, которым мы будем управлять поставить сертификаты для входа по ssh без пароля (желаетельно сертификаты делять для полтьзователя root, тогда не возникнет проблем, к примеру, при установке ПО или перезапуске Apache):
$ sudo -i
# ssh-keygen -t rsa
# scp id_rsa.pub server1:~/.ssh/authorized_keys
# scp id_rsa.pub server2:~/.ssh/authorized_keys
...
# scp id_rsa.pub server10:~/.ssh/authorized_keys
Теперь с главного должно быть возможным логинится на подчиненные по ssh без пароля. Если не получилось, обратитесь к статье Настройка ssh атворизации по ключу.
Далее необходимо настроить группы серверов.
В файле /etc/dsh/group/all перечисляем все наши сервера:
server1
server2
server3
server4
server5
server6
server7
server8
server9
server10
К примеру сервера 1,2 — сервера баз данных, 3,4 — файловые сервера, а 5-10 — веб ноды. Тогда есть смысл сгрпировать их по предназначению. Для этого создаем файлики:
/etc/dsh/group/db:
server1
server2
/etc/dsh/group/ftp
server3
server4
/etc/dsh/group/web
server5
server6
server7
server8
server9
server10
Когда dsh настроен, приступаем к использованию.
Пробуем выполнить:
dsh -g all uptime
если установка сертификатов прошла успешно, dsh выполнит uptime на всех серверах и выведет вам результат. Если вы увидите запрос на ввод пароля, значит сертификаты не поставились правильно и их желательно поправить.
По умолчанию, dsh выводит просто результат выполнения команды. Очень часто важно видеть с какого-же сервера пришел ответ. Для этого нужен ключ -M, который в начале строки будет отображать имя машины, на которой выполнена команда (имя берется из конфигурационного файла dsh, а не из hostname машины).
# dsh -g web -M "/etc/init.d/apache2 status"
server5: * Apache is running (pid 26433).
server6: * Apache is running (pid 24787).
server7: * Apache is running (pid 21304).
server8: * Apache is running (pid 19856).
server9: * Apache is running (pid 17266).
server10: * Apache is running (pid 26343).
Ну вот и все, это и есть основы dsh. Немножко больше можно научится делать, почитав man.

спасибо. и не знал, что такое есть
Интересная утилитка, надо будет потестить.