Назад | Перейти на главную страницу

Пытаюсь сделать скрипт

Прежде всего, я должен сказать, что я не программист, но мне нужно что-то делать, основанное на программировании ... Моя проблема в том, что мне нужно изменить 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.