Итак сегодня речь пойдет об инструменте в задачу которого входит выполнение централизованного резервного копирования конфигурационных файлов (те которые выполняются с расширением rsc
) оборудования Mikrotik
. Плюс инструмент умеет отображать разницу в изменениях, а делает он это через складирование изменений посредством системы контроля версий GIT
. Я если честно давно искал такой инструмент и вот я воплотил свою задумку разобрав от и до все шаги по разворачиванию сервиса oxidized
в систему Ubuntu 18.04 Server amd64
. Узнал я о нем это просматривая опубликованные презентации посвященные Mikrotik
, к примеру если через поисковую систему Google
ввести «Автоматизируем бэкап – MUM — MikroTik»
На заметку: От 22.03.2023 теперь есть еще "Обновленная установка Oxidized на Ubuntu 22.04"
Предварительные действия: На всех Mikrotik
(ах) для которых Вы хотите осуществлять резервное копирование нужно сделать учетную записи с минимальными правами, к примеру только на чтение:
ekzorchik@srv-bionic:~$ ssh -l admin 172.33.33.22 [admin@MikroTik] > user add name=test password=Aa1234567 group=read [admin@MikroTik] > quit
Connection to 172.33.33.22 closed.
ekzorchik@srv-bionic:~$
Шаг №1: Настраиваю систему
ekzorchik@srv-bionic:~$ hg clone --insecure https://ekzorchik@172.35.35.8/hg/dproject ekzorchik@srv-bionic:~$ sudo ./dproject/default
Полученная текущая система с учетом моего скрипта настройки который я применяю в своей локальной сети:
ekzorchik@srv-bionic:~$ uname -a && lsb_release -a
Linux srv-bionic 4.15.0-43-generic #46-Ubuntu SMP Thu Dec 6 14:45:28 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.04.2 LTS
Release: 18.04
Codename: bionic
ekzorchik@srv-bionic:~
Шаг №2: Устанавливаю пакет Oxidized
в систему Ubuntu 18.04 Server amd64:
ekzorchik@srv-bionic:~$ sudo apt-get install ruby ruby-dev libsqlite3-dev libssl-dev pkg-config cmake libssh2-1-dev libicu-dev -y ekzorchik@srv-bionic:~$ gem install oxidized oxidized-script oxidized-web
Fetching: asetus-0.3.0.gem (100%)
ERROR: While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /var/lib/gems/2.5.0 directory.
ekzorchik@srv-bionic:~$ sudo gem install oxidized oxidized-script oxidized-web
Done installing documentation for charlock_holmes, rack, tilt, rack-protection, sinatra, emk-sinatra-url-for, temple, haml, htmlentities, puma, rb-fsevent, ffi, rb-inotify, sass-listen, sass, backports, rack-test, multi_json, sinatra-contrib, oxidized-web after 675 seconds
22 gems installed
ekzorchik@srv-bionic:~$
Шаг №3: Cоздаю пользователя oxidized
, с правами которого будет запускаться система бэкапа:
ekzorchik@srv-bionic:~$ sudo useradd -m -p 712mbddr@ -s /bin/bash oxidized
На время даю права повышения привилегий, в конце заметки заберу.
ekzorchik@srv-bionic:~$ sudo usermod -aG sudo oxidized
Шаг №4: Создаю структуру запуска приложения oxidized
ekzorchik@srv-bionic:~$ sudo su - oxidized
oxidized@srv-bionic:~$ oxidized -v
0.26.1
oxidized@srv-bionic:~$
oxidized@srv-bionic:~$ whereis oxidized
oxidized: /usr/local/bin/oxidized
oxidized@srv-bionic:~$ oxidized
edit ~/.config/oxidized/config
oxidized@srv-bionic:~$ mkdir ~/.config/oxidized/crashes
oxidized@srv-bionic:~$ mkdir ~/.config/oxidized/mikrotik/
oxidized@srv-bionic:~$ sudo find / -name oxidized
/home/oxidized
/home/oxidized/.config/oxidized
/run/sudo/ts/oxidized
/usr/local/bin/oxidized
/var/lib/gems/2.5.0/gems/oxidized-web-0.13.1/lib/oxidized
/var/lib/gems/2.5.0/gems/oxidized-0.26.1/lib/oxidized
/var/lib/gems/2.5.0/gems/oxidized-0.26.1/bin/oxidized
/var/lib/gems/2.5.0/gems/oxidized-script-0.6.0/lib/oxidized
/var/lib/gems/2.5.0/doc/oxidized-web-0.13.1/ri/lib/oxidized
oxidized@srv-bionic:~$
Шаг №5: Преднастраиваем GIT
для устройств Mikrotik
бекапы которых будут хранится в репозитарии:
oxidized@srv-bionic:~$ sudo apt-get install git -y
oxidized@srv-bionic:~$ git config --global user.email "oxidized@ekzorchik.ru"
oxidized@srv-bionic:~$ git config --global user.name "oxidized"
oxidized@srv-bionic:~/.config/oxidized$ git init oxidized.git
Initialized empty Git repository in /home/oxidized/.config/oxidized/oxidized.git/.git/
oxidized@srv-bionic:~/.config/oxidized$ git init devices.git
Initialized empty Git repository in /home/oxidized/.config/oxidized/devices.git/.git/
Шаг №6: Настраиваем конфигурационный файл
oxidized@srv-bionic:~$ nano ~/.config/oxidized/config
--- model: routeros resolve_dns: true #Как часто делать бекапы interval: 3600 use_syslog: false debug: false threads: 30 timeout: 20 retries: 3 prompt: !ruby/regexp /^([\w.@-]+[#>]\s?)$/ rest: 0.0.0.0:8888 next_adds_job: false vars: {} groups: {} models: {} pid: "/home/oxidized/.config/oxidized/pid" log: "/home/oxidized/.config/oxidized/log" crash: directory: "/home/oxidized/.config/oxidized/crashes" hostnames: false stats: history_size: 10 input: #Тип подключения к устройству default: ssh #Расширенное логирование отключено debug: false ssh: secure: false map: verify_host_key: never utf8_encoded: true #где хранится конфигурации GIT output: default: git git: user: oxidized email: oxidized@ekzorchik.ru repo: "/home/oxidized/.config/oxidized/oxidized.git" git: user: oxidized email: oxidized@ekzorchik.ru repo: "/home/oxidized/.config/oxidized/devices/devices.git" #Откуда берется информация об устройства которые бекапятся source: default: csv csv: file: "/home/oxidized/.config/oxidized/mikrotik/router.db" delimiter: !ruby/regexp /:/ #Структура строки в router.db: name:model:ip:port:username:password map: name: 0 model: 1 ip: 2 port: 3 username: 4 password: 5 model_map: cisco: ios juniper: junos mikrotik: routeros
На заметку: Если не настроена авторизация на Mikrotik
через публичный ключ, т. е. Вход на Mikrotik
с одним лишь указанием логина, то в конфигурационный файл oxidized
следует добавить параметр: verify_host_key: never
Шаг №7: Копируем публичный ssh
–ключ на Mikrotik:
oxidized@srv-bionic:~$ ssh-keygen
Your identification has been saved in /home/oxidized/.ssh/id_rsa.
Your public key has been saved in /home/oxidized/.ssh/id_rsa.pub.
oxidized@srv-bionic:~$ cp ~/.ssh/id_rsa.pub idrsa oxidized@srv-bionic:~$ ftp 172.33.33.22
Connected to 172.33.33.22.
220 MikroTik FTP server (MikroTik 6.42.5) ready
Name (172.33.33.22:ekzorchik): admin
ftp> put idrsa
ftp> quit
oxidized@srv-bionic:~$ oxidized@srv-bionic:~$ ssh admin@172.33.33.22 [admin@MikroTik] > user ssh-keys import public-key-file=idrsa user=test [admin@MikroTik] > quit
Connection to 172.33.33.22 closed.
oxidized@srv-bionic:~$
oxidized@srv-bionic:~$ ssh test@172.33.33.22
— подключение проходит без каких либо запросов на ввод пароля.
Шаг №8: Теперь создаю файл подключения к оборудованию Mikrotik:
oxidized@srv-bionic:~$ nano ~/.config/oxidized/mikrotik/router.db mikrotik:routeros:172.33.33.22:22:test:Aa1234567
Шаг №9: Проверяю запуск и соответственно на предмет каких-либо ошибок препятствующих запуску:
oxidized@srv-bionic:~$ oxidized ~/.config/oxidized/config
Puma starting in single mode...
* Version 3.11.4 (ruby 2.5.1-p57), codename: Love Song
* Min threads: 0, max threads: 16
* Environment: development
* Listening on tcp://0.0.0.0:8888
Use Ctrl-C to stop
У каждой строчке есть колонка «Actions
»
- Первая иконка: Посмотреть текущий конфигурационный файл
- Вторая иконка: Посмотреть историю изменений конфигурационного файла
- Третья иконка: Это запуск процедуры снятия изменения в репозитарий
Шаг №10: См.логи если что-то пошло не так
ekzorchik@srv-bionic:~$ tail -f /home/oxidized/.config/oxidized/log
W, [2019-03-04T11:34:49.491810 #28328] WARN -- : /mikrotik status no_connection, retries exhausted, giving up
I, [2019-03-04T11:36:11.666786 #28380] INFO -- : Oxidized starting, running as pid 28380
I, [2019-03-04T11:36:11.669229 #28380] INFO -- : lib/oxidized/nodes.rb: Loading nodes
I, [2019-03-04T11:36:11.812262 #28380] INFO -- : lib/oxidized/nodes.rb: Loaded 1 nodes
I, [2019-03-04T11:36:14.351899 #28380] INFO -- : Configuration updated for /mikrotik
Шаг №11: Для того, чтобы oxidized
стартовал как служба, сделайте следующее:
oxidized@srv-bionic:~$ sudo find / -name oxidized.service
/var/lib/gems/2.5.0/gems/oxidized-0.26.1/extra/oxidized.service
oxidized@srv-bionic:~$ sudo cp /var/lib/gems/2.5.0/gems/oxidized-0.26.1/extra/oxidized.service /lib/systemd/system/
oxidized@srv-bionic:~$ sudo nano /lib/systemd/system/oxidized.service
[Unit] Description=Oxidized - Network Device Configuration Backup Tool After=network-online.target multi-user.target Wants=network-online.target [Service] ExecStart=/usr/local/bin/oxidized User=oxidized KillSignal=SIGKILL Environment="OXIDIZED_HOME=/home/oxidized/.config/oxidized/" [Install] WantedBy=multi-user.target
oxidized@srv-bionic:~$ sudo systemctl enable oxidized.service
Created symlink /etc/systemd/system/multi-user.target.wants/oxidized.service → /lib/systemd/system/oxidized.service.
oxidized@srv-bionic:~$ sudo systemctl start oxidized
oxidized@srv-bionic:~$ sudo systemctl status oxidized | head -n5
● oxidized.service - Oxidized - Network Device Configuration Backup Tool
Loaded: loaded (/lib/systemd/system/oxidized.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2019-03-04 12:16:53 MSK; 9s ago
Main PID: 29039 (oxidized)
Tasks: 7 (limit: 2322)
Проверяю, что ожидаются соединения на порт 8888
oxidized@srv-bionic:~$ sudo netstat -tulpn | grep :8888
tcp 0 0 127.0.0.1:8888 0.0.0.0:* LISTEN 29039/puma 3.11.4 (
oxidized@srv-bionic:~$
Шаг №12: По умолчанию у сервиса нет возможности указать авторизацию, а потому в конфиге config
изменяю доступ на 172.0.0.1
oxidized@srv-bionic:~$ nano ~/.config/oxidized/config
#rest: 0.0.0.0:8888 rest: 127.0.0.1:8888
oxidized@srv-bionic:~$ sudo apt-get install nginx -y
oxidized@srv-bionic:~$ sudo rm /var/www/html/index.nginx-debian.html
oxidized@srv-bionic:~$ sudo unlink /etc/nginx/sites-available/default
oxidized@srv-bionic:~$ sudo unlink /etc/nginx/sites-enabled/default
Создаю файл связки логина и пароля для аутентификации через Web
–интерфейс:
oxidized@srv-bionic:~$ sudo sh -c "echo -n 'ekzorchik:' >> /var/www/html/.htpasswd"
oxidized@srv-bionic:~$ openssl passwd -apr1
Password: 712mbddr@
Verifying - Password: 712mbddr@
$apr1$rwseclUD$ANBsXcpdvR.07mthC2PLO.
oxidized@srv-bionic:~$ sudo sh -c "openssl passwd -apr1 >> /var/www/html/.htpasswd"
Password: 712mbddr@
Verifying - Password: 712mbddr@
oxidized@srv-bionic:~$ cat /var/www/html/.htpasswd
ekzorchik:$apr1$V6ZTHWcF$bdDbxqPJAQAzfdXw7Z9n/0
oxidized@srv-bionic:~$ sudo chown -R www-data:www-data /var/www/html/.htpasswd
oxidized@srv-bionic:~$ sudo nano /etc/nginx/sites-available/oxidized
server { listen 172.33.33.4:80; server_name _; root /usr/share/nginx/html; include /etc/nginx/default.d/*.conf; location / { auth_basic "UserName and Password Please"; auth_basic_user_file /var/www/html/.htpasswd; proxy_pass http://127.0.0.1:8888/; } }
oxidized@srv-bionic:~$ sudo ln -s /etc/nginx/sites-available/oxidized /etc/nginx/sites-enabled/oxidized
oxidized@srv-bionic:~$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
oxidized@srv-bionic:~$ sudo systemctl restart nginx && sudo systemctl status nginx | head -n5
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2019-03-04 12:19:27 MSK; 34ms ago
Docs: man:nginx(8)
Process: 29084 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid (code=exited, status=0/SUCCESS)
oxidized@srv-bionic:~$
Работает! Итого я для себя разобрал, как использовать инструмент oxidized
на Ubuntu 18.04 Server amd64
для создания резервных копий с оборудования Mikrotik
и просмотра внесенных изменений через Web
-интерфейс с применением системы контроля версий на базе GIT
. Жалко что нельзя использовать Mercurial
— мне данная система контроля версий ближе, у меня все на ней построено: скрипты, конфигурационные файлы и т. д. А пока на этом у меня всё, с уважением автор блога Олло Александр aka ekzorchik.