лучший способ циклично выполниться через список серверов

Я регулярно делаю вещи, где я циклично выполняюсь через список серверов для принятия некоторых мер. Например:

for s in `cat servers.txt` ; do
    echo; echo $s
    ssh $s 'do something'
done

Я задаюсь вопросом (с точки зрения оболочки), если существует более легкий способ сделать это, чем cat servers.txt

Да я знаю об инструментах как mcollective, capistrano, и т.д. - я часто делаю это для согласовывания mcollective проблем :-)

5
задан 16 July 2014 в 15:27
7 ответов

Мой быстрый и грязный... где servers.txt имеет ряд хостов или IP, однострочный.

#!/bin/bash

SERVER_LIST=/path/to/servers.txt

while read REMOTE_SERVER
do
        ssh $REMOTE_SERVER "do_something_cool"
done < $SERVER_LIST
4
ответ дан 3 December 2019 в 00:53

Я использую ClusterSSH .
. Она открывает множество маленьких оболочек, и вы можете набирать их все в одно и то же время. Очень удобно, когда вы хотите выполнить одну и ту же команду на многих серверах, но все равно видите результат.
Я использую его вот так: clusterssh $(~/get-servers.sh), но очевидно, что вы можете сделать что-то вроде clusterssh $(cat servers.txt)
Результат выглядит следующим образом:

enter image description here

Он также доступен в виде пакета Debian.

5
ответ дан 3 December 2019 в 00:53

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

clusterssh, parallel ssh и dancer shell являются небольшими простыми улучшениями по сравнению с shell'ом для цикла. Им не нужно больше инфраструктуры.

Но есть также ansible, который позволяет не только сделать это, но и написать многократно используемые "плейбуки" с несколькими шагами. В дополнение к sshd нужен python, но на практике мне никогда не приходилось устанавливать его отдельно, он всегда был доступен.

Ansible - единственная система управления конфигурацией, которую я попробовал, и которая также хорошо работает как инструмент для развертывания и оркестровки (для этого марионетке нужен mcollective и, возможно, capistrano/fabric, ...)

(Да, Puppet и Chef, а все остальное можно запускать без центрального сервера), но для управления вам нужно установить пакеты на хосты, которые не нужны)

.
3
ответ дан 3 December 2019 в 00:53

Для выполнения простой задачи в широком диапазоне серверов без использования какого-либо инструмента, предназначенного для этой цели, независимо от того, требуется ли для них предыдущая инфраструктура или нет, можно использовать простой скрипт оболочки под названием mussh, распространяемый в виде пакета во многих дистрибутивах.

Вы можете вызвать его со списком хостов, списком команд, хранить обе вещи в файлах, и еще большим количеством опций, таких как интеграция ssh-agent, поддержка прокси, ... Проверьте manpage на все подробности.

Пример может быть таким же простым, как:

$ mussh -H host_list.txt -C command_list.txt
4
ответ дан 3 December 2019 в 00:53

Рассматривали ли вы возможность использования parallel-ssh? https://code.google.com/p/parallel-ssh/

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

.
2
ответ дан 3 December 2019 в 00:53

Вот как использовать xargs для распараллеливания этих ssh сессий:

cat servers.txt | xargs -IH -n1 -P0 ssh H 'some command to run'

Вы также можете добавить опции -n или -f для ssh, чтобы перенаправить stdin из /dev/null или поместить сессию в фоновом режиме. Если вам нужно ввести пароль для каждого хоста, то это вам не очень поможет, но если вы используете ключи ssh, то это работает очень хорошо.

.
2
ответ дан 3 December 2019 в 00:53

Не ответил. Хотя на самом деле не совсем понятно, о чем вы просите.


Существует проект под названием parallel SSH, который предоставляет параллельные версии ssh, scp и rsync.

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

Это здорово, если у вас есть длинный набор ssh команд для выполнения, так как он будет делать их все параллельно, предлагая потенциально большое ускорение.

например

parallel-ssh -h myhosts.txt "echo 'hello world'"
0
ответ дан 3 December 2019 в 00:53

Теги

Похожие вопросы