Назад | Перейти на главную страницу

лучший способ просмотреть список серверов

Я регулярно делаю то, что просматриваю список серверов, чтобы предпринять какие-то действия. Например:

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

Мне интересно (с точки зрения оболочки), есть ли более простой способ сделать это, чем cat servers.txt

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

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

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

Мой быстрый и грязный ... где в файле 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

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

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

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

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

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

Но есть еще анзибль, что позволяет вам это делать, но также позволяет писать многоразовые «playbooks» в несколько шагов. В дополнение к sshd необходимо установить python, но на практике мне никогда не приходилось устанавливать его отдельно, он всегда был доступен.

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

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

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

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

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

$ mussh -H host_list.txt -C command_list.txt

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

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

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


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

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

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

например

parallel-ssh -h myhosts.txt "echo 'hello world'"