Skip to content

Connection Keys

Settings → Connection keys. A fresh install requires every agent to present a key. Keys are generated here and reach the machine inside the install command.

Connection keys page: General Settings with the Require Authentication Key toggle, Client Download URL and Server Domain, and the keys table below

SettingMeaning
Require Authentication KeyOn: an agent without a valid key is refused with AUTH_REQUIRED. Off: agents may connect without one; a key they do send is still checked. Takes effect at once
Client Download URLWhere the install command downloads woho-client from, and where Update agent fetches the new binary — its .sha256 must be published beside it. Empty on a new install: set it before generating keys
Server DomainThe host and tunnel port agents connect to, woho.example.com:9000. The install command’s -server

Both fields save when you leave them. Generate and Copy Install Command are unavailable until both are set.

Generate makes one key and opens its install command, ready to copy. Generate several… asks for a quantity (1–100) and a label.

Generate connection keys dialog with the key, Waiting for first connection, the install command and Copy command

Terminal window
sudo curl -fsSL "https://woho.cesbo.com/client-latest" -o /usr/local/bin/woho-client && sudo chmod +x /usr/local/bin/woho-client
sudo /usr/local/bin/woho-client install -server "woho.example.com:9000" -key "XXXX-XXXX-XXXX"
sudo systemctl start woho-client

Give the command to whoever has root on the machine; they need no access to the panel. The dialog, and the key’s row, show the machine’s name as soon as it connects.

Keys are XXXX-XXXX-XXXX from an alphabet without 0, O, 1, I, L.

StatusWho can connect
PendingThe first machine to use it. The key is then bound to that machine’s client ID
ActiveOnly the bound machine. Reconnects freely; any other machine is refused
RevokedNobody. The record stays for auditing

The key is stored on the machine in /etc/woho/woho-client.yaml (root-only). It never appears in the service command line.

Click the eye on a row.

Key Details dialog: key value with Copy Key, status, label, created, first used, client name and UUID, a comment field, and Copy Install Command, Revoke, Reset, Delete

ActionDoes
Copy Key, Copy Install CommandTo the clipboard
RevokeThe machine is disconnected at once, and refused at every reconnect. An installed agent is restarted by systemd every 10 s and refused again — that repeating refusal in its journal is the revoked state, not a fault
ResetBack to Pending with the binding cleared. For a reinstalled machine (new client ID) or to move a key to another machine
DeleteRemoves the record. Cannot be undone
CommentFree text, saved as you type. Searchable

Actions above the table applies Revoke, Reset or Delete to the selected rows.

With the requirement on:

AgentKeyResult
No key—Refused: AUTH_REQUIRED. A service stops with a message naming the fix; an agent run by hand prompts for a key
Unknown or revoked keyRefused: AUTH_FAILED: Invalid or revoked key
KeyPendingAccepted; the key becomes Active, bound to this machine
Same machine againActiveAccepted
Another machineActiveRefused: AUTH_FAILED: Key already bound to a different client
Reinstalled machine (new client ID)ActiveRefused the same way — Reset the key
Two machines use one pending key at oncePendingThe first wins; the second gets AUTH_FAILED: Key already in use

Every refusal is recorded with the machine’s address on its timeline and in History.

SymptomFix
AUTH_REQUIRED in the agent’s journalGenerate a key and rerun woho-client install -key …
AUTH_FAILED: already bound to a different clientThe machine was reinstalled: Reset the key, or generate a new one
The agent restarts every 10 s and is refusedThe key was revoked. Generate a new one or Reset this one
Generate is greyed outSet Client Download URL and Server Domain (host:port)
A key stays Pending after the machine connectedThe agent is too old to send keys. Update it