Мне нужен скрипт, который просматривает список IP-адресов для 200 серверов, собирает информацию об ОС Ubuntu и помещает ее в файл.
Все мои серверы имеют версии Ubuntu между 14 и 18.
SSH - это известный метод, используемый для доступа к каждому серверу с использованием аутентификации на основе ключей с использованием генерации ключа RSA.
Могу ли я получить помощь в создании сценария, который выполняет это?
Добавленный файл может быть помещен в общее хранилище NFS (server01:/file-storage /mnt/lsb-info
).
Сценарий должен выполнять следующие задачи:
IP_list.txt
lsb_release -a
LSB_Release_Info.txt
Так как Вы используете основанную на ключе аутентификацию с 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
команда. Мое предположение - то, что Вы имеете, это уже настроило; в противном случае см. 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
Это - то, на что вывод должен быть похожим с командой, данной выше. Можно скорректировать команду соответственно, затем выполнить ее на всех двухстах серверах, после того как она производит выходной формат, который Вы хотите.