Много времени прошло с того момента, как я начал использовать Oxidized для резервного копирования настроек сетевого оборудования Mikrotik, а именно моя заметка «Резервное копирование Mikrotik через Oxidized» /  датируется, а ж 05/03/2019, а уже 13.10.2019, хочу еще раз пройтить по всем шагам установки Oxidized на Ubuntu 18.04 Server, а то как бывает — проходит время, что раньше было просто сейчас с учетом последний изменений становится неактуальным. А я за актуальность того, чем пользуюсь.

ekzorchik@srv-bionic:~$ hg clone --insecure https://ekzorchik@172.35.35.8/hg/dproject

На заметку: В данном скрипте настройки системы присутствуют команды: rm -rf /var/lib/apt/lists && apt-get update && apt-get upgrade и кое что присущее только моим системам.

ekzorchik@srv-bionic:~$ sudo ./dproject/default

ekzorchik@srv-bionic:~$ sudo reboot

ekzorchik@navy:~$ ssh -l ekzorchik 172.33.33.106

ekzorchik@srv-bionic:~$ uname -a && lsb_release -a

Linux srv-bionic 4.15.0-60-generic #67-Ubuntu SMP Thu Aug 22 16:55:30 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

No LSB modules are available.

Distributor ID:      Ubuntu

Description: Ubuntu 18.04.3 LTS

Release:      18.04

Codename: bionic

ekzorchik@srv-bionic:~$

Итак, выше это текущая система на момент написания данной заметки (самая актуальная).

Прежде чем начать разбор последних шагов поднятия и настройки сервиса oxidized необходимы выполнить следующие условия: Т.к. осуществлять резервное копирование буду только сетевое оборудование фирмы Mikrotik, то на них всех нужно создать учетную запись и включить ее только в группу read.

ekzorchik@srv-bionic:~$ ssh -l admin 172.33.33.3

[admin@vizitka] > user add name=test password=Aa1234567 group=read

[admin@vizitka] > quit

Connection to 172.33.33.23 closed.

ekzorchik@srv-bionic:~$

Шаг №1: Устанавливаю пакет 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, rack-protection, tilt, sinatra, emk-sinatra-url-for, temple, haml, htmlentities, puma, ffi, rb-inotify, rb-fsevent, sass-listen, sass, multi_json, rack-test, backports, sinatra-contrib, oxidized-web after 336 seconds

26 gems installed

Шаг №2: Далее понадобиться пользователь от имени которого и будет работать сервис oxidized:

ekzorchik@srv-bionic:~$ sudo useradd -m -p 712mbddr@ -s /bin/bash oxidized

ekzorchik@srv-bionic:~$ sudo usermod -aG sudo oxidized

ekzorchik@srv-bionic:~$ cat /etc/group | grep oxidized

sudo:x:27:ekzorchik,oxidized

oxidized:x:1001:

ekzorchik@srv-bionic:~$ sudo passwd oxidized

Enter new UNIX password: 712mbddr@

Retype new UNIX password: 712mbddr@

passwd: password updated successfully

Шаг №3: Теперь формирую структуру приложения oxidized:

ekzorchik@srv-bionic:~$ sudo su - oxidized

oxidized@srv-bionic:~$ oxidized -v

0.26.3

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/

Шаг №4: Преднастраиваю 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:~$ cd .config/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$

oxidized@srv-bionic:~/.config/oxidized$ git init devices.git

Initialized empty Git repository in /home/oxidized/.config/oxidized/devices.git/.git/

oxidized@srv-bionic:~/.config/oxidized$ cd ~/

Шаг №5: Настраиваем конфигурационный файл

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

Шаг №6: Теперь создаю файл подключения к оборудованию Mikrotik:

oxidized@srv-bionic:~$ nano ~/.config/oxidized/mikrotik/router.db

vizitka:routeros:172.33.33.3:22:test:Aa1234567

Шаг №7: Проверяю запуск и соответственно на предмет каких-либо ошибок препятствующих запуску:

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

Проверяю запуск сервиса oxidized

Но как видно сервис Oxidized не подключился к моему Mikrotik, разбираюсь почему:

oxidized@srv-bionic:~$ tail -f .config/oxidized/log

W, [2019-10-15T10:05:12.358878 #17621]  WARN -- : 172.33.33.3 raised Net::SSH::AuthenticationFailed with msg "Authentication failed for user test@172.33.33.3"

W, [2019-10-15T10:05:13.186749 #17621]  WARN -- : /vizitka status no_connection, retries exhausted, giving up

Так, а почему нет подключения?

oxidized@srv-bionic:~$ ssh -l test 172.33.33.3

The authenticity of host '172.33.33.3 (172.33.33.3)' can't be established.

RSA key fingerprint is SHA256:vo+u81FFeGjcbsyrP/8uom0RTitx5o3DTR43jpNitd0.

Are you sure you want to continue connecting (yes/no)?

А вот же, не настроено подключение от сервиса к Mikrotik(у) через публичный ключ, исправляюсь:

Шаг №8: Копируем публичный 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.3

Connected to 172.33.33.3.

220 vizitka FTP server (MikroTik 6.45.2) ready

Name (172.33.33.3:ekzorchik): admin

Password: нажимаю клавишу Enter, т.к. на учетную запись admin у меня нет пароля.

230 User admin logged in

Remote system type is UNIX.

ftp>

ftp> put idrsa

local: idrsa remote: idrsa

200 PORT command successful

150 Opening ASCII mode data connection for '/idrsa'

226 ASCII transfer complete

402 bytes sent in 0.00 secs (9.8302 MB/s)

ftp>

ftp> quit

221 Closing

oxidized@srv-bionic:~$

Подключаюсь на Mikrotik и импортирую загруженный через ftp публичный ключ:

oxidized@srv-bionic:~$ ssh admin@172.33.33.3

The authenticity of host '172.33.33.3 (172.33.33.3)' can't be established.

RSA key fingerprint is SHA256:vo+u81FFeGjcbsyrP/8uom0RTitx5o3DTR43jpNitd0.

Are you sure you want to continue connecting (yes/no)? yes

[admin@vizitka] > user ssh-keys import public-key-file=idrsa user=test

[admin@vizitka] > quit

interrupted

Connection to 172.33.33.3 closed.

oxidized@srv-bionic:~$

А теперь проверяю, могу ли я подключиться к Mikrotik(у) из под учетной записи test от имени которой будет сниматься резервная копия конфигурации Mikrotik:

oxidized@srv-bionic:~$ ssh test@172.33.33.3 "system resource print"

uptime: 5w4d18h29m29s

version: 6.45.2 (stable)

build-time: Jul/17/2019 10:04:19

factory-software: 6.42.3

free-memory: 194.6MiB

total-memory: 256.0MiB

cpu: ARMv7

cpu-count: 4

cpu-frequency: 716MHz

cpu-load: 12%

free-hdd-space: 2160.0KiB

total-hdd-space: 15.3MiB

write-sect-since-reboot: 1381

write-sect-total: 7137

bad-blocks: 0%

architecture-name: arm

board-name: hAP ac^2

platform: MikroTik

oxidized@srv-bionic:~$ — подключение проходит без каких либо запросов на ввод пароля.

Шаг №9: Возвращаюсь к тесту сервиса, но раз подключение будет происходить через публичный ключ то в конфигурационном файле config следует закомментировать строку #password: 5, а в файле в котором указываем к кому подключаться в плане съема конфигурации убираем пароль, оставляем только:

oxidized@srv-bionic:~$ nano ~/.config/oxidized/mikrotik/router.db

oxidized@srv-bionic:~$ nano ~/.config/oxidized/config

vizitka:routeros:172.33.33.3:22:test

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

Проверяю, через браузер если обратиться к IP адресу сервера, где развернут сервис oxidized:

Сервис oxidized успешно запущен и подключился к Mikrotik(у)

Вот теперь все хорошо, сервис успешно достучался.

У каждой строчки сервис Oxidized который подключился к Mikrotik есть колонка действий «Actions»:

У каждой строчки сервис Oxidized который подключился к Mikrotik есть колонка действий «Actions»:

Первая иконка: Посмотреть текущий конфигурационный файл

Первая иконка: Посмотреть текущий конфигурационный файл

Вторая иконка: Посмотреть историю изменений конфигурационного файла – это если было сделано несколько изменений в настройках Mikrotik и был снят бекап.

Посмотреть историю изменений конфигурационного файла

Третья иконка: Это запуск процедуры снятия изменения в репозитарий

Третья иконка: Это запуск процедуры снятия изменения в репозитарий

Шаг №10: Теперь нужно произвести настройка запуска oxidized, как служба:

oxidized@srv-bionic:~$ sudo find / -name oxidized.service

[sudo] password for oxidized:

/var/lib/gems/2.5.0/gems/oxidized-0.26.3/extra/oxidized.service

oxidized@srv-bionic:~$ sudo cp /var/lib/gems/2.5.0/gems/oxidized-0.26.3/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

[sudo] password for oxidized:

● oxidized.service - Oxidized - Network Device Configuration Backup Tool

Loaded: loaded (/lib/systemd/system/oxidized.service; enabled; vendor preset: enabled)

Active: active (running) since Tue 2019-10-15 10:28:03 MSK; 34s ago

Main PID: 17814 (oxidized)

Tasks: 7 (limit: 2337)

oxidized@srv-bionic:~$

Проверяю, что ожидаются соединения на порт 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:~$

Шаг №11:  По умолчанию у сервиса нет возможности указать авторизацию, а потому в конфиге 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$EoBFJtQB$GjxGGtY4a4WmiMfKVLgbC/

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$39KLGXVK$fyocSP6s5t1peByrpdCOg.

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.106: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

● 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 Tue 2019-10-15 10:34:12 MSK; 12ms ago

Docs: man:nginx(8)

Process: 18337 ExecStop=/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid (code=exited, status=0/SUCCESS)

Process: 18339 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)

Process: 18338 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)

Main PID: 18341 (nginx)

Tasks: 3 (limit: 2337)

CGroup: /system.slice/nginx.service

├─18341 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;

├─18342 nginx: worker process

└─18343 nginx: worker process

Oct 15 10:34:12 srv-bionic systemd[1]: Starting A high performance web server and a reverse proxy server...

Oct 15 10:34:12 srv-bionic systemd[1]: Started A high performance web server and a reverse proxy server.

oxidized@srv-bionic:~$

Проверяю, обращаюсь через браузер по URL адресу сервера с сервисом oxidized и указываю:

  • Имя пользователя: ekzorchik
  • Пароль: 712mbddr@

И нажимаю «Вход».

Доступ к сервису Oxidized через Basic Auth

И вот я успешно зашел на сервис Oxidized:

Авторизовавшись получаю доступ к сервису Oxidized

Так это был один Mikrotik, а добавим еще один:

oxidized@srv-bionic:~$ ftp 172.33.33.1

Connected to 172.33.33.1.

220 ekzorchik FTP server (MikroTik 6.45.2) ready

Name (172.33.33.1:ekzorchik): ekzorchik

331 Password required for ekzorchik

Password:

230 User ekzorchik logged in

Remote system type is UNIX.

ftp> put idrsa

local: idrsa remote: idrsa

200 PORT command successful

150 Opening ASCII mode data connection for '/idrsa'

226 ASCII transfer complete

402 bytes sent in 0.00 secs (18.2561 MB/s)

ftp> quit

221 Closing

oxidized@srv-bionic:~$

oxidized@srv-bionic:~$ ssh -l ekzorchik 172.33.33.1

[ekzorchik@ekzorchik] > user add name=test group=read password=Aa1234567

[ekzorchik@ekzorchik] > quit

oxidized@srv-bionic:~$ ssh -l test 172.33.33.1 "system routerboard print"

routerboard: yes

model: 2011UiAS-2HnD

serial-number: 614A052CFEA6

firmware-type: ar9344

factory-firmware: 3.22

current-firmware: 6.45.2

upgrade-firmware: 6.45.2

oxidized@srv-bionic:~$

oxidized@srv-bionic:~$ nano ~/.config/oxidized/mikrotik/router.db

vizitka:routeros:172.33.33.3:22:test

ekzorchik:routeros:172.33.33.1:22:test

oxidized@srv-bionic:~$ sudo systemctl restart oxidized && 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 Tue 2019-10-15 10:44:21 MSK; 14ms ago

Main PID: 18372 (oxidized)

Tasks: 2 (limit: 2337)

oxidized@srv-bionic:~$

Проверяю – и вижу теперь уже два сетевых устройств в сервисе которые занимается бекапирование конфигураций подконтрольных Mikrotik(ов):

Сервис Oxidized обслуживает более 1 Mikrotik(а)

См. а сколько памяти требуется сервису:

xidized@srv-bionic:~$ free -m

total        used        free      shared  buff/cache   available

Mem:           1993         115         259           0        1617        1686

Swap:           979           0         979

oxidized@srv-bionic:~$

итого используется всего лишь 259Mb, раз так, что в моем случаем на моем домашнем сервере под управлением HP MicroServer Gen8 добавить еще одно описание к существующему сервису, к примеру, где у меня работает wiki не будет лишнем, а профит я получу. Теперь мне не нужно заботиться о ручном снятии резервных копий и следить за изменениями – за меня это делает сервис Oxidized.

На заметку: от 22.03.2023 — разобрал установку Oxidized на Ubuntu 22.04 Server, есть заметка на этот счет.

Вот опять я на основе ранее разобранного и применяемого обновил заметку по использованию oxidized в своей локальной/корпоративной сети. Заметка работоспособна. На этом у меня всё, с уважением автор блога Олло Александр aka ekzorchik.