20231007
Надо поправить:
Rancid - это софт для сбора, хранения и учета версий конфигураций сетевого оборудования.
Отлично работает с оборудованием Cisco, HP, Juniper, Huawei, H3C. Единственный неприятный минус, это хранение паролей для захода на оборудование в открытом виде.
ViewVC - это веб-интерфейс для просмотра CVS репозиториев. Rancid как раз может складывает кофиги в CVS.
Связку Rancid+ViewVC будем использовать для удобной работы с конфигурациями сетевого оборудования.
В Centos и Debian есть готовые пакеты свежей версии.
Ставим пакеты rancid и cvs,
# yum install cvs rancid
Смотрим, куда поставились файлы:
[root@noc-g8 rancid]# rpm -ql rancid /etc/cron.d/rancid /etc/rancid /etc/rancid/lg.conf /etc/rancid/rancid.conf /etc/rancid/rancid.types.base /etc/rancid/rancid.types.conf /usr/bin/rancid /usr/bin/rancid-cvs ...
или “repoquery –installed -l rancid ” из пакета “yum-utils”.
Файлы, директории:
Задаём пароль пользователю racnid
# apg -m 73 -n 1 # passwd rancid
Запрещаем пользователю rancid ходить по ssh,
# cat /etc/ssh/sshd_config ... DenyUsers rancid ...
В файле /etc/rancid/rancid.conf определяем группы сетевого оборудование.
... # list of rancid groups #LIST_OF_GROUPS="sl joebobisp"; export LIST_OF_GROUPS LIST_OF_GROUPS="routers switches"; export LIST_OF_GROUPS ...
Создаем CVS репозиторий для ранее определенных групп, команду даем от имени пользователя rancid.
# su - rancid $ rancid-cvs
В домашней директории создатутся папки.
$ ll total 0 drwxrwxr-x 3 rancid rancid 21 Oct 7 20:09 CVS drwxr-x--- 3 rancid rancid 147 Oct 7 21:01 routers drwxr-x--- 3 rancid rancid 113 Oct 7 21:01 switches $ pwd /var/rancid/
: !!!!
$ rancid-cvs No conflicts created by this import cvs checkout: Updating tst-grp Directory /var/rancid/CVS/tst-grp/configs added to the repository cvs commit: Examining configs cvs add: scheduling file `router.db' for addition cvs add: use 'cvs commit' to add this file permanently RCS file: /var/rancid/CVS/tst-grp/router.db,v done Checking in router.db;
Добавляем пользователю rancid папку со скриптам Rancid в PATH.
От имени пользователя rancid правим файл .bashrc, в конец добавляем.
... # Add def rancid bin dir to PATH export PATH="/usr/libexec/rancid:$PATH"
Даём команду “bash” и проверяем, что через TAB должна добиться, например, команда jlogin.
$ echo $PATH /usr/libexec/rancid:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/var/rancid//.local/bin:/var/rancid//bin $ jlogin
Перечисляем оборудование с которого будем снимать конфигурацию.
$ joe ~/routers/router.db ... m9-srx;juniper;up ...
где:
В домашней директории rancid создаём файл “.cloginrc” для описания захода на сетевое оборудование и задаём права.
:
Доразобраться с ssh ключами от сетевого (/usr/share/rancid/cloginrc.sample).
$ touch ~/.cloginrc $ chmod 640 .cloginrc $ ll .cloginrc -rw-r----- 1 rancid rancid 77 Oct 7 20:34 .cloginrc
Правим .cloginrc
$ cat .cloginrc ... add method kg-srx2 ssh add user kg-srx2 rncd add password kg-srx2 DabVigenvickciphiosCeOrfAjAkhygsya ...
Запускаем и проверяем работу Rancid.
Если все хорошо, в /var/rancid/routers/config появится файл не нулевого размера.
$ rancid-run -r kg-srx2 $ ll /var/rancid/routers/config total 52 -rw-r----- 1 rancid rancid 50429 Oct 8 22:01 kg-srx2
Если файл нулевого размера, то идем смотреть логи в “/var/log/rancid/” и\или запускаем rancid в дебаг режиме и смотрим, что происходит.
$ rancid -d -t juniper kg-srx2
При установке создатся крон-файл “/etc/cron.d/rancid” в котором можно задать переодичность запуска Rancid.
По дефолту Rancid запускается раз в час.
В 3:03, каждую ночь, удаляются логи Rancid старше 30 дней.
# cat /etc/cron.d/rancid SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/var/rancid # Run config differ hourly 1 * * * * rancid /usr/libexec/rancid/rancid-run 3 3 * * * rancid /usr/bin/find /var/log/rancid -type f -mtime +30 -exec /usr/bin/rm {} \;
Доставляем необходимые пакеты
# yum install cvs expect gcc MySQL-python telnet
Скачиваем и распаковываем свежую версию Rancid.
ftp://ftp.shrubbery.net/pub/rancid/rancid-3.1.tar.gz
Версию 3.1 уже с официального фтп скачать нельзя.
Свежие версии rancid не хотят вставать на Centos 6, с perl какая-то беда.
Все последние разы rancid надо было ставить быстро и с проблемой не разбирался.
Rancid 3.1 нормально ставится на минимальную версию Centos 6, ссылка - rancid-3.1.tar.gz
# wget ftp://ftp.shrubbery.net/pub/rancid/rancid-3.1.tar.gz # tar -zxvf rancid-3.1.tar.gz
Добавляем группу netadm в которую впоследствии будет добавлен пользователь rancid.
# groupadd netadm
Создаем пользователя rancid и задаем ему пароль.
# useradd -g netadm -d /home/rancid rancid # passwd rancid
Компилируем и устанавлваем rancid.
# pwd /root/src/rancid-3.1 # ./configure --prefix=/home/rancid # make install
Копируем файл в котором будут содержаться пароли от сетевого оборудования и выставляем права.
# cp /root/src/rancid-3.1/cloginrc.sample /home/rancid/.cloginrc # chmod 0640 /home/rancid/.cloginrc # chown -R rancid:netadm /home/rancid/ # chmod 770 /home/rancid/
В файле rancid.conf определяем группы сетевого оборудование.
Все дальнейшие изменения в файлах надо делать от пользователся rancid.
# su - rancid $ cp ~/etc/rancid.conf ~/etc/rancid.conf.orig $ joe ~/etc/rancid.conf ... # list of rancid groups #LIST_OF_GROUPS="sl joebobisp" # more groups... #LIST_OF_GROUPS="$LIST_OF_GROUPS noc billybobisp" LIST_OF_GROUPS="cisco juniper" # ...
Создаем CVS репозиторий для ранее определенных групп.
$ /home/rancid/bin/rancid-cvs
Перечисляем оборудование с которого будем снимать конфигурацию.
$ joe ~/var/juniper/router.db ... srx-test;juniper;up ...
где:
Обращаем внимание, что в версиях rancid после 3.x в качестве разделителя используется “;”.
Задаем пользователя, пароль и имя устройства (как в router.db) для захода на сетевое оборудование.
Файл читается до первого совпадения.
$ joe ~/.cloginrc ... add method srx-test ssh add user srx-test srx-user add password srx-test srx-passwd ...
Примеры .cloginrc для различного оборудования:
add method CISCO-ROUTER-1 ssh add user CISCO-ROUTER-1 USER-NAME add password CISCO-ROUTER-1 USER-PASSWORD ENABLE-PASSWORD
add method CISCO-ROUTER-* ssh add user CISCO-ROUTER-* USER-NAME add password CISCO-ROUTER-* USER-PASSWORD ENABLE-PASSWORD
add method SRX* ssh add user SRX* USER-NAME add password SRX* USER-PASSWORD
add method PROCURVE-SW* ssh add user PROCURVE-SW* USER-NAME add autoenable PROCURVE-SW* 1 add password PROCURVE-SW* USER-PASSWORD
add method BROCADE-CER* ssh add user BROCADE-CER* USER-NAME add autoenable BROCADE-CER* 1 add password BROCADE-CER* USER-PASSWORD
Вручную запускаем rancid (от пользователя rancid) и проверяем, что конфигурация снялась.
$ rancid-run -r srx-test $ ll ~/var/juniper/configs/ total 484 drwxr-x---. 2 rancid netadm 4096 Feb 30 23:59 CVS -rw-r----- 1 rancid netadm 488712 Feb 30 23:59 srx-test
Пишем правило cron для rancid.
$ crontab -e # ############################################# # Crontab for rancid on myserver # ############################################# # Hourly Check 1 * * * * /home/rancid/bin/rancid-run # Daily Clean Up of Diff Files at 11 50 pm 50 23 * * * /usr/bin/find /home/rancid/var/logs -type f -mtime +2 -exec rm {} \; # Daily Clean Up of .SITE.run.lock Files at 11 50 pm 50 23 * * * rm /tmp/.*.lock
Скрипты - huawei-rancid.tar
Что бы подключить скрипты надо файл ~/etc/rancid.types.base добавить строчку:
huawei;script;hwrancid
В router.db оборудование прописываем так:
S5328-EL;huawei;up
Заводим read-only пользователя rancid и дополнительно разрешаем ему выполять команду
username rancid privilege 5 password some-Pass privilege exec level 5 skip-page-display
Правим файл /etc/aliases:
... rancid-cisco: config@company.name rancid-admin-cisco: config@company.name, lead@company.name rancid-huawei: config@company.name rancid-admin-huawei: config@company.name, lead@company.name ...
Применяем изменения в файле командой newaliases.
На алиас rancid-cisco будут приходить письма и дифами консигураций, на rancid-admin-cisco служебные сообщения.
Часть алиаса после rancid- и rancid-admin- должна совпадать с именем группы которую задавали в файле rancid.conf.
Для некоторых сетевых устройств полезно отключать проверку ssh т.к. на них часто могут меняться ключи.
А когда устройств реально много, проще отключить проверку для всех.
Что бы откючить проверку надо в домашней директории rancid в папке .ssh создать файл config след. содержания:
Host * StrictHostKeyChecking no UserKnownHostsFile /dev/null
Скачиваем и распаковываем свежую версию ViewVC.
# wget http://viewvc.tigris.org/files/documents/3330/49392/viewvc-1.1.23.tar.gz # tar zxvf viewvc-1.1.23.tar.gz
Ставим.
./viewvc-install This is the ViewVC 1.2.3 installer. It will allow you to choose the install path for ViewVC. You will now be asked some installation questions. Defaults are given in square brackets. Just hit [Enter] if a default is okay. Installation path [/usr/local/viewvc-1.2.3]: DESTDIR path (generally only used by package maintainers) []: Installing ViewVC to /usr/local/viewvc-1.2.3: created /usr/local/viewvc-1.2.3/bin/cgi/ ... ViewVC file installation complete. Consult the INSTALL document for detailed information on completing the installation and configuration of ViewVC on your system. Here's a brief overview of the remaining steps: 1) Edit the /usr/local/viewvc-1.2.3/viewvc.conf file. 2) Either configure an existing web server to run /usr/local/viewvc-1.2.3/bin/cgi/viewvc.cgi. Or, copy /usr/local/viewvc-1.2.3/bin/cgi/viewvc.cgi to an already-configured cgi-bin directory. Or, use the standalone server provided by this distribution at /usr/local/viewvc-1.2.3/bin/standalone.py.
# cd viewvc-1.1.23 # ./viewvc-install ... ViewVC file installation complete. Consult the INSTALL document for detailed information on completing the installation and configuration of ViewVC on your system. Here's a brief overview of the remaining steps: 1) Edit the /usr/local/viewvc-1.1.23/viewvc.conf file. 2) Either configure an existing web server to run /usr/local/viewvc-1.1.23/bin/cgi/viewvc.cgi. Or, copy /usr/local/viewvc-1.1.23/bin/cgi/viewvc.cgi to an already-configured cgi-bin directory. Or, use the standalone server provided by this distribution at /usr/local/viewvc-1.1.23/bin/standalone.py. ...
Настраиваем viewvc для работы с CVS репозиторием.
# cd /usr/local/viewvc-1.1.23/ # joe viewvc.conf ... ## Example: ## cvs_roots = cvsroot: /opt/cvs/repos1, ## anotherroot: /usr/local/cvs/repos2 ## #cvs_roots = cvs_roots = cvsroot: /home/rancid/var/CVS ... ## Example: ## root_parents = /opt/svn: svn, ## /opt/cvs: cvs ## #root_parents = root_parents = /home/rancid/var/CVS : cvs ... ## Example: ## rcs_dir = /usr/bin/ ## #rcs_dir = rcs_dir = /usr/local/bin ... ## use_rcsparse: Use the rcsparse Python module to retrieve CVS ## repository information instead of invoking rcs utilities [EXPERIMENTAL] ## use_rcsparse = 1 ... ## use_localtime: Display dates as UTC or in local time zone. ## #use_localtime = 0 use_localtime = 1 ... #allowed_views = annotate, diff, markup, roots allowed_views = annotate, diff, markup, roots, co ...
Копируем файлы query.cgi и viewvc.cgi в рабочую папку веб-сервера.
# cp /usr/local/viewvc-1.1.23/bin/cgi/*.cgi /var/www/cgi-bin # ll /var/www/cgi-bin total 8 -rwxr-xr-x. 1 root root 1782 Feb 30 23:59 query.cgi -rwxr-xr-x. 1 root root 1781 Feb 30 21:59 viewvc.cgi
Правим /etc/httpd/conf.d/vhosts.conf
# joe /etc/httpd/conf.d/vhosts.conf ... # Custom Rancid Config <VirtualHost *:80> DocumentRoot /var/www ScriptAlias /cgi-bin/ "/var/www/cgi-bin" ScriptAlias /viewvc /var/www/cgi-bin/viewvc.cgi ScriptAlias /query /var/www/cgi-bin/query.cgi <Directory "/var/www/cgi-bin"> AllowOverride None Options None Order allow,deny Allow from all </Directory> </VirtualHost>
Добавляем пользователя apache в группу netadm.
# joe /etc/group ... netadm:x:5000:apache ...
Создаем mysql базу данных и пользователей.
# mysql -u root -p mysql> create database viewvc_db; mysql> create user 'viewvc_user'@'localhost' identified by 'pass1'; mysql> grant all privileges on viewvc_db.* to 'viewvc_user'@'localhost' with grant option; mysql> create user 'viewvc_rouser'@'localhost' identified by 'pass2'; mysql> grant all privileges on viewvc_db.* to 'viewvc_rouser'@'localhost' with grant option; mysql> flush privileges;
Заливаем структуру базы данных viewvc_db.
# cd /usr/local/viewvc-1.1.23/bin/ # ./make-database ./make-database:20: DeprecationWarning: The popen2 module is deprecated. Use the subprocess module. import popen2 MySQL Hostname (leave blank for default): MySQL Port (leave blank for default): MySQL User: viewvc_user MySQL Password: pass1 ViewVC Database Name [default: ViewVC]: viewvc_db Database created successfully. Don't forget to configure the [vsdb] section of your viewvc.conf file.
Настраиваем viewvc для работы с mysql.
# joe /usr/local/viewvc-1.1.23/viewvc.conf ... [cvsdb] ## enabled: Enable database integration feature. ## enabled = 1 ## host: Database hostname. Leave unset to use a local Unix socket ## connection. ## host = localhost ## post: Database listening port. ## port = 3306 ## database_name: ViewVC database name. ## database_name = viewvc_db ## user: Username of user with read/write privileges to the database ## specified by the 'database_name' configuration option. ## user = viewvc_user ## passwd: Password of user with read/write privileges to the database ## specified by the 'database_name' configuration option. ## passwd = pass1 ## readonly_user: Username of user with read privileges to the database ## specified by the 'database_name' configuration option. ## readonly_user = viewvc_rouser ## readonly_passwd: Password of user with read privileges to the database ## specified by the 'database_name' configuration option. ## readonly_passwd = pass2 ...
Заполняем базу данных.
# cd /usr/local/viewvc-1.1.23/bin/ # ./cvsdbadmin rebuild /home/rancid/var/CVS/CVSROOT/ Using repository root `/home/rancid/var/CVS' Purging existing data for repository root `/home/rancid/var/CVS' [CVSROOT/loginfo [0 commits]] [CVSROOT/editinfo [0 commits]] [CVSROOT/config [0 commits]] [CVSROOT/notify [0 commits]] [CVSROOT/verifymsg [0 commits]] [CVSROOT/cvswrappers [0 commits]] [CVSROOT/rcsinfo [0 commits]] [CVSROOT/modules [0 commits]] [CVSROOT/commitinfo [0 commits]] [CVSROOT/checkoutlist [0 commits]] [CVSROOT/taginfo [0 commits]]
Пробуем зайти на веб-интерфейс http://x.x.x.x/viewvc
Нормальной работе мешает selinux, в чем проблема не разбирался, в локальных инсталяция допустимо отключить.
Все должно быть хорошо.