Skip to main content
SSH is the most direct way to use boxd. No install needed — just an SSH key.

Getting started

ssh boxd.sh
If your key isn’t linked yet, you’ll get a URL to sign in with GitHub. Once linked, you’re in.
To skip host key prompts, add this to ~/.ssh/config:
Host boxd.sh *.boxd.sh
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null

Managing machines

Pass commands directly to ssh boxd.sh:
ssh boxd.sh new --name=myapp           # create a machine
ssh boxd.sh list                       # list your machines
ssh boxd.sh fork myapp --name=copy     # fork with full disk copy
ssh boxd.sh reboot myapp               # reboot
ssh boxd.sh destroy myapp              # destroy
Or use the interactive boxd> prompt:
ssh boxd.sh
  boxd -- your cloud, your rules

  Type 'help' for available commands.

boxd> list
name    status   url              image
myapp   running  myapp.boxd.sh    default

boxd> exit
goodbye

Running commands inside machines

Use exec to run commands inside a machine:
ssh boxd.sh exec myapp -- ls /home
ssh boxd.sh exec myapp -- sudo apt install -y nodejs
ssh boxd.sh exec myapp -- 'cd /app && python3 server.py'
Wrap commands containing shell metacharacters (&&, |, >, $, etc.) in single quotes so your local shell passes them through unchanged.
Commands run as the boxd user with passwordless sudo. Working directory is /home/boxd. Additional flags:
ssh boxd.sh exec myapp -e API_KEY=secret -- CMD    # set env vars
ssh boxd.sh exec myapp --timeout 30 -- CMD         # timeout
ssh boxd.sh exec myapp --tty -- bash               # interactive TTY
cat config.json | ssh boxd.sh exec myapp -- 'cat > /home/boxd/config.json'  # pipe stdin

Copying files

Downloads write to stdout, uploads read from stdin. Paths after : are relative to /home/boxd unless they start with /.
ssh boxd.sh cp myapp:output.log > output.log             # download
ssh boxd.sh cp myapp:/etc/nginx/nginx.conf > nginx.conf   # absolute path
cat config.json | ssh boxd.sh cp myapp:config.json        # upload
Max file size: 100 MB.

Direct SSH into a machine

SSH directly into any machine using its domain:
ssh myapp.boxd.sh
You land in a shell as the boxd user. All standard SSH features work:
  • SCP — copy files to/from the machine
  • Port forwarding — tunnel ports through SSH
  • VS Code Remote SSH — develop remotely
  • rsync — sync files over SSH
Direct SSH only works for the machine owner. Your SSH key must match the key registered to your account.

Connecting interactively

connect opens a shell session inside a machine via the control plane:
ssh boxd.sh connect myapp
This is an alternative to direct SSH (ssh myapp.boxd.sh). Use whichever you prefer.

Managing proxies

Every machine gets a default proxy at name.boxd.sh forwarding to port 8000.
ssh boxd.sh proxy list --vm=myapp                        # list
ssh boxd.sh proxy set-port --vm=myapp --port=3000        # change port
ssh boxd.sh proxy set-port --vm=myapp --port=auto        # auto-detect
ssh boxd.sh proxy new api --vm=myapp --port=3001         # subdomain
ssh boxd.sh proxy delete api --vm=myapp                  # remove

JSON output

Add --json to any command for structured output:
ssh boxd.sh list --json
[
  {
    "name": "myapp",
    "vm_id": "9645b1e8-...",
    "status": "running",
    "url": "myapp.boxd.sh",
    "image": "default"
  }
]

Identity

ssh boxd.sh whoami

Adding more SSH keys

SSH from a different machine with a new key and go through the same link flow. The new key gets linked to your existing account (matched by GitHub identity).