1

Я совершенно новичок в сценариях и, следовательно, нужна помощь, чтобы это исправить.

У нас около 3000 виртуальных машин и 450 физических серверов, которые являются серверами на базе Linux (немногие из них тогда ubuntu, начиная с 9.x, и немногие из них Susu, начиная с 8.X и большинство из них RHEL, начиная с 4.x до 7.4), для всех них мне нужно добавить несколько записей имени хоста с IP-данными в соответствующие файлы /etc /hosts.

У меня разные пользователи на каждом сервере с полным доступом sudoers, которые я могу использовать. Поэтому я создал CSV-файл с именем хоста, именем пользователя и паролем. который содержит необходимые данные для входа в систему. Имя файла "hostname_logins.csv"

Мне нужно загрузить файл (то есть hostname_list на каждый из этих серверов, а затем обновить те же данные в каждом из файлов хоста сервера.

Я буду запускать этот скрипт, используя один сервер RHEL 6. (Все остальные хосты могут быть разрешены с этого сервера и доступны, я уже подтвердил это.)

следовательно, нужна помощь, чтобы исправить этот скрипт.

скрипт не уверен, что в этом плохого, так как я новичок в скриптах:

#!/bin/bash

while read hostname_login user_name user_password
do
        scp -p ./hostname_list $user_name:$user_password@$hostname_login:/tmp
        ssh -eS $user_name:$user_password@$hostname_login [bash -c "echo rishee | sudo -S mv /tmp/hostname_list ./hostname_list && cp -p /etc/hosts /etc/hosts.bkp && cat ./hostname_list >> /etc/hosts && rm -f ./hostname_list"]
done < hostname_logins.csv

Мне нужно сделать это как один скрипт, который будет работать на всех этих серверах. заранее спасибо.

1 ответ1

1

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

запустите предварительный сценарий, чтобы просто скопировать /etc /hosts в какой-то рабочий файл, затем запустить свой сценарий для этой рабочей копии, затем, когда он работает нормально на каком-нибудь игрушечном сервере, затем выполнить свой сценарий, используя фактический /etc /hosts

Вышеупомянутый набор команд смешивается с использованием вашего ID пользователя и sudo, что даст вам ошибки разрешения ... Я предлагаю вам скопировать приведенный ниже файл на каждый блок, а затем выполнить его как sudo на каждом удаленном блоке ... понять синтаксис внутри /etc /hosts и убедиться, что добавленные строки соответствуют хорошему синтаксису

#!/bin/bash

set -o errexit #  exit on any error
set -o xtrace  #  print command prior to execution

hostname_file=/root/hostname_list

working_hosts=/etc/hosts.working

mv /tmp/hostname_list  $hostname_file 

cp -p /etc/hosts $working_hosts

cat $hostname_file  >> $working_hosts

rm $hostname_file

echo here is contents of file $working_hosts

cat $working_hosts

выше не законченный скрипт, но он займет у вас 90% ... на игрушечном сервере, как только вы измените выше для использования реального файла /etc /hosts, убедитесь, что вы перезагрузите этот игрушечный сервер, и он проверяет OK

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .