2015-01-06 2 views
2

Я совершенно новичок в написании сценариев, и у меня возникают проблемы с их объединением из некоторых других онлайн-ресурсов.Использование SSH для grep ключевых слов с нескольких серверов

Что я хочу сделать, это запустить скрипт bash, который будет grep для домена ключевого слова в файле/etc/hosts на нескольких серверах. В выходном файле я ищу список серверов, которые содержат это ключевое слово, но я не хочу вносить какие-либо изменения. Просто ищите, какие машины имеют это значение. Поскольку есть множество машин, о которых идет речь, список серверов, которые я ищу для поиска, не будет работать, но машина, с которой я делаю это, имеет ключи SSH для всех рассматриваемых.

У меня есть список серверов, которые я хочу запросить в трех файлах на машине (по одному для каждой среды). Я собираюсь запустить этот скрипт.

Linux.prod.dat 
Linux.qa.dat 
Linux.dev.dat 

Каждый файл - это просто список имен серверов в среде. Например ..

server1 
server2 
server3 
etc... 

Я полностью потерял здесь и буду признателен за любую помощь.

+0

givepatajob, что в servername.dat? список серверов? –

+0

На самом деле, я думаю, что ошибаюсь в ссылках на это. Это было то, что я нашел на другом сайте, но я не могу найти ничего похожего на моей основной машине. Я удалил это из вопроса. Извиняюсь. Возможно, способ использовать known_hosts для root? – givepatajob

+0

И я снова ошибся. У меня есть .dat доступных серверов, он просто использовал другое соглашение об именах. В этом случае он разделяется средой, поэтому у меня есть три ... linux.dev.dat linux.prod.dat linux.qa.dat Простите за это. – givepatajob

ответ

2

Вот пример:

KEYWORD=foo 
SERVERLIST=Linux.prod.dat 
OUTPUTLIST=output.dat 

for host in $(cat ${SERVERLIST}); do 
    if [[ -n "$(ssh ${host} grep '${KEYWORD}' /etc/hosts && echo Y)" ]]; then 
     echo ${host} >> ${OUTPUTLIST} 
    fi 
done 
+0

Спасибо, что посмотрели на это. Я дам вам попытку и дам вам знать результаты, но я думаю, что это именно то, что мне нужно. – givepatajob

+0

Это меня достало, что мне нужно. Спасибо за помощь в этом. – givepatajob

+0

@givepatajob, ну ... если бы это помогло вам, возможно, вы могли бы принять ответ? ... –

0

Попробуйте GNU параллельно

parallel --tag ssh {} grep -l "KEYWORD" :::: Linux.prod.dat 

parallel команды запуска несколько раз заменяя {} с линиями из Linux.prod.dat файла. --tag switch добавляет значение из файла Linux.prod.dat в начале файла. Таким образом, вывод команды будет выглядеть следующим образом:

server1 /etc/hosts 
server5 /etc/hosts 
server7 /etc/hosts 

Где сервер1, server5 и т.д. будут имена серверов, на которых /etc/hosts содержит KEYWORD

Смежные вопросы