ownstack ssh

Into the running container

$ ownstack ssh app <app> [--stack=<stack>]

Drops you into a bash shell inside a running web container. $DATABASE_URL and friends are set; you can run rails console, node, etc.

Onto the stack host

$ ownstack ssh stack <stack>

Drops you onto the stack as the ubuntu user via the control-plane proxy. For OS-level operations: dokku plugin installs, log file inspection, disk operations.

Direct SSH (bypass the proxy)

Add your local public key to the stack once:

$ ownstack stack add-key <stack>
Key added. You can now connect directly:
  ssh ubuntu@203.0.113.10

Then connect directly — no control plane involved:

$ ssh ubuntu@<stack-ip>

Auto-detects ~/.ssh/id_ed25519.pub, id_rsa.pub, or id_ecdsa.pub. Use --key=PATH for a different key. Idempotent — safe to run again.

Direct dokku SSH (advanced)

$ ssh dokku@<stack-ip> apps:list
$ ssh dokku@<stack-ip> ps:report <app>
$ ssh dokku@<stack-ip> logs <app> --tail
$ ssh dokku@<stack-ip> postgres:list

Your account's SSH key is authorized for dokku@<stack-ip> when you provision a stack. Run any dokku subcommand — these bypass the OwnStack control plane.

Direct dokku changes skip control-plane bookkeeping

If you SSH and run dokku ps:scale, config:set, etc., the change happens but the control plane doesn't see it. Most things are fine; some aren't (multi-stack syncing, audit logs). Prefer the CLI when an equivalent exists.

One-off commands

$ ownstack remote run <app> rails db:migrate

Spawns a fresh container, runs the command, exits. Doesn't share state with the running web/worker.