Обложка канала

ServerAdmin.ru

12437 @srv_admin

Авторская информация о системном администрировании.

ServerAdmin.ru

4 года назад
Открыть в
​​Если вам необходимо выполнить одновременно на нескольких хостах какую-то команду по SSH, можно воспользоваться очень удобным и простым инструментом для этого - orgalorg. Сразу скажу, что способов решения данной задачи очень много, начиная от простого однострочника на bash и заканчивая ClusterSSH или Ansible. Покажу в конце примеры. Я пишу именно про orgalorg, потому что там это реализовано максимально просто и быстро. Для тех, кому нет нужды разбираться в настройках, разных подходах и тем более изучать ansible. Основные возможности orgalorg: ◽ параллельное выполнение ssh команд на удалённых хостах ◽ одновременная загрузка файла на несколько удалённых хостов ◽ аутентификация как по ключам, так и интерактивно по паролю ◽ возможность выбрать файл как источник команд для удалённых хостов Orgalorg написан на go и может быть установлен с его помощью: # apt install golang # go get github.com/reconquest/orgalorg В директории ~/go/bin будет собранный бинарник orgalorg. Одновременное выполнение команды uptime на двух хостах с аутентификацией через пароль: # ./orgalorg -p -o 10.20.1.44 -o 10.20.1.45 -C uptime Password:  10.20.1.45 12:46:49 up 18 min, 2 users, load average: 0.02, 0.03, 0.06 10.20.1.44 12:46:49 up 18 min, 2 users, load average: 0.02, 0.03, 0.06 С помощью orgalorg можно легко добавить свой публичный ключ на эти хосты: # ./orgalorg -p -o 10.20.1.44 -o 10.20.1.45 \ -i ~/.ssh/id_rsa.pub -C tee -a ~/.ssh/authorized_keys После этого можно выполнять команды напрямую, минуя ключ -p и ввод пароля. Смотрим информацию о шлюзе по умолчанию на группе хостов: # ./orgalorg -o 10.20.1.43 -o 10.20.1.44 -o 10.20.1.45 \ -i ~/.ssh/id_rsa.pub -C ip r | grep default 10.20.1.45 default via 10.20.1.1 dev eth0 10.20.1.43 default via 10.20.1.1 dev eth0  10.20.1.44 default via 10.20.1.1 dev eth0 Загрузим файл ~/file.txt с текущего хоста на два удалённых в директорию /tmp: # ./orgalorg -o 10.20.1.44 -o 10.20.1.45 \ -i ~/.ssh/id_rsa.pub -er /tmp -U ~/file.txt Orgalorg поддерживает много функций. Например, открытие интерактивного сеанса с удалённым хостом или отображение в режиме реального времени изменение одного и того же лог файла с разных хостов. Если у вас рабочая система на Linux, то похожий функционал можно получить с помощью ClusterSSH. При выполнении команд на разных хостах, будут автоматом открываться терминалы с автоматическим подключением к ним. Это удобно в тестовой среде. Позволяет выполнить какую-то команду и тут же в терминале наблюдать за выполнением, а потом продолжить работу в этом терминале. Всё описанное выше можно выполнить с помощью Ansible. Вот пример выполнения команды на нескольких хостах с интерактивной аутентификацией по паролю: # ansible -k -u root -a "uptime" -i hosts.txt servers Файл host.txt с инвентарём должен быть следующего содержания: [servers] 10.20.1.44 10.20.1.45 А вот эта же задача решается с помощью однострочника на bash: # hosts=('10.20.1.44' '10.20.1.45'); \ for HOST in "${hosts[@]}"; \ do ssh -f root@$HOST "uptime"; done #bash