A full SSH console before you install a single LockFlare thing.

Vigia has to be useful on day one with nothing on your servers. So the terminal, the tunnels, the file manager and the fleet tools work on any box you can log into, and stay exactly the same when the box becomes a Vigia server.

Four terminals split on one page, each with the server's colour band, the tree on the left

The map

Every group is a card and every server a row: the dot, the name and state, the address, what it runs, and what it is waiting on — pending updates, a restart. Search narrows the map by name, address or note; Find a server in the bar at the top (⌘P, or Ctrl+Shift+P) opens and connects any one of them from wherever you are. A group has Connect, Check for updates and Update all on its head.

  • Colours — five, and none — a thin line on the row and under the tab, and the word in the server's head, so nobody types into the wrong box. Red is what people give production.
  • Bastions: a server reached through another one on the map, with the bastion's own saved login. One exposed box lets the rest close port 22 to the world.
  • Export: the map, or the part of it you tick, as a JSON file — names, addresses, logins, key paths; never a password or a passphrase.

The terminal

A real terminal in the window: your credentials, sshd decides, sshd logs. Pages of shells, up to four split on one page, and a shell on this computer beside them. Splitting or resizing a pane never reconnects the shell. Broadcast types one command, or one key like Ctrl-C, into every open shell at once.

  • Logins by password, key file — your keys in ~/.ssh offered by name — or the SSH agent. Every login is saved, sealed under your key, because a server nothing unattended can open is a server automation cannot touch. Forget removes it by name.
  • Resume: a lid closed or a VPN that fell over does not end the pane. Vigia redials up to twenty times and, on a server kept alive with tmux, lands in the same shell with the command still running.
  • Per server: keep alive in tmux, record every session as asciicast (output only, never what is typed), or a plain shell with no history hooks.
  • Host keys are never auto-accepted. A multi-line paste arrives as text and waits for Return.

History and recordings

Every command typed into a Vigia shell is filed on your computer per server: the whole line as the shell ran it, its exit status, the folder, when, and how long it took. Searchable across one server or all of them, with Run again to type it back into the open shell. Nothing is guessed from keystrokes — the shell itself reports it — and nothing is written on the box to make it work. A root shell reached with sudo -i is a different shell and is deliberately not filed.

Mark a server and every session to it is recorded as a timestamped asciicast — output only, so a password typed at a prompt is never in the file. Recordings play back inside Vigia at 1×, 2× or 4×, with the terminal resizing exactly as it did at the time.

Tunnels, and browsing as the server

Local, remote and proxy forwards riding the login Vigia already has, started when the shell is up or on connect. Vigia lists what a tunnel could reach on the box — the database on loopback, the admin panel on 127.0.0.1, a docker port on localhost — and what people usually tunnel to, with their ports. A tunnel bound to the office Wi-Fi can announce itself by Bonjour so a coworker's Vigia sees it under Shared on your network.

The HTTP tunnel is one switch: your browsers leave the internet from the server, its address, its network, its DNS. The one way to see a DNS change that landed everywhere but on that box — and a name can be looked up on the box and on this computer side by side, without opening a browser at all. When a VPN owns your route, Vigia opens a browser window through the tunnel instead.

Files

The server as one pane — beside this computer, other servers and your repositories, up to six side by side — over the same login, nothing installed. Upload and download through your system's own dialogs. Reads fall back to root on their own and say so; changes as root go through your saved password. Right-click a text file and it opens in a code editor beside the pane; saving writes the bytes back with the mode and owner the file had.

Permissions in the order a person asks: what can I do here, who else and what — the classic bits and the ACL as one list — and who owns it. The bucket collects references to files on any server and drops them on another; Vigia relays box to box through your computer.

/ BROADCAST

Broadcast: one keyboard, every shell

Everything below happened once, on six real servers, in the order it is told. A command goes to every shell exactly as if it had been typed there. A key goes raw, with no Enter after it — which is the part that makes interactive programs work.

Beside it, the whole run in one listing — the reach the panel names first, every command and every key as it went out, and what came back.

# Broadcast · reach: every open shell · 6 # this page srv-01 srv-02 srv-03 srv-04 # page 2 srv-05 srv-06 # not on screen, still live command htop six boxes, six process lists key q raw · no Enter command nano notes.txt a full-screen editor, six times text patched and rebooted into all six buffers keys Ctrl-O Enter write out keys Ctrl-X exit command clear; hostname; cat notes.txt srv-01 patched and rebooted srv-04 patched and rebooted srv-02 patched and rebooted srv-05 patched and rebooted srv-03 patched and rebooted srv-06 patched and rebooted command apt autoremove Do you want to continue? [Y/n] asked on all six keys y Enter six carry on, six finish

Six shells, and two of them you cannot see

Four terminals split across one page and two more on another page — six open sessions to six machines. Broadcast reaches all of them, including the two on the page you are not looking at, which is a bigger claim than it sounds: the shells are live whether or not they are on screen, so a command lands on the ones you forgot about too. The panel says how many it is about to reach and names them, and floats wherever you drag it.

Then all six ran htop. Six boxes, six load averages, six process lists, one keyboard.

A command, typed once

The command goes into every shell as if you had typed it there — not as a script pushed over SSH, not as a wrapper that swallows the output. Each box answers in its own pane, in its own time, with its own mirror list and its own timings. What one box says has nothing to do with what another says, and you read them side by side.

Now the part a script cannot do

Open a full-screen editor on all six. You cannot pipe into nano and you cannot script your way through it — it is a program on a terminal, waiting for keys. So Vigia sends it keys: the text into the buffer on all six, then write out, then exit, as raw keystrokes with no Enter appended, going to every shell at the same instant.

Six machines, one file, written and saved together. The panel even lists the keys the common programs expect — nano's save and exit, tmux's prefix, screen's — because the whole point is to drive the thing that is already running rather than to start something new.

And the proof

Any of that could have been one server shown six times. So: clear the screen, print the hostname, print the file. Six different machine names, and under each one the file that was just written on it. That is six real servers, one keystroke apart.

Answering the same question on six machines

The last one is the case every operator knows. A command stops on a prompt — remove these packages, yes or no — and it stops on all six at the same time. Send y with its Enter, and all six carry on and finish together.

That is the difference between broadcast and a loop over SSH. A loop is fine until something asks a question; then it hangs, or you pass a flag that answers every future question blindly. Here the question is asked, you see it asked on every box, and you answer it once — as a person, with the prompt in front of you.

/ NOT A LOOP

Why this is not a loop over SSH

A loop is fine until something asks a question.

It writes into shells that already exist

Your sessions, with your login, your environment, your working directory, whatever you were in the middle of. Nothing new is opened and nothing is wrapped.

Keys go raw

Ctrl-C to stop what is running, q to leave a pager, Esc, Tab, the arrows, Ctrl-D, Ctrl-Z, Ctrl-L — sent as keystrokes with no Enter, which is the only way to drive a program that is already on the screen.

You choose the reach

Every open shell, the shells sharing one screen, a group, every box of one operating system, or your own local shell included on purpose — and the panel says the number before you press anything.

Output stays separate

Six answers in six panes, not six answers interleaved in one stream. What one box says never has to be untangled from another.

Prompts are answered, not avoided

An interactive question is asked on every box and answered once by you, instead of pre-empted with a flag that says yes to everything forever.

Nothing is installed to make it work

No agent, no bus, no orchestration daemon. It is your SSH sessions and a keyboard.

/ ACROSS THE FLEET

Pick the servers once.

Actions, Snippets, Flows, Ask Themis and Overview all work on the same pick, a column on the right of the screen: Pick Servers… chooses them by name, by group, or from a saved set.

Each picked server has a dot: green with a shell open, a spinner while a saved login is tried, grey with a saved login waiting — a click connects it — and red with no login, where a click opens it. A pick is saved by name as a set.

Actions

  • Execute: one line, every server, the answers side by side, run exactly as typed. The lines an admin types at a fleet most mornings — uptime, disk, memory, failed services, listening ports, who is on, restart needed — plus your own snippets, each filling the box so what goes out is always in front of you.
  • Find out: one of nearly three hundred curated questions, answered as one value per server through its own parser and grouped by answer, biggest group first. Six distinct CPUs is the finding, not thirty-six rows.
  • Install: Fail2Ban, ufw, firewalld, CrowdSec, ModSecurity, unattended-upgrades, auditd, AIDE, nginx, Apache, Caddy, PHP-FPM, certbot, ProFTPD, chrony and the rest, on the boxes that lack them.
  • Set up: add a user, sudo, keys, lock, delete, a group, a folder grant, open or close a port, the firewall on, Fail2Ban, sshd hardening, a service, automatic updates, timezone, NTP — the same door the server's own tab uses, on every box, a row per server saying what happened.
Actions, end to end

Flows

Steps drawn once on a canvas, run on many: update and upgrade, install packages, create a user, set up SSH for your IP, harden SSH, the firewall, Fail2Ban, kernel hardening, automatic updates, a restart with its way back, a custom script — and conditions that branch: is the package there, is the port listening, does the file exist. Every flow is your own, drawn for the boxes you know.

Run on Servers takes the servers from the pick and asks the flow's questions once, then runs it All at Once, 10 at a Time, 5 at a Time or One at a Time — one server first if you want, the rest starting only if it finishes cleanly, and one failure stopping the rest if you tick it. Each server runs the flow as root on its own session, and the run is a table: a row per server, a column per step, and End. A host key to trust, a sudo password or a failed step — retry, skip, stop — waits on its row, and Watch opens that server's run with the flow lighting up node by node. Quitting Vigia or closing the session while a flow runs asks first.

NOC

Your map drawn as boxes with the ports they talk on. A wire says MDB-1 talks to MDB-2 on 27017. That is a claim, and Run Diagram proves it from the box the traffic starts at: did the source open the connection, does something listen on the destination on an address the source dials, does the destination's firewall let the source in. Green, amber or red, with the failing fact in words. Nothing is checked from your computer, which knows nothing about whether two servers can reach each other.

And you do not have to draw it: Discover reads every box's firewall and its live connections and draws the wires itself — 187 of them across ten real servers.

The NOC, end to end

Your servers, your logins, your keys

Vigia holds no SSH key of its own. Add your hosts as terminals and start where you are.

Download Vigia