Выполнение команд на нескольких машинах (ssh)

 

Если вы являетесь администратором достаточно большого количества unix-машин, то наверняка вам приходилось сталкиваться с необходимостью выполнить пару команд на всех ваших машинах. Для упрощения этого есть несколько методов.

Первый - самый простой и примитивный. Он использует только bash, и не требует установки дополнительного софта.
Предположим, что у нас есть машины gmos-1, gmos-2, gmos-3 и т.д. и мы хотим выполнить emerge --info на них всех. Вот что мы можем сделать:

for i in `seq 10`; do ssh gmos-$i "emerge --info"; done

Понятное дело, это не очень удобно и не всегда пригодно.

Другое решение - использовать Cluster SSH.
Установка проста:

emerge -av clusterssh

Для работы Cluster SSH требуется X11. Cluster SSH работает таким образом: он открывает окно xterm для каждого хоста. Кроме того, он открывает небольшое окно, куда можно вводить команды, которые должны попадать во все окна xterm.

cssh gmos-{1,2,3,4,5,6,7,8,9}

Если у вас не используется publickey авторизация, не беспокойтесь: вы можете ввести пароль в командное окно (если он одинаковый на всех машинах) или переключаясь по окнам xterm ввести его по отдельности для каждой машины.

Еще одна альтернатива - Tentakel. Tentakel используется более статичным образом: пользователь модифицирует конфигурационный файл, а затем может указать Tentakel на какую группу хостов он хочет залогиниться.

Установка проходит как обычно:

emerge -av tentakel

Далее создадим конфигурационный файл:

> /etc/tentakel.conf
echo "set method=\"ssh\"" >> /etc/tentakel.conf
echo 'group mynet (user="root")' >> /etc/tentakel.conf
for i in `seq 10`; do echo -e "\t+gmos-$i"; done >> /etc/tentakel.conf

Может оказаться удобнее отредактировать пример конфигурационного файла, поставляющегося с Tentakel:

cp /usr/share/doc/tentakel/tentakel.conf.example /etc/tentakel.conf</span>
vi /etc/tentakel.conf

После того как вы закончите конфигурацию, можно запустить Tentakel:

tentakel -g mynet

Эта команда запустит интерактивный интерфейс Tentakel. Для того чтобы запускать команды на хостах используйте функицю exec:

exec emerge --info

Узнать о других командах можно с помощью команды help.

Кроме того, вы можете запускать Tentakel в неинтерактивной форме:

tentakel -g ten_gentoos "emerge --info"

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

// Эта заметка является переводом части Gentoo Monthly Newsletter за сентябрь 2008.