DSH — запуск команды Linux на нескольких хостах одновременно
Некоторое время назад мы написали руководство, в котором описывалось, как запустить одну команду на нескольких удаленных системах одновременно, используя PSSH в Unix-подобных системах. Сегодня мы собираемся обсудить аналогичный инструмент под названием DSH. Это означает Dраспределенную оболочку (или оболочку танцора). Используя DSH, мы можем запускать команду Linux на нескольких хостах одновременно. Это бесплатная утилита с открытым исходным кодом, написанная на языке программирования C.
Установить ДШ
В Arch Linux и производных:
DSH доступен в AUR, поэтому его можно установить с помощью помощников AUR, например Yay, как показано ниже.
yay -S dsh
В Debian, Ubuntu:
DSH доступен в официальных репозиториях Debian, Ubuntu и других систем на базе DEB, таких как Linux Mint, Elementary OS. Чтобы установить DSH в любой системе на базе DEB, запустите:
sudo apt-get install dsh
Для других дистрибутивов Linux DSH можно скомпилировать и установить вручную, как описано ниже.
Для работы DSH требуется libdshconfig. Вы можете скачать последнюю версию libdshconfig и dsh по этой ссылке.
После загрузки перейдите в каталог, в который вы загрузили оба пакета.
Сначала скомпилируйте и установите libdshconfig с помощью команд:
tar xfz libdshconfig*.tar.gz
cd libdshconfig-*
./configure ; make
sudo make install
Затем скомпилируйте и установите dsh.
tar xfz dsh*.tar.gz
cd dsh-*
./configure ; make
sudo make install
Настроить ДШ
Мы установили dsh. Давайте теперь настроим DSH для выполнения команд на нескольких хостах. Для этого сначала отредактируйте файл конфигурации DSH и установите значение удаленной оболочки с rsh на ssh.
В Arch Linux и его производных файлом конфигурации по умолчанию является /etc/kgname/dsh.conf.
Отредактируйте этот файл:
sudo vi /etc/kgname/dsh.conf
Измените значение remoteshell с rsh на ssh.
#default configuration file for dsh.
# suppled as part of dancer's shell
verbose = 0
remoteshell =ssh
showmachinenames = 0
waitshell=1 # whether to wait for execution
#remoteshellopt=...
default config file end.
В системах на базе DEB:
sudo vi /etc/dsh/dsh.conf
remoteshell =ssh
В системах на базе RPM:
sudo vi /usr/local/etc/dsh.conf
remoteshell =ssh
Далее нам нужно добавить удаленные хосты, на которых мы хотим выполнять команды.
Для этого создайте/отредактируйте файл machines.list и добавьте удаленные хосты.
В Arch Linux и производных:
sudo vi /etc/kgname/machines.list
Добавьте IP-адрес или имя хоста удаленного хоста один за другим, как показано ниже.
192.168.43.100
192.168.43.101
В системах на базе DEB:
$ sudo vi /etc/dsh/machines.list
192.168.43.100
192.168.43.101
В системах на базе RPM:
$ sudo vi /usr/local/etc/machines.list
192.168.43.100
192.168.43.101
Вы можете добавить любое количество удаленных хостов в файл machines.list.
Запустите команду Linux на нескольких хостах одновременно с помощью DSH
После того как вы добавили все удаленные хосты и создали общего пользователя во всех ваших удаленных системах, вы можете выполнить команду Linux на всех удаленных хостах одновременно. Скажем, например, следующая команда выполнит команду uname -r на всех удаленных хостах одновременно.
dsh -a -c uname -r
Он попросит вас ввести имя пользователя и пароль соответствующего удаленного хоста. Если вы не хотите вводить учетные данные пользователя каждый раз при запуске этой команды, просто настройте SSH-вход без пароля.
Пример вывода:
3.10.0-514.16.1.el7.x86_64
4.4.0-34-generic
Как вы видите в приведенном выше выводе, утилита dsh отображает версию ядра двух моих удаленных хостов.
Более подробную информацию можно найти на странице руководства.
man dsh
Рекомендуем прочитать:
- Выполнение команд в удаленных системах Linux через SSH
Ресурс:
- Сайт DSH