Скрипт для сбора серверов & # 39; Информация

Мне нужен скрипт, который просматривает список IP-адресов для 200 серверов, собирает информацию об ОС Ubuntu и помещает ее в файл.

Все мои серверы имеют версии Ubuntu между 14 и 18.

SSH - это известный метод, используемый для доступа к каждому серверу с использованием аутентификации на основе ключей с использованием генерации ключа RSA.

Могу ли я получить помощь в создании сценария, который выполняет это?

Добавленный файл может быть помещен в общее хранилище NFS (server01:/file-storage /mnt/lsb-info).

Сценарий должен выполнять следующие задачи:

  1. Просмотр списка IP-адресов из IP_list.txt
  2. Вход на каждый сервер
  3. Выполнение команды: lsb_release -a
  4. Добавить информацию к LSB_Release_Info.txt
-1
задан 23 August 2019 в 02:29

1 ответ

Так как Вы используете основанную на ключе аутентификацию с SSH, легко автоматизировать выполнение команды на многих машинах. Можно записать простой сценарий, чтобы сделать это, но Вы не действительно должны. Можно сделать это с единственной командой, чем-то как:

xargs -a IP_list.txt -d'\n' -I{} ssh {} 'printf "\n%s:\n" {}; lsb_release -a' | tee -a LSB_Release_Info.txt

Это выполняет один ssh команда для каждой строки IP_list.txt, включая строку для {}. Чтобы это работало, каждая строка должна быть IP-адресом или именем хоста сервера, к которому Вы хотите к SSH. Предположим, например, что IP_list.txt содержит строку 192.168.10.2. Затем команда SSH, что xargs выполнения для той строки:

ssh 192.168.10.2 'printf "\n%s:\n" 192.168.10.2; lsb_release -a'

то, Что ssh делает с той командой, должно попытаться соединиться с 192.168.10.2 и выполнить этот код в неинтерактивной оболочке:

printf "\n%s:\n" 192.168.10.2; lsb_release -a

, Который состоит из двух команд. Первая печать пустая строка, сопровождаемая строкой 192.168.10.2:. Второе lsb_release -a.

Эти ssh управляют, может только успешно выполниться, если Вы входите в систему с корректными учетными данными:

  • , Поскольку я записал это, Ваш локальный , имя пользователя будет использоваться. Если это не корректно, необходимо будет изменить команду соответственно. Например, если бы все машины имеют то же имя пользователя друг как друг - например, foo - затем Вы записали бы ssh foo@{} вместо [1 116].
  • , Поскольку Вы, вероятно, знаете, необходимо будет кэшировать дешифрованный закрытый ключ с агентом аутентификации, чтобы не должными быть ввести локальный ключевой пароль SSH для каждого ssh команда. Мое предположение - то, что Вы имеете, это уже настроило; в противном случае см. man ssh-agent. (Вероятно, достаточно работать eval "$(ssh-agent)" сопровождаемый [1 120] и ввести Ваш пароль.)

Передача по каналу вывода того xargs команда с | оператор к [1 123] шоу Вы вывод, в то время как также добавление это к (локальным) сообщениям об ошибках файла LSB_Release_Info.txt. не включено в файл; их только покажут Вам. , Если Вы хотели включать их в выходной файл, Вы могли бы использовать |& вместо [1 126], но Вы очень вряд ли захотите их. Более вероятно Вы могли бы только [1 139] хотеть видеть сообщения об ошибках, в этом случае можно использовать >>LSB_Release_Info.txt вместо [1 128] - то есть, просто перенаправить в файл вместо того, чтобы передать по каналу к [1 129]. Обратите внимание, что, если Вы работаете tee без [1 131], или если Вы используете > вместо [1 133], затем Вы перезапись LSB_Release_info.txt вместо того, чтобы добавить к нему.

я предлагаю проверить это сначала с входным файлом, состоящим всего из нескольких IP-адресов. Нажатие Ctrl + C обычно успешно выполняется при остановке продолжительной команды, но я все еще предлагаю делать немного тестирования для разбираний в нем прежде, чем выполнить его для всех серверов. Например, для записи этого ответа я протестировал это в своей локальной сети с четырьмя IP-адресами и был произведен к моему терминалу (и в [1 135]) как это:

192.168.10.2:
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.3 LTS
Release:        18.04
Codename:       bionic

192.168.10.4:
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.6 LTS
Release:        16.04
Codename:       xenial

192.168.203.128:
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu Eoan Ermine (development branch)
Release:        19.10
Codename:       eoan

192.168.31.130:
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.3 LTS
Release:        18.04
Codename:       bionic

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

4
ответ дан 23 October 2019 в 04:52

Другие вопросы по тегам:

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