Введение:
Я уже рассказывал, о том как поднять tftp сервер и сливать на него конфиги разных железяк... но чем больше этих самых железяк становится, тем сложнее управляться с ними. Сложнее не забыть забекапить конфиг, или вспомнить что же ты сделал, что оно перестало работать... Именно эту работу мы будем сегодня автоматизировать.
Задача:
Дано: Есть n+1 неких железяк
Надо: 1) Переодически забирать конфиги для бекапа 2) Вести список изменений в этих конфигах
Решение:
(данный пример описывает сбор данных с устройств cisco)
Для начала нам нужен инструмент, желательно многофункциональный, для автоматического сбора файлов конфига. Му будем использовать http://www.shrubbery.net/rancid/#modules - мне понравился его функционал - по мимо cisco он поддерживает и ещё много железяк.
Ставим
Код: Выделить всё
cd /usr/ports/net-mgmt/rancid
make install clean
Код: Выделить всё
┌────────────────────────────────────────────────────────────────────┐
│ Options for rancid 2.3.6 │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │ [X] SVN Use Subversion instead of CVS │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
│ │ │ │
├─└────────────────────────────────────────────────────────────────┘─┤
│ [ OK ] Cancel │
└────────────────────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────────────────────┐
│ Options for subversion 1.6.16_3 │
│ ┌────────────────────────────────────────────────────────────────┐ │
│ │[X] MOD_DAV_SVN mod_dav_svn module for Apache 2.X │ │
│ │[ ] MOD_DONTDOTHAT mod_dontdothat for Apache 2.X │ │
│ │[X] NEON WebDAV/Delta-V repo access module (neon) │ │
│ │[ ] SERF WebDAV/Delta-V repo access module (serf) │ │
│ │[ ] SASL SASL2 authorization support │ │
│ │[X] BDB Berkeley DB (4 or 5) repository backend │ │
│ │[ ] ASVN Build and install Archive SVN (asvn) │ │
│ │[ ] MAINTAINER_DEBUG Build debug version │ │
│ │[ ] SVNSERVE_WRAPPER Enable svnserve wrapper │ │
│ │[ ] SVNAUTHZ_VALIDATE install svnauthz-validate │ │
│ │[ ] STATIC Build static version (no shared libs) │ │
│ │[ ] GNOME_KEYRING Build with GNOME Keyring auth support │ │
│ │[ ] KDE_KWALLET Build with KDE KWallet auth support │ │
│ │[ ] BOOK Install the Subversion Book │ │
│ │ │ │
├─└────────────────────────────────────────────────────────────────┘─┤
│ [ OK ] Cancel │
└────────────────────────────────────────────────────────────────────┘
Код: Выделить всё
cd /usr/local/etc/rancid
cp ./rancid.conf.sample ./rancid.conf
Код: Выделить всё
LIST_OF_GROUPS="cisco"
Теперь нам надо определиться от имени какого пользователя будет запускаться наша тузла (тут следует учесть что этот пользователь должен быть на устройстве, так как пароль мы пишем, а логин нет - то есть логином является тот пользователь от которого это запускается). Работать все это дело у меня будут от моего пользователя roman - потому дальше это имя встречается в путях. Для этого в домашнем каталоге пользователя создаём специальный файлик с пароля к устройствам
Код: Выделить всё
touch /usr/home/roman/.cloginrc
chmod 600 /usr/home/roman/.cloginrc
chown roman: /usr/home/roman/.cloginrc
Код: Выделить всё
add password 192.168.* password password
add noenable 192.168.*
Вторая строка говорит что не надо поднимать привилегии - это для cisco, на других устройствах наврят ли вам это может пригодиться
Теперь ещё небольшой штрих - если мы хотим получать на почту изменения в конфиге, то надо в файле /etc/mail/aliases добавить следующие строки
Код: Выделить всё
rancid-cisco: roman@stniva.ru
rancid-admin-cisco:roman@stniva.ru
к слову, вместо того что я сказал выше, можно применить и такую конструкцию этого файла
Код: Выделить всё
root: roman@stniva.ru
rancid-cisco: root
rancid-admin-cisco:root
Код: Выделить всё
stat# cd /etc/mail/aliases
stat# newaliases
/etc/mail/aliases: 30 aliases, longest 15 bytes, 344 bytes total
stat#
Ну вот - конфигурация закончена. Теперь надо создать репазиторий
Код: Выделить всё
/usr/local/libexec/rancid/rancid-cvs
Следующим этапом будет описание интересующих нас устройств - идём в файл /usr/local/var/rancid/cisco/router.db (если нет - создаём) и прописываем туда такое
Код: Выделить всё
192.168.0.10:cisco:up
Тперь можно запустить саму утилитку
Код: Выделить всё
/usr/local/libexec/rancid/rancid-run
У меня всё получилось
Надо поставить это дело на поток для чего прописываем в кронтаб /etc/crontab ежедневный запуск
Код: Выделить всё
#
10 2 * * * roman /usr/local/libexec/rancid/rancid-run
#
1) ну конечно же читаем логи, которые располагаются в /usr/local/var/rancid/logs
2) можно вручную проверить соединение
Код: Выделить всё
stat# /usr/local/libexec/rancid/clogin -u roman -e password 192.168.0.10
192.168.0.10
spawn telnet 192.168.0.10
Trying 192.168.0.10...
Connected to gw.cisco.stniva.ru.0.168.192.in-addr.arpa.
Escape character is '^]'.
User Access Verification
Username: roman
Password:
Liski#
Liski#exit
Connection closed by foreign host.
stat#
В тоге мы получили:
1) ежедневный бекап конфигов оборудования
2) сообщения на почту в случае если конфигурация устройства изменилась