Прежде всего, я должен сказать, что я не программист, но мне нужно что-то делать, основанное на программировании ... Моя проблема в том, что мне нужно изменить DNS-серверы почти на 1000 наностанциях. У меня есть доступ к ним по ssh, и я хочу создать сценарий для выполнения задачи. Я уже сделал файл с IP-адресами всех CPE (с именем client.txt). Думаю, мой сценарий может начинаться так:
#!/bin/bash
for host in $(cat client.txt);
do
ssh Administrador@$host sameforall;
sed 's/x.x.x.x/y.y.y.y /etc/resolve.conf;
sed 's/w.w.w.w/z.z.z.z /etc/resolve.conf;
# here I restart network service but I don't have the command yet
done
y.y.y.y
и z.z.z.z
новые DNS-серверы и x.x.x.x
и w.w.w.w
старые
Я знаю, что это далеко, чтобы быть правильным, но мне нужна помощь. Первая проблема, которую я собираюсь найти, заключается в том, что ssh предлагает мне поместить указанный ssh-ключ сервера в мой файл known_hosts, как я могу решить эту проблему ???
Кто-нибудь может мне помочь ???
Прежде всего, вам необходимо настроить пару ключей ssh публичный / приватный, чтобы подключаться к каждому хосту через ssh без пароля. Вы можете проверить это ссылка на сайт и выполните несколько простых шагов.
AFAIK у вас есть две альтернативы. Вы можете создать пару открытого / закрытого ключей на каждом сервере, а затем импортировать открытый сгенерированный ключ каждого хоста на известные хосты вашего «главного сервера». Другой вариант - наоборот: вы можете создать пару открытого / закрытого ключей на своем главном хосте. А затем поместите этот закрытый ключ на каждый хост.
Затем вы можете запустить любую команду вроде этой:
while read MY_HOST ; do ssh $MY_HOST "ANY_COMMAND" < /dev/null; done < client.txt
Оба решения довольно сложны в вашем случае, потому что у вас большое количество хостов. Возможный обходной путь (это будет работать, только если все наностанции будут иметь одно и то же имя пользователя / пароль) заставит скрипт использовать простое текстовое имя пользователя / пароль. Если это однократное изменение, и вы не выполняете никаких подобных изменений в будущем, это может помочь:
while read MY_HOST ; do sshpass -p 'YourPassword' ssh user@$MY_HOST "ANY_COMMAND" < /dev/null; done < client.txt
Пожалуйста, перейдите по этой ссылке: Вход по SSH с открытым текстовым паролем в качестве параметра
СОВЕТ
Если вы выполняете некоторые задачи управления на такой большой ферме устройств, вы можете рассмотреть возможность использования некоторых инструментов автоматизации ИТ, таких как Ansible или Кукольныйили, по крайней мере, сгенерируйте пару ключей ssh при развертывании новой наностанции.
EDIT - пример скрипта
Этот простой сценарий записывает вывод в текстовый файл, поэтому вы будете точно знать, какой из хостов не работал (возможно, из-за ошибки подключения или пароля). Вы можете улучшить сценарий, проанализировав ошибку и определив причину.
#!/bin/bash
echo "" > connFailed.log
while read MY_HOST;
do < /dev/null;
sshpass -p 'YourPassword' ssh user@$MY_HOST "ANY_COMMAND" > /dev/null 2>&1
if [ $? != 0 ] ; then
echo "[ERROR] Unable to connect to: " $MY_HOST >> connFailed.log
fi
done < client.txt
Первая проблема, которую я собираюсь найти, заключается в том, что ssh предлагает мне поместить указанный ssh-ключ сервера в мой файл known_hosts, как я могу решить эту проблему ???
Как и во многих случаях, прочитав руководство. В man ssh
руководство направит вас к руководству man ssh_client
для файла конфигурации настроек клиента ssh ~/.ssh/config
(но вы также можете настроить параметры клиента с помощью переключателей командной строки), где среди прочего вы найдете следующие параметры:
StrictHostKeyChecking
Если этот флаг установлен на
yes
, ssh (1) никогда не будет автоматически добавлять ключи хоста в файл ~ / .ssh / known_hosts и откажется подключаться к хостам, чей ключ хоста изменился. Это обеспечивает максимальную защиту ** от атак троянских коней, хотя это может раздражать, когда файл / etc / ssh / ssh_known_hosts плохо обслуживается или когда часто устанавливаются соединения с новыми хостами. Эта опция заставляет пользователя вручную добавлять все новые хосты. Если этот флаг установлен вno
, ssh будет автоматически добавлять новые ключи хоста к файлам известных хостов пользователя.
Если этот флаг установлен вask
новые ключи хоста будут добавлены к файлам известных пользователю хостов только после того, как пользователь подтвердит, что это то, что они действительно хотят сделать, и ssh откажется подключаться к хостам, ключ хоста которых изменился. Ключи хостов известных хостов будут проверяться автоматически во всех случаях. Аргумент должен бытьyes
,no
, илиask
. По умолчаниюask
.