FAQ

Generating an SSH key

If you don't have an SSH key yet:

bash
ssh-keygen -t ed25519

GitHub and GitLab have detailed guides. Then upload the public key (~/.ssh/id_ed25519.pub) at the admin portal.

Permission denied (publickey)

Try plan as the SSH user:

bash
ssh -R example.com:80:localhost:8080 plan@localhost.run

Still failing? Email help@localhost.run.

I don't want to use an SSH key

Warning: custom domain subscriptions require an SSH key.

For free tunnels, skip the key check with the nokey user:

bash
ssh -R 80:localhost:8080 nokey@localhost.run

My free domain keeps changing

Free domains change after a few hours. To keep a name between connections, use an SSH key and don't use the nokey user.

My tunnel shows an error page

Check your app is reachable at http://localhost:{port} in your browser, and check the running SSH command's output for hints.

I can see requests to localhost:8080 when browsing my site thru localhost.run

Many frameworks build full URLs from the domain they think they run under — often localhost and their port. Search "your framework + reverse proxy" for the fix.

My connection keeps dropping

Usually the TCP connection was broken by timeouts or routing changes on the internet. Enable SSH keepalives:

bash
ssh -o ServerAliveInterval=60 -R 80:localhost:8080 localhost.run

SSH sends an empty packet after 60s of inactivity, which:

  1. Wards off router idle timeouts.
  2. Detects broken routes quickly so the command exits and you can recover.

For auto-healing, wrap ssh in a loop (with a sleep) or use autossh with the same options plus -M 0 — autossh's own monitoring doesn't work with localhost.run.

How do I move my domain to another account?

  1. Cancel the existing subscription, if you still have access to the old account.
  2. Set up the same domain in the new account.
  3. Update the _lhr TXT record to the new domain ID.
  4. Pay for the new subscription — remaining time is credited after the next step.
  5. Email help@localhost.run to say you moved; the old subscription is cancelled and the new one credited.