Client Setup
Config File
The client config lives at ~/.openme/config.yaml (created with 0600 permissions — it contains your private key).
Paste the block printed by openme add on the server, or write it manually:
profiles:
default: # used by `openme connect`
server_host: "myserver.example.com"
server_udp_port: 7777
server_pubkey: "base64..." # server's Curve25519 public key
private_key: "base64..." # your Ed25519 private key
public_key: "base64..." # your Ed25519 public key
post_knock: "ssh user@myserver.example.com" # optional
home: # used by `openme connect home`
server_host: "home.example.com"
server_udp_port: 7777
server_pubkey: "base64..."
private_key: "base64..."
public_key: "base64..."The profile named default is used when no profile name is given. You can have as many named profiles as you like — one per server.
Connect
# Health check — confirm server is reachable before knocking
openme status
# Knock using the default profile
openme connect
# Knock using a named profile
openme connect home
# Open the firewall to a specific IP instead of your source IP
openme connect --ip 10.0.0.5
# Open the firewall to a specific IPv6 address
openme connect --ip 2001:db8::42If post_knock is set in the profile, it is run automatically after a successful knock — useful to make openme connect feel like a transparent wrapper around ssh.
Status Check
# Check health port only — requires a prior knock within knock_timeout
openme status
openme status home # named profile
# Knock first, then check — validates the full authentication round trip
openme status --knock
openme status home --knockThe health port is never permanently open. It is a firewall rule opened automatically alongside your other ports after a successful knock, for the knock_timeout duration (default 30 seconds). This means:
openme statuswith no flag confirms the port is currently open (i.e. you knocked recently and the window hasn’t expired)openme status --knockis the end-to-end test: knock → wait → check, confirming the full crypto + firewall round trip works
Scripting
# Knock then connect — inline without post_knock in config
openme connect home && ssh user@home.example.com
# Use a specific config file
openme --client-config /etc/myapp/openme.yaml connect