Skip to content

How to set up Vector Hub and the agent live channel

Vector Hub and the Live Channel: Vector Access, Agent Restarts, and Instant Job Pickup

Section titled “Vector Hub and the Live Channel: Vector Access, Agent Restarts, and Instant Job Pickup”

Vector Hub is an optional service on the rConfig server that gives each enabled Vector Agent a persistent, bidirectional live channel. After reading this page you can install the hub, enable the live channel per agent, restart agents remotely, and fix the common hub problems.

Without the hub, Vector Agents only poll the rConfig server on a timer, so the server cannot reach into an agent on demand and new jobs wait for the next poll. Install the hub when you want operators to SSH to remote-site devices without a VPN or jump host, restart agents without logging in to the agent host, or have queued jobs start near-instantly.

The hub is additive. If it is not installed, rConfig and its agents behave exactly as before.

CapabilityWhat it does
Vector AccessOpens a live SSH session to a device, proxied through its agent, with optional session recording.
Restart an agentRestarts an agent from the Hub page over the live channel.
Auto job pickupNudges an agent to poll the moment a job is queued for it.
Self-healing certificatesRestores the server’s hub client certificates automatically if they go missing.

The hub runs on the rConfig server as the hardened systemd service vector-hub.service, under the dedicated vector-hub user. The binary lives at /usr/local/bin/rconfig/activehub/vector-hub. Agents dial in to the hub over an outbound WebSocket, and once connected the server can push commands to them in real time.

The hub opens three listeners:

ListenerDefault addressWho connectsTransport
Public tunnel:8443 (all interfaces)Vector Agents, outboundWSS (WebSocket over TLS), path /tunnel
Control API127.0.0.1:8444 (loopback only)the rConfig Laravel appHTTPS with mutual TLS (mTLS)
Session broker127.0.0.1:8445 (loopback only)the vector:access commandauthenticated, loopback only
flowchart LR
  subgraph Site["Remote site"]
    A[Vector Agent] --> D[Network devices]
  end
  subgraph Server["rConfig server"]
    H["vector-hub.service (:8443 tunnel)"]
    L[rConfig app] -- "mTLS :8444" --> H
    S["php artisan vector:access"] -- ":8445" --> H
  end
  A -- "outbound WSS :8443/tunnel" --> H
  • Vector installed and enabled in rConfig. The Hub navigation item and its settings only appear when Vector is installed. See Vector Server installation.
  • At least one Vector Agent registered and enabled. See Adding agents to Vector.
  • Root access to the rConfig server, to install the Vector Hub helper.
  • Egress from each agent site to the rConfig server on TCP 8443.
  • Optional: your own TLS certificate and key for the public tunnel. If you leave them out, the installer generates them.

Vector Hub installs a systemd service and private keys, which needs root. Horizon runs as the web server user (apache on RHEL, Rocky and Alma, www-data on Ubuntu), so from V8.4.1 every hub action goes through a small root-owned helper that the web user may run through sudo. Nothing the web user can change is ever run as root.

ItemPath or value
Helper/usr/local/libexec/rconfig/rconfig-vector-hub
Install script it runs/usr/local/libexec/rconfig/rconfig-vector-hub-install.sh
Sudo rule/etc/sudoers.d/rconfig-vector-hub, mode 0440, allowing the web user to run only the helper, with env_reset
Groupvector-hub. The web user is added to it so it can read the CA certificate and the rConfig client certificate and key.

The two Vector deploy scripts (RHEL and Ubuntu) install it on every install and upgrade. If that step fails, the deploy fails. The standard rConfig V8 Pro deploy scripts do not run it.

To install or repair it by hand, run this from the rConfig folder, then restart Horizon so its workers pick up the new group:

Terminal window
cd /var/www/html/rconfig8/current
sudo php artisan rconfig:vector-hub-install-helper
sudo supervisorctl restart horizon

It must run as root. It checks the sudo rule with visudo -c before installing it, and refuses to continue if the web user does not exist or has uid 0. It is safe to run again.

Until the helper is in place, the Vector Hub page shows a Vector Hub helper is not installed banner, and install, uninstall, restart and certificate re-sync are turned off. Settings → System Optimization shows the same problem on the Vector Hub helper row. The banner lists what is wrong:

MessageMeaning
The helper /usr/local/libexec/rconfig/rconfig-vector-hub is missing.The helper has never been installed.
The install script /usr/local/libexec/rconfig/rconfig-vector-hub-install.sh is missing.Only part of the helper is in place.
The helper … is not owned by root.Someone changed its owner. Reinstall it.
The helper … can be changed by users other than root.Its mode or folder lets other users change it. Reinstall it.
sudo does not let the web user run /usr/local/libexec/rconfig/rconfig-vector-hub without a password, so the sudoers rule is missing or wrong.The sudo rule is missing or was edited.

The fix for each is the same: sudo php artisan rconfig:vector-hub-install-helper, then restart Horizon.

FilesOwner and mode
/etc/vector-hub and /etc/vector-hub/tlsroot:vector-hub 0750
api.crt, api.key, tunnel.crt, tunnel.key, auth-ca.crtvector-hub:vector-hub 0600, for the hub service only
ca.key and any other file in tlsroot:root 0600
vector-hub.envroot:root 0600
ca.crt, laravel-client.crt, laravel-client.keyroot:vector-hub 0640, the only files the web user can read
  1. Open Settings → System Management → Vector Hub (/settings/vector-hub), or click Hub in the left sidebar (/hub). Both open the same page.

  2. In the Install Vector Hub card, fill in the fields below.

    FieldRequiredMeaning
    rConfig URLYesThe HTTPS address of this rConfig server. The hub calls back here to verify the install, so it must match this server’s TLS certificate.
    Tunnel hostYesHostname or IP agents dial for the tunnel. Agents connect outbound to it on port 8443 (wss://<host>:8443/tunnel).
    Tunnel certificate pathNoTLS certificate presented on the tunnel. Its subject or SAN must match the tunnel host. Leave blank to generate one.
    Tunnel key pathOnly with a certificatePrivate key for the tunnel certificate. Give both or neither.
    Auth CA pathNoCA used to verify the rConfig URL during the install’s auth callback. Only needed for a private CA.
    Local binary pathNoInstalls a hub binary already on this server instead of downloading it.
  3. Click Install Hub.

  4. Watch the status badge. It shows the install state and exit code only, never the raw command output.

When the install succeeds, the page switches from the install card to the hub dashboard.

The web server user must be able to read every file you name. The installer copies each one as that user into a root-only folder, so it cannot be used to read files the web user could not already read. Certificates, keys and CA files can be up to 1 MB, and the binary up to 256 MB.

rConfig Install Vector Hub card showing the rConfig URL, Tunnel host, Auth CA path, Local binary path, Tunnel cert path, and Tunnel key path fields and the Install Hub button

The UI runs the same helper as root through sudo. You can run it yourself on the rConfig server:

Terminal window
sudo /usr/local/libexec/rconfig/rconfig-vector-hub install \
--rconfig-url https://rconfig.example.com \
--tunnel-host hub.example.com
FlagRequiredValue
--rconfig-url URLYeshttp or https URL of this rConfig server, up to 255 characters
--tunnel-host HOSTYesHostname or IP agents dial
--tunnel-cert PATHNoYour tunnel certificate. Must be given with --tunnel-key.
--tunnel-key PATHNoYour tunnel key. Must be given with --tunnel-cert.
--auth-ca PATHNoCA for the auth callback
--hub-bin PATHNoLocal hub binary to install instead of downloading

Each flag can be given once. Paths must be absolute and contain only letters, digits, ., _, - and /. Any other flag, including the old --insecure-download, is refused. The listeners always use their defaults (:8443, 127.0.0.1:8444, 127.0.0.1:8445).

The other actions take no flags:

Terminal window
sudo /usr/local/libexec/rconfig/rconfig-vector-hub status # service state, then the last 100 journal lines
sudo /usr/local/libexec/rconfig/rconfig-vector-hub start
sudo /usr/local/libexec/rconfig/rconfig-vector-hub stop
sudo /usr/local/libexec/rconfig/rconfig-vector-hub restart
sudo /usr/local/libexec/rconfig/rconfig-vector-hub uninstall
Exit codeMeaning
64Bad action or flag
65A file you named is unreadable by the web user, or too large
77Not run as root
78The install script is missing or can be changed by users other than root. Run sudo php artisan rconfig:vector-hub-install-helper.

In one pass, install:

  • Installs or updates the hub binary. It downloads https://dl.rconfig.com/download-vector-hub/vector-hub-latest and its .sha256 checksum unless a local binary path was supplied.
  • Generates an internal CA and leaf certificates: the loopback API certificate (api.crt, SAN IP:127.0.0.1,DNS:localhost), the tunnel certificate (tunnel.crt), and a Laravel client certificate (laravel-client.crt, with clientAuth).
  • Generates the shared secret VECTOR_HUB_AUTH_SECRET, or reuses an existing one.
  • Writes the hub environment file and the vector-hub.service systemd unit.
  • Copies the client certificate, key, and CA into storage/app/vector-hub/ as client.crt, client.key, and ca.crt, as the web user, and writes the VECTOR_HUB_* keys into rConfig’s .env.
  • Runs a health check and verifies the auth callback.

How does rConfig decide the hub is installed?

Section titled “How does rConfig decide the hub is installed?”

rConfig treats the hub as installed when the binary exists at VECTOR_HUB_BIN_PATH (default /usr/local/bin/rconfig/activehub/vector-hub).

Uninstall from the Hub page, or run sudo /usr/local/libexec/rconfig/rconfig-vector-hub uninstall. It removes the service, the binary, and the TLS material, and strips the VECTOR_HUB_* keys from .env. Agents fall back to timer-based polling.

How do I enable the live channel on an agent?

Section titled “How do I enable the live channel on an agent?”

The live channel is per agent and off by default. Turn it on in either place:

  • Agent edit dialog: navigate to Settings > Agents, edit the agent, and set the toggle to Live Channel Enabled. The help text reads “Enables bidirectional connectivity for this agent (hub live channel).”
  • Hub page: click the Enable button on the agent’s row in the Agents card.

Enabling sets the agent’s desired state. The agent then dials the hub, and once the tunnel is up rConfig records the observed state and shows the agent as connected. Each enable or disable is written to the agent audit log as Live channel enabled/disabled for agent <name>.

StatusColourMeaning
ConnectedGreenEnabled and a live tunnel is up.
Enabled · waitingAmberEnabled, but the agent has not dialled in yet.
DisabledGreyThe live channel is off for this agent.

The scheduled command vector:hub-sync-status refreshes the connection state, round-trip latency, and last-seen time every minute.

The Hub page (/hub, titled Vector Hub) shows KPI tiles, including service status, and an Agents card listing each agent’s live-channel status and actions. The roster is built to stay usable with 100+ agents:

  • Server-side pagination: page size between 5 and 100, with “Page X of Y” and Previous/Next controls.
  • Search by name or ID: the box labelled “Search agents by name or ID…” matches the agent name or its numeric ID.
  • Enabled agents first: rows are ordered with enabled agents at the top, then alphabetically by name.
  • Built-in agent hidden: the built-in vector-server agent (ID 1) is not a live-channel participant and does not appear.
rConfig Vector Hub page showing service status KPI tiles and the Agents roster with Connected, Enabled waiting, and Disabled status indicators, a search box, and Enable and Restart buttons per agent

The page also holds the Vector Access panel, which sets the Vector Access idle timeout.

How do I SSH to a device through its agent?

Section titled “How do I SSH to a device through its agent?”

Use Vector Access. It opens a live, optionally recorded SSH session to a device through its agent’s live channel, run on the rConfig server with php artisan vector:access. The session idle timeout is set in the Vector Access panel on the Hub page.

  1. Open the Hub page and find the agent in the Agents roster.
  2. Click Restart. The button is only active when the agent’s live channel is connected.
  3. Click Confirm at the “Restart <name>?” prompt.

rConfig pushes the restart over the live channel. The agent acknowledges, exits gracefully, and its supervisor (systemd with Restart=always) starts it again. Agents installed the standard way run under systemd and come back automatically.

Without the live channel, an agent finds new work on its next scheduled poll, so a job can wait up to one poll interval. With the live channel enabled, rConfig nudges the agent to poll the moment a job is queued for it, so jobs start near-instantly.

  • It applies only to agents with the live channel enabled. Other agents keep polling on their timer.
  • It is best-effort. If the agent is briefly disconnected or the hub is unreachable, the agent still picks the job up on its next normal poll.
  • Bursts of queued jobs are debounced into a single nudge within a few seconds, and the agent collapses repeated nudges into at most one extra fetch.

There is nothing to configure. Enabling the live channel is enough.

rConfig talks to the hub using client.crt, client.key, and ca.crt in storage/app/vector-hub/. If those files are lost, for example after a storage wipe, redeploy, or permissions reset, the hub would appear to be not responding. rConfig recovers them automatically:

  • Every minute: vector:hub-sync-status checks the hub. If the hub is unreachable, installed, and the client certificates are missing, it dispatches a re-sync job that copies the files back from the hub’s TLS directory (default /etc/vector-hub/tls). The job runs as the web user and reads them through the vector-hub group, so the install helper must be in place. This auto-heal runs at most once every 5 minutes.
  • On page load: if the Hub page detects missing certificates, it triggers one re-sync automatically. The service KPI tile shows Certs missing, and an amber Hub client certificates missing banner offers a manual Re-sync certificates button.

Missing certificates are usually restored within about a minute, or immediately when the Hub page is opened.

The hub integration lives in the hub block of config/vector-server.php. If hub.api_url is unset, the hub integration is disabled entirely.

Config keyEnv varExample / defaultMeaning
hub.tunnel_urlVECTOR_HUB_TUNNEL_URLwss://rconfig.local:8443/tunnelTunnel URL delivered to agents.
hub.api_urlVECTOR_HUB_API_URLhttps://127.0.0.1:8444Control API (loopback mTLS). Unset disables the hub.
hub.session_addrVECTOR_HUB_SESSION_ADDR127.0.0.1:8445Session broker used by vector:access.
hub.auth_secretVECTOR_HUB_AUTH_SECRET(generated)Shared secret between rConfig and the hub.
hub.client_certVECTOR_HUB_CLIENT_CERTstorage/app/vector-hub/client.crtmTLS client certificate.
hub.client_keyVECTOR_HUB_CLIENT_KEYstorage/app/vector-hub/client.keymTLS client key.
hub.ca_certVECTOR_HUB_CA_CERTstorage/app/vector-hub/ca.crtCA used to verify the hub.
hub.bin_pathVECTOR_HUB_BIN_PATH/usr/local/bin/rconfig/activehub/vector-hubHub binary path. Its presence means installed.
hub.tls_source_dirVECTOR_HUB_TLS_SOURCE_DIR/etc/vector-hub/tlsSource directory for the certificate re-sync.

The hub binary reads its own environment:

Env varDefaultMeaning
VECTOR_HUB_TUNNEL_ADDR:8443Public tunnel listener.
VECTOR_HUB_API_ADDR127.0.0.1:8444Control API listener.
VECTOR_HUB_SESSION_ADDR127.0.0.1:8445Session broker listener.
VECTOR_HUB_AUTH_SECRET(generated)Shared secret.
VECTOR_HUB_HEARTBEAT_INTERVAL15sTunnel heartbeat interval.

The log level defaults to info.

Two related agent-run watchdogs sit outside the hub block: task_unit_timeout_seconds (VECTOR_TASK_UNIT_TIMEOUT_SECONDS, default 300) limits each device run, and task_run_wait_timeout_seconds (VECTOR_TASK_RUN_WAIT_TIMEOUT_SECONDS, default 900) caps the overall run.

Why are install, restart and re-sync turned off?

Section titled “Why are install, restart and re-sync turned off?”

Cause: the root-owned helper is missing or wrong, and the page shows Vector Hub helper is not installed. A failed action can also report Run as root: php artisan rconfig:vector-hub-install-helper, then restart Horizon.

Fix: run sudo php artisan rconfig:vector-hub-install-helper from the rConfig folder, then restart Horizon. See Install helper.

Cause: the agent’s live channel is not connected. The tooltip reads “Agent must have its live channel connected to restart”.

Fix: enable the live channel and wait for Connected. Status refreshes every minute.

Why does the hub show Certs missing or not responding?

Section titled “Why does the hub show Certs missing or not responding?”

Cause: the client certificates in storage/app/vector-hub/ are missing, usually after a storage wipe, redeploy, or permissions reset.

Fix: wait about a minute for the scheduled re-sync, or open the Hub page and click Re-sync certificates. If it persists, confirm the source files exist in /etc/vector-hub/tls, that the rConfig scheduler is running, and that the web user is in the vector-hub group (id apache, or id www-data on Ubuntu). If it was only just added, restart Horizon.

Cause: auto job pickup only applies to live-channel-enabled agents, and the nudge is best-effort. If the agent was disconnected or the hub unreachable when the job was queued, the nudge is skipped.

Fix: none needed. The agent picks the job up on its next normal poll. To get instant pickup, enable the live channel and confirm the agent shows Connected.

Where are the Vector Access troubleshooting steps?

Section titled “Where are the Vector Access troubleshooting steps?”

See Vector Access troubleshooting for session errors and finding transcripts.

I want to…Do this
Install the hub helpersudo php artisan rconfig:vector-hub-install-helper, then restart Horizon.
Install the hubHub page > fill in the install card > Install Hub (or sudo /usr/local/libexec/rconfig/rconfig-vector-hub install …).
Turn on the live channel for an agentSettings > Agents > edit agent > Live Channel Enabled (or the Enable button on the Hub page).
See which agents are liveHub page roster > Connected / Enabled · waiting / Disabled.
SSH to a device through its agentphp artisan vector:access <device> (or run with no argument and pick). See Vector Access.
Record an SSH sessionphp artisan vector:access <device> --log. Transcript in storage/logs/vector-ssh/.
Change the SSH idle timeoutHub page > Vector Access panel > Idle timeout (minutes, 0 = never).
Restart an agentHub page roster > Restart (active only when connected).
Get jobs picked up instantlyEnable the live channel. Auto job pickup is automatic.
Fix “certs missing”Wait about a minute, or Hub page > Re-sync certificates.
Remove the hubsudo /usr/local/libexec/rconfig/rconfig-vector-hub uninstall.