Параллельное выполнение ssh команд на серверах
Есть и линейные вещи :). Правильнее Ansible и Puppet. А иногда тебя загоняют в дебильные рамки :).
В Debain этот инструмент доступен пакетно:
Перед использованием инструмента необходимо подготовить текстовые файлы с адресами серверов в формате:
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
В 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
Комментарии
Отправить комментарий