Параллельное выполнение ssh команд на серверах

Есть и линейные вещи :). Правильнее Ansible и Puppet. А иногда тебя загоняют в дебильные рамки :).

В Debain этот инструмент доступен  пакетно:

apt-get install pssh

 Перед использованием инструмента необходимо подготовить текстовые файлы с адресами серверов в формате:

10.10.0.1
10.10.0.2
10.10.0.3
...
# Список IP серверов для выполнения команд с помощью pssh

all.txt - хранит список всех серверов системы.
serviceX.txt - хранит список всех серверов конкретного сервиса.
Для выполнения команды на всех серверах:

parallel-ssh -h all.txt -o /tmp/ssh ls -la
      # Выполнит команду "ls -la" на всех серверах из файл all.txt

Результат команды будет записан в папку /tmp/ssh — в отдельный файл для каждого сервера :

# ls -l  /tmp/ssh/
-rw-r--r--     1 root     root        10.10.0.1
-rw-r--r--     1 root     root       10.10.0.2
-rw-r--r--     1 root     root      10.10.0.3
-rw-r--r--     1 root     root     10.10.0.4


Для использовании авторизации по ключам:

parallel-ssh -h all.txt -x "-i key.rsa" -o /tmp/ssh ls -la
# key.rsa будет использовать для доступа ко всем серверам

Можно вручную задать количество потоков для выполнения команд:

parallel-ssh -h all.txt -p 10 -o /tmp/ssh ls -la
# команды будут выполняться в 10 потоков

pssh используется для выполнения команд на большом количестве серверов:

parallel-ssh -h all.txt -o /tmp/ssh ls -la
# В all.txt нужно добавить список серверов, каждый ip адрес на новой строке


<----->

                   Примеры некоторых скриптов

Заменяем бинарный файл Astra Cesbo на всех своих ресиверах.

#!/bin/bash
for server in `cat receiver.txt`; do
ssh -i /root/.ssh/vak -l root $server -p 22 rm /usr/local/bin/astra
scp -P 22 -r -i /root/.ssh/vak /root/soft/astra $server:/usr/bin/astra

Копируем некий скрипт на ресиверы с дальнейшим его выполнением:

#!/bin/bash
  for server in `cat receiver.txt`; do
  scp -P 22 -r -i /root/.ssh/vak /root/script/streamer/streamer.sh $server:/tmp/streamer.sh
  ssh -i /root/.ssh/vak -l root $server -p 22 sh /tmp/streamer.sh

 Пароль +  expect

#!/usr/bin/expect -f
set pass "C4P`['x^(XUe4gS"
# connect via scp to dvbs36
spawn scp -P 22 "v.a@dvbs36:/home/v.a/dvbs36.m3u8" /var/www/html/playlist/playlist.m3u8
#######################
expect "*assword:*"
send "${pass}\r";
interact



Комментарии

Популярные сообщения