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

Существует список IP-адресов в .txt файле, напр.:

1.1.1.1
2.2.2.2
3.3.3.3

Позади каждого IP-адреса существует сервер, и на каждом сервере существует sshd, работающий на порте 22. Не каждый сервер находится в known_hosts список (на моем ПК, Ubuntu 10.04 LTS/bash).

Как может я команды выполнения на этих серверах, и собирать вывод?

Идеально, я хотел бы выполнить команды параллельно на всех серверах.

Я буду использовать аутентификацию с открытым ключом на всех серверах.

Вот некоторые потенциальные ловушки:

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

Серверы являются AIX/ksh (но я думаю, что это действительно не имеет значения.

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

Предположение, что Вы не можете получить 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

Теги

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