User Guide

Backup Manager — install & user guide

Backup Manager takes the configuration off every switch, router, firewall and server you own, on a schedule, and tells you when one of them changes. This guide takes you from a bare Ubuntu or CentOS machine to a working installation with one command, then through everything you will use day to day.

Product
Backup Manager
Prepared by
Optimus Secure
Version
1.0 — September 2026
Overview

What it is

One place that holds the configuration of everything on your network, and shows you what changed.

Every device on your network holds a configuration that took someone a long time to get right. Backup Manager logs in to each of them on a schedule, takes that configuration away, and keeps every version it has ever seen. When a device fails you restore from last night. When something stops working you look at what changed and when.

It talks to equipment over SSH, including older kit that only accepts legacy ciphers, over Telnet for devices that offer nothing else, and over HTTP/HTTPS for firewalls with a config-export API. It runs on your own server — no cloud, no agent on the devices.

Scheduled backups Change detection Version history Compliance rules Restore PDF reports Off-site copies Health & alerts REST API
The dashboard — device and backup counts, storage used, server CPU, RAM and disk, and recent jobs.

The dashboard — device and backup counts, storage used, server CPU, RAM and disk, and recent jobs.

Installation

Before you start

One server and about five minutes. Everything else is installed for you.

Operating systemUbuntu 20.04 / 22.04 / 24.04 LTS, Debian 11 / 12, or CentOS / RHEL / Rocky / Alma 8, 9 or 10
CPU and memory2 cores and 2 GB RAM is comfortable for a few dozen devices
DiskDepends on what you back up. Network device configs are tiny; a server file tree is not
NetworkThe server needs to reach your devices on SSH (22), Telnet (23) or HTTPS — whichever each device uses
InternetNeeded once, to install Node.js and fetch the licence. Air-gapped installs are supported — see Your Licence
Node.js, build toolsNot required beforehand — the installer adds whatever is missing
Root accessThe installer needs sudo
⚠️
Install this on a machine that is not one of the devices you are backing up. If the server it runs on dies, you want the backups somewhere else.
Installation

Install in one command

Copy this into your terminal. It installs everything and starts the service.

root@server — terminal
$ curl -fsSL https://opsec.co.in/opsec/backup-manager/get.sh | sudo bash
✅
That single line does everything. There is no second step. When it finishes it prints the address to open.
1

Run the command

It works out whether this is an Ubuntu- or CentOS-family system, installs Node.js and any build tools that turn out to be needed, creates a locked-down service account, generates secrets, and registers a systemd service that starts at boot.

2

Wait for it to report healthy

Two to five minutes on a fresh server, most of it downloading dependencies. The installer checks the service actually answers before it tells you it succeeded — if it does not, it shows you the log rather than claiming success.

3

Open the dashboard

Browse to the address it prints — http://your-server-ip:3000.

🔔
If something on this server already uses port 3000, the installer tells you what is on it and asks:
Port 3000 is already in use. Please enter a free port: [3001]
Press Enter to take the port it suggests, or type one of your own — it is checked before the install continues, so you cannot pick one that will not work. Add --yes and it chooses without asking. Either way, the address to open is in the summary at the end.
🔥
If a firewall is active the installer offers to open the port it chose. To do it yourself later, using that port in place of 3000: sudo ufw allow 3000/tcp on Ubuntu, or sudo firewall-cmd --permanent --add-port=3000/tcp && sudo firewall-cmd --reload on CentOS.

Want a different port or a different place for the data? Pass them in:

root@server — terminal
$ sudo ./install.sh --port 8443 --data-dir /srv/backups --yes
Installation

What gets installed, and where

Code and data are kept apart on purpose, so updates can be swapped in and rolled back cleanly.

Configuration/etc/optimus-backup-manager/backup-manager.env
Database and backups/var/lib/optimus-backup-manager
Program files/opt/optimus/backup-manager/current
Servicesystemctl status backup-manager
Logsjournalctl -u backup-manager -f
Update commandsudo backup-manager-update
🔑
Keep a copy of the configuration file somewhere safe. It contains DATA_KEY, which encrypts every device password you store. It cannot be recovered — if you lose it, you will have to re-enter every credential.
Installation

First login

One account exists to begin with. Change its password before you do anything else.

Addresshttp://your-server-ip:3000
Usernameadmin
Passwordadmin123
🔒
Change this immediately — top right, your name, then Change Password. This installation will hold the credentials to your entire network.

Once you are in, go to Settings and set the password policy, session timeout and login lockout to whatever your organisation requires.

Installation

Your licence

A fresh installation licenses itself for 15 days. There is no key to type in.

When the service first starts it contacts the Optimus Secure licence server and is issued a 15-day trial. The clock starts then, not when the licence was created, so a trial is always a full trial. The Licence page in the sidebar shows what you have and how long is left.

To continue past the trial, talk to us and we will extend the term. You do not have to do anything on your server — the installation picks up the new term on its next check, within a few hours. You can force it immediately with Check now on the Licence page.

The Licence page — plan, expiry, device usage, machine fingerprint and what is available.

The Licence page — plan, expiry, device usage, machine fingerprint and what is available.

No internet on this server? Open the Licence page, copy the machine fingerprint and send it to us. We will send back a signed licence file that you paste under Offline activation. It is tied to that one machine and needs no network at all, ever.

📦
If a licence lapses, new backups pause — but everything already collected stays available. You can still view, download, compare and restore every configuration you have. Your history is yours. The Licence page lists exactly what is paused and what is not.
Setting Up

Store your credentials once

Most networks use the same few logins across many devices. Save them once and reuse them.

Go to Credentials and add each login you use — a username with a password, or an SSH private key with its passphrase, plus an enable password where the device needs one. Everything is encrypted before it is written to disk.

When you add a device you can then just pick a saved credential instead of typing it again. Changing a password later means editing it in one place rather than on forty devices.

Setting Up

Adding your first device

Test the connection before you trust the schedule.

1

Open Devices and choose Add Device

Give it a name you will recognise later, its address, and the port if it is not the default.

2

Pick how it should be reached

Choose a saved credential, or enter a username and password here. For older equipment, turn on legacy algorithms so the connection negotiates the way PuTTY would.

3

Choose a backup mode

See Backup Modes below. For a switch or router, a device profile is almost always the right answer.

4

Use Test Connection

This logs in and reports what it found without saving anything. Fix any problem now rather than discovering it at 2am.

5

Save, then Backup Now

Run one manual backup and check the result under Backup Storage before you rely on the schedule.

The Devices page — every device with its host, platform, mode, schedule and retention.

The Devices page — every device with its host, platform, mode, schedule and retention.

Setting Up

Adding many devices

Scan the subnet, tick what you want, add it.

On Devices, press Discover and give it a subnet in CIDR form, for example 172.26.10.0/24. It checks TCP 22, 23, 443 and 80 on every address and lists what answered, with the SSH banner where there is one. A /24 takes about a minute. Anything already in Backup Manager is marked already added so it cannot go in twice.

Choosing what to add

Tick the ones you want, or press Select all new and untick the few you do not. Every row also has Add this one: that opens the ordinary Add Device form with the address already filled in, so a single device gets every option that form has.

Adding a batch offers the same settings — platform, what to back up (including HTTP), exclude patterns, the enable password, schedule, retention, parallel sessions, tags, and whether they start enabled or paused.

One login for the lot

A rack of switches usually shares one account, so the form asks how to log in before anything else:

Use a saved credential setPick one that already exists. Every device added points at it.
Create a new credential setName it, give the username and password, and it is created as you add. Changing that password later updates every device using it, which is the reason to prefer this over typing the login onto each device.
Just for theseA username and password stored on the devices themselves, with no shared set.

Choosing a saved set takes the username and password fields away and tells you which account it will use — the set supplies the login, so there is nothing to type. Everything else can be changed per device afterwards.

Naming the kind of device

The Platform list is a label used for grouping and for reading the device list, and it is not fixed. Choose + Add a platform… in any platform list, give it a name, and it is there from then on — for the switch vendor, appliance or box that is not in the list as shipped.

Manage the ones I added… in the same list removes them again. The names that came with Backup Manager stay, and one still in use by a device is kept until those devices are changed.

🔔
Nothing is contacted while adding — the devices are simply created. Run Backup Now on one of them, or use Test Connection, to check the login actually works before the first scheduled run.

There is also Import CSV next to Discover, for when the list comes from somewhere else.

Setting Up

Backup modes — which one to use

Four ways to get a configuration off a device. Pick by what the device is.

Device profileFor switches, routers, firewalls and wireless controllers. Runs a known command sequence — log in, enable, disable the pager, show the running config. This is the right choice for nearly all network equipment.
PathsFor Linux and Windows servers. Copies the directories you name over SFTP into a ZIP archive. Use the tree picker to choose exactly what to include and skip the parts you do not need.
CommandFor anything with a one-off command that prints what you want, such as a custom export script.
HTTP/HTTPSFor firewalls and appliances with a config-export endpoint — FortiGate, Palo Alto, Sophos, pfSense and similar. Supports basic auth, bearer tokens, API keys and form logins.
💡
Backing up a large server? Open the tree picker and exclude the directories that do not matter — skipping something like node_modules can turn a twenty-minute job into a two-minute one. Large trees are pulled over several SSH sessions at once, which you can tune per device.
Setting Up

Device profiles

Command sequences for common equipment, and a way to write your own.

Profiles for Cisco IOS, Juniper, Aruba, MikroTik, D-Link, Sophos, Cambium and Ruckus are built in. Each one knows how to log in, get to enable mode, turn off the --More-- pager and print the configuration.

If your device is not covered, open Device Profiles and build one: add each step as a command with the prompt to wait for. You can copy an existing profile and adjust it, which is usually quicker than starting from nothing.

Device Profiles — built-in command sequences, and your own alongside them.

Device Profiles — built-in command sequences, and your own alongside them.

🔌
Devices that only speak Telnet are handled too. Set the profile transport to Telnet and it negotiates the session and answers pager prompts the same way.
Setting Up

Schedules

Pick a time per device. They stagger themselves so the network is not hit all at once.

Each device has its own schedule, chosen from a time picker rather than written as a cron expression. Give different devices different times — or give them the same time and let the built-in stagger spread them out, so forty switches do not all get hit on the same second.

A job that fails retries on its own, with a growing gap between attempts. Jobs that are queued or running appear under Running Tasks with a live percentage, so you can watch a large copy progress instead of wondering whether it has hung.

Running Tasks — what is queued, what is running, and how far along it is.

Running Tasks — what is queued, what is running, and how far along it is.

Day To Day

Changes and version history

The question this product exists to answer: what changed, where, and when.

Every capture is compared with the one before it. If the configuration is identical, the existing version is marked as seen again. If it differs, a new version is stored and the device appears on the Changes page with the number of lines added and removed.

Open any change to see a line-by-line diff. Open any device to walk back through its full history and compare any two versions — last night against last month, or before and after a maintenance window.

Configuration Changes — which devices changed, when, and how much.

Configuration Changes — which devices changed, when, and how much.

Day To Day

Compliance rules

Check stored configurations against the standards you are supposed to be meeting.

Rules are patterns that a configuration must or must not contain — telnet still enabled, no AAA configured, SNMP using a default community string, logging not pointed anywhere. A set of sensible rules ships with the product and you can add your own with a severity.

Run the check across every device, against a single device, or against one specific stored configuration. That last one lets you answer "was this device compliant in March?" — and because it is a look back at history, the result is shown but not saved, so the dashboard keeps reflecting how things stand today.

Compliance — rule results per device, with the exact line that failed.

Compliance — rule results per device, with the exact line that failed.

📄
Any compliance run can be turned into a PDF from the same page — for the whole estate or one device — which is usually what an auditor actually wants.
Day To Day

Stored backups

Everything collected, searchable, with the configuration readable in place.

Backup Storage lists every archive with its size, status and when it finished. For network devices you can read the captured configuration in the browser without downloading anything. For server backups you can look inside the archive and pull out a single file rather than fetching gigabytes.

Backup Storage — every stored archive, with view, download and delete on each row.

Backup Storage — every stored archive, with view, download and delete on each row.

Day To Day

Restoring a configuration

Push a stored version back to a device — with a dry run first.

1

Find the version you want

Open the device history and pick the version from before things went wrong.

2

Run it as a dry run first

This shows you exactly which commands would be sent, without sending them. Read that list before you go further.

3

Apply it

The commands are sent and the whole session transcript is recorded, so there is a record of precisely what was done and how the device replied.

⚠️
Restoring rewrites a live device. Do it in a maintenance window, and make sure you have a way back in if the change cuts your own access — console or out-of-band.
Day to Day

Config Push

The same change, on many devices, without typing it many times.

Open Config Push. The page is three steps on one screen: what to send, where to send it, and what happens around it.

1 · What to send

Type the commands one per line, exactly as you would type them into PuTTY. Nothing is added or rewritten — if the change needs enable, configure terminal and write memory, those are lines you type. A line starting with # is a note to yourself and is not sent.

A command can carry values that differ per device: {{name}}, {{host}}, {{username}}, {{platform}} and {{tags}}. Sets you use often can be saved by name and loaded again.

🔔
If a device asks for a password after enable, the enable password already stored for that device is sent for you — so it never has to be typed into the box. Passwords written into a command do reach the device as typed, but are masked (********) in the record kept afterwards.

2 · Where to send it

Tick the devices. Search by name or address, narrow by platform, or use Select shown to take everything the filter is showing. Nothing is ever sent to "all devices" by default — the Push button stays disabled until you have chosen, and it tells you how many it will reach.

3 · Try it on one device first

Try on one device opens a live session to a single device from your selection. Press Run my commands here and you watch the device answer line by line. There is a box at the bottom to type anything else you want to check, and the session stays open while you do. When it looks right, Looks good — push to N takes you straight to the rest.

This is the same code that runs the real push, so what you see here is what the other devices will do.

Just opening a device

Every device in the list has a Console button, and there is an Open a device console button with the others. Either one opens a real terminal on that device — no commands to write first, nothing to select.

It behaves the way PuTTY does, because every key you press goes straight to the device rather than being collected into a line first:

TabCompletes the command or path, from the device itself.
?The context help a switch prints while you are part way through a command.
Up and down arrowsThe device's own command history.
Ctrl-CStops whatever is running, straight away.
Colours and pagingDrawn properly, including --More-- and anything that redraws the screen.
Window sizeSent to the device and updated when you resize, so it wraps and pages to what you are actually looking at.

Paste sends a block of text — a config stanza, for instance — as if it had been typed, and Maximise gives the session the whole window. The device is told the new size, so it wraps and pages to what you are actually looking at. The same button is on the configuration viewer.

🔔
The session ends when you close the panel, and a session nobody is attached to is closed after five minutes — a browser tab shut without closing it does not leave a shell open on your switch. Opening one is written to the audit log.

What happens around the change

Back up beforeOn by default. A device that cannot be backed up is left alone rather than changed blind.
Back up afterOn by default. The Changes page then shows the exact diff the push produced.
Stop at the first failureOff by default. Turn it on when one bad command should not reach the rest.
Devices at a timeHow many run in parallel. Three is a sensible start.
Preview what will be sentShows the exact lines each device would receive, with the {{…}} values filled in, without connecting to anything.

While it runs, and afterwards

Each device gets a row: waiting, running, done, failed or skipped, how far through the set it got, and how many configuration lines changed. What happened opens the full transcript for that device — every command and everything the device said back. You can stop a push part way; devices already changed stay changed, and the rest are skipped.

When a device says no

A device that answers Invalid input, % Incomplete command or command not found is marked failed rather than counted as a success, and the rest of the set is not sent to that device — running the remaining commands after one was refused is how half a change gets made.

The row tells you both things you need: how many commands went in before it stopped, and what the device actually said. The same reason appears against the run in Recent pushes, so you do not have to open anything to see it.

🔔
A common one: on Cisco, wr or write memory is refused inside configure terminal — the device answers % Incomplete command. End the block with end first, or use do write memory. The commands before it have already been applied; the row says so.
⚠️
This sends whatever you type to real equipment. Try it on one device first, keep the backups on, and read the preview if you are pushing to more than a handful. Every push is written to the audit log with who ran it and what was sent.

Config Push needs the operator or administrator role. A viewer cannot open it.

Day To Day

Reports

Charted PDFs, on demand or emailed on a schedule.

Backup summaries, compliance status, change history and device health can each be produced as a PDF with charts and tables. Download one whenever you like, or set up a schedule — weekly, or a date and time you choose — and have it emailed to whoever needs it.

Reports — scheduled reports, their recipients and when they last ran.

Reports — scheduled reports, their recipients and when they last ran.

Day To Day

Health and alerts

The page that answers "what is broken right now".

Health separates devices that have never backed up successfully, ones that used to and have stopped, and ones failing repeatedly. It is the page to look at first thing, and the one to check after adding a batch of devices.

Set up notifications under Settings so you do not have to look. Email, a webhook or Slack, triggered when a job fails, when a configuration changes, or as a daily summary at a time you pick.

Health — never backed up, stopped backing up, and repeatedly failing.

Health — never backed up, stopped backing up, and repeatedly failing.

Running It

Off-site copies and retention

A backup that only exists on the backup server is one failure away from not existing.

Under Settings you can point Backup Manager at S3-compatible storage and have every archive mirrored there automatically. If the backup server itself is lost, the backups are not.

Retention keeps the disk from filling up. As well as a simple age limit per device, there is a grandfather-father-son scheme that keeps a number of daily, weekly and monthly copies — so you keep a year of history without keeping a year of daily archives.

🔐
Archives can also be encrypted at rest, so a stolen disk does not hand over your network configuration. Turn it on before the first backup rather than after.
Running It

Users and roles

Three roles, so not everyone who can read a config can change a device.

AdminEverything, including users, settings, licence and restore
OperatorDevices and backups — can add devices and run backups, but not change users or settings
ViewerRead only — can look at backups, changes and reports, and change nothing

There is also an audit log of every action taken, and a login history. For scripts and monitoring, create an API token under Settings rather than sharing an account password.

Running It

Managing the service

The handful of commands worth knowing.

Check it is runningsudo systemctl status backup-manager
Restart itsudo systemctl restart backup-manager
Watch the log livesudo journalctl -u backup-manager -f
Last 100 log linessudo journalctl -u backup-manager -n 100
Stop itsudo systemctl stop backup-manager
♻️
The service is enabled at boot, so it comes back on its own after a reboot or a power cut. Nothing to remember.
Running It

Updating

From the dashboard, or from the terminal. Your data is never touched.

From the dashboard

Open Licence and press Check for updates. If a newer release exists you get the version, its size, when it was published and what changed — and an Install update button next to it.

The page follows the update as it runs. Part way through, the service restarts — that signs you out, which is expected. Sign back in and the Licence page picks the update back up and tells you how it ended.

🔔
Only an administrator sees the Install button. The update itself runs as a separate privileged helper on the server — the web service never gains those rights, even while installing.

From the terminal

root@server — terminal
$ sudo backup-manager-update

The same update, run by hand. It asks the licence server what is available, shows you the release notes, and installs it if you say yes. The download is checked against a published SHA-256 and refused if it does not match, so a tampered mirror cannot push code onto your server.

See what is available without installingsudo backup-manager-update --check
Install without promptssudo backup-manager-update --yes
Go back to the previous versionsudo backup-manager-update --rollback

What happens to your data

Your database is copied aside first, the new version is put in beside the old one, and the service is switched over. If the new version does not come up healthy, the old one and the database go back automatically — by either route. Backups, configuration and history are never replaced.

Help

Troubleshooting

The things that usually go wrong, and what they mean.

The dashboard is not on port 3000The installer asks for another port when 3000 cannot be used, and prints the address it settled on. grep PORT /etc/optimus-backup-manager/backup-manager.env shows it at any time. To move it deliberately, run the installer again with --port.
Cannot open the dashboardCheck the service is running (systemctl status backup-manager) and that the port is open in the firewall.
A device fails with a handshake or algorithm errorOlder equipment needs legacy algorithms. Edit the device and turn that option on — it makes the connection negotiate the way PuTTY does.
Login works in PuTTY but not hereUsually an enable password that has not been filled in, or a profile whose prompt does not match this device. Use Test Connection — it shows what the device actually sent back.
The host key changedThe device was replaced or reinstalled — or something is in the way. Backup Manager refuses to connect until you look at it, which is the point. Confirm the new key under the host keys list once you are satisfied.
A backup is very slowAlmost always a server backup pulling directories you do not need. Use the tree picker to exclude them, and raise the parallel sessions for that device.
New backups stopped and there is a licence bannerThe trial ended or the server could not be reached for several days. Everything already stored is still available. Open the Licence page and use Check now, or contact us.
"The system clock was moved back"A licence term cannot be checked against a clock that goes backwards. Correct the time on the server, then acknowledge it on the Licence page.
Help

Getting help

Tell us what you were doing and what you saw, and send the log if you have it.

The quickest thing you can send us is the output of sudo journalctl -u backup-manager -n 200 along with the device name and what you were trying to do. For a device that will not connect, the Test Connection transcript tells us most of what we need.