Автоматически команды выполнения по SSH на многих серверах

Я думаю, что это означает, что файл/каталог расширил атрибуты.

46
07.09.2017, 00:56
15 ответов

Предположение, что Вы не можете получить pssh или установленных других, Вы могли сделать что-то подобное:

tmpdir=${TMPDIR:-/tmp}/pssh.$$
mkdir -p $tmpdir
count=0
while IFS= read -r userhost; do
    ssh -n -o BatchMode=yes ${userhost} 'uname -a' > ${tmpdir}/${userhost} 2>&1 &
    count=`expr $count + 1`
done < userhost.lst
while [ $count -gt 0 ]; do
    wait $pids
    count=`expr $count - 1`
done
echo "Output for hosts are in $tmpdir"
15
27.01.2020, 19:34
  • 1
    , что действительно точно ожидает, делает в этом сценарии?? ty! –  LanceBaynes 19.08.2011, 18:43
  • 2
    , что происходит, если ключ серверов не находится в моем knows_hosts файле? –  LanceBaynes 19.08.2011, 18:50
  • 3
    в фон создают дочерние процессы. Когда дочерний процесс выходит, процесс 'слот' и ресурсы остается в системе до выходов родительского процесса, или родительский процесс 'ожидает' ребенка. Их 'завершенные все еще существующими' процессами называют процессами 'зомби'. Это - хорошее поведение, чтобы вымыться после дочерних процессов и исправить ресурсы. –  Arcege 19.08.2011, 22:38
  • 4
    Если не известный, то это могло бы завинтить его, но можно добавить -o StrictHostKeyChecking=no избегать этого. Однако лучше просканировать все серверы от командной строки сначала, таким образом, ключи хоста могут быть добавлены. –  Arcege 19.08.2011, 22:40
  • 5
    Как я упомянул, после того, как ssh программа помещается в фон и после того, как это выходит, ресурсы все еще сохранены. wait команда исправляет те ресурсы, включая код возврата процесса (как процесс, из которого выходят). Затем, если позже в программе, Вы помещаете другой процесс, позволяет, говорят, что сжатие, в фоновом режиме и должно ожидать его, затем без этого цикла, ожидание исправит одну из завершенных ssh программ, не сжатие - который может все еще работать. Вы получили бы статус возврата на неправильном дочернем процессе. Хорошо вымыться после себя. –  Arcege 28.08.2011, 21:23

Я думаю, что Вы ищете pssh и связанные параллельные версии обычного scp, rsync, и т.д.

2
27.01.2020, 19:34

Если Вы в Python, пишущий сценарий больше, чем bash при сценариях затем Матрица могла бы быть инструментом для Вас.

От домашней страницы Матрицы:

Матрицей является Python (2.5 или выше) библиотека и инструмент командной строки для оптимизации использования SSH для системных задач администрирования или развертывания приложения.

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

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

17
27.01.2020, 19:34

Существует несколько инструментов там, которые позволяют Вам входить в систему и выполнять ряд команд на нескольких машинах одновременно. Вот пара:

61
27.01.2020, 19:34
  • 1
    Вы могли бы хотеть добавить pdsh к списку. –  Riccardo Murri 19.08.2011, 16:17
  • 2
    я нашел clusterssh довольно интуитивный для использования. Просто мои 2 цента... –  josinalvo 14.04.2015, 01:50
  • 3
    я часто использую pssh. Это работает очень хорошо, хотя мне действительно жаль, что я не мог сказать этому, что определенные удаленные команды будут иметь ненулевой код выхода, и это не означает ошибки. Это является чисто косметическим все же. 64-разрядная ISO Ubuntu –  Anthony Clark 30.07.2017, 17:50

Я предлагаю Ansible.cc. Это - диспетчер команды и менеджер конфигурации.

4
27.01.2020, 19:34

Очень простая установка:

for host in $(cat hosts.txt); do ssh "$host" "$command" >"output.$host"; done

Аутентификация с именем/паролем не является действительно никакой хорошей идеей. Необходимо настроить закрытый ключ для этого:

ssh-keygen && for host in $(cat hosts.txt); do ssh-copy-id $host; done
8
27.01.2020, 19:34

Я действительно использую параллель GNU для этого, наиболее конкретно можно использовать этот рецепт:

parallel --tag --nonall --slf your.txt command

С your.txt будучи файлом с IP-адресом сервера / имена.

11
27.01.2020, 19:34
  • 1
    не является там никаким другим путем только с помощью ssh, Так как я использую свои серверы компании, я не хочу устанавливать дополнительные очень хорошие пакеты –  Özzesh 23.05.2013, 07:49
  • 2
    Несомненно, я раньше делал это прежде ssh существовавший также, но Вам нужен некоторый способ войти в другие компьютеры, и те пути раньше были менее безопасными (как rsh). Вы не описываете то, что Вы используете теперь для получения с машины на машину (telnet?, rsh?). –  Anthon 23.05.2013, 07:52
  • 3
    @Özzesh да только на контроллере –  Anthon 23.05.2013, 08:20
  • 4
    @Özzesh Видит, покрыта ли Ваша причина того, что не была установлена Параллель GNU на oletange.blogspot.dk/2013/04/why-not-install-gnu-parallel.html –  Ole Tange 23.05.2013, 11:07
  • 5
    @OleTange Просто понял, кто прокомментировал мой ответ %-). Спасибо за эту превосходную часть программного обеспечения. –  Anthon 23.05.2013, 11:18

Я создал инструмент с открытым исходным кодом под названием Overcast , чтобы сделать такого рода дело проще.

Сначала вы определяете свои серверы:

overcast import vm.01 --ip 1.1.1.1 --ssh-key /path/to/key
overcast import vm.02 --ip 2.2.2.2 --ssh-key /path/to/key

Затем вы можете запускать на них несколько команд и файлов сценариев, последовательно или параллельно, например:

overcast run vm.* uptime "free -m" /path/to/script --parallel
2
27.01.2020, 19:34

Просто напомню, чтобы задать действительно хороший вопрос:

Лучшее решение, которое я нашел, - это, что неудивительно, tmux.

Вы можете использовать Ctrl-B: setw synchronize-panes в tmux для получения потрясающих результатов. Для этого у вас должны быть открыты все ваши ssh-соединения на разных панелях одного окна Tmux.

1
27.01.2020, 19:34

Проект . Проект недавно добавил Multi-Host SSH Tool. Этот инструмент построен с Libssh и устанавливает соединения и проблемы асинхронно и параллельно для максимального параллелизма. См. Multi-Host SSH Tool для полной документации. Чтобы запустить команду на наборе хостов, вы запускаете его следующим образом:

$ ht ssh 1.1.1.1,2.2.2.2,3.3.3.3 uptime

Вы также можете указать имя хоста или IP-шаблон, например:

$ ht ssh 1.1.1.[1-99] uptime
$ ht ssh host[00-99] uptime

Это также поддерживает - Случайное начало Задержка Опция, которая задержит запуск команды на каждом хосте с помощью случайного интервала времени между 0 и Milliseconds. Эта опция может быть использована, чтобы избежать громочитных проблем, когда команда работает, доступ к центральному ресурсу.

2
27.01.2020, 19:34

He desarrollado collectnode Muy simple y efectivo para ejecutar tareas en varios servidores (Ventanas incluidas)

Cómo usar CollectNode:

  1. Crear la lista de servidores, para trabajar con:

    # cat hosts.file
    server1
    server2
    server3
    server4
    server5
    
  2. Ejecutar CollectNode pasando la lista de servicios:

    collectnode --file servers.txt --command='cat /etc/httpd/conf/httpd.conf |grep ^User'
    
  3. Opcionalmente, es posible filtrar los resultados, por ejemplo, este comando solo muestra el servidor donde se cumple la condición.

    collectnode --file servers.txt --command='cat /etc/httpd/conf/httpd.conf |grep ^User' --where="command contain User"
    

https://collectnode.com/5-tasks-collectnode-can-help-managing-servers/

2
20.08.2021, 13:34

Создайте файл /etc/sxx/hosts

заполнять вот так:

[grp_ips]
1.1.1.1
2.2.2.2
3.3.3.3

общий ключ ssh на всех машинах.

Установить sxx из пакета:

https://github.com/ericcurtin/sxx/releases

Затем запустите команду следующим образом:

sxx username@grp_ips "whatever bash command"
0
20.08.2021, 13:34

Я думаю, что "ожидать" - это то, что вам нужно.
Многие люди даже не знают, что он существует. Это программа на основе tcl, которая будет задавать вопросы и возможные ответы от вашего имени. Взгляните наhttps://wiki.tcl-lang.org/page/Expect

0
20.08.2021, 13:34

Использование параллелизма на основе Paramikohttp://www.paramiko.org/и Thread -https://docs.python.org/3/library/threading.htmlКод ниже позволяет выполнять несколько команд на каждом сервере параллельно!

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.load_system_host_keys()
ssh.connect(hostname, port, username, password)
t = threading.Thread(target=tasks[index], args=(ssh, box_ip,))
t.start()

Примечание. :повторите приведенные выше инструкции для каждого сервера.

0
20.08.2021, 13:34

Используйте pdsh. Вот полезный пример:

pdsh -w 'something.example.com,node-[1-5].example.com' -R ssh 'uptime'
0
25.10.2021, 18:46

Теги

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