Много времени прошло с того момента, как я начал использовать 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
не подключился к моему 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
есть колонка действий «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
:
Так это был один 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(ов):
См. а сколько памяти требуется сервису:
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.