Expose local servers to the internet

No installation, no signup. Uses SSH to tunnel.

ssh -R 80:localhost:8888 serveo.net

Email me at trevor@serveo.net.
On Twitter @trevordixon.

When you establish an SSH connection to serveo.net, a subdomain will be assigned to forward HTTP (and HTTPS) traffic to your local server.

Watch how a user forwards traffic from https://exussum.serveo.net to localhost:8999 on their laptop, then uses the GUI to replay requests:

Versus ngrok

Serveo serves exactly the same purposes as ngrok. The primary advantage of Serveo over ngrok is the use of your existing SSH client, so there's no client application to install.

Other slight advantages include preservation of URLs across reconnect for free (ngrok allows this only for payers) and in-terminal request inspection and replay (ngrok uses a web interface).

Usage

Basic usage looks like this:

    ssh -R 80:localhost:8888 serveo.net

The -R option instructs your SSH client to request port forwarding from the server and proxy requests to the specified host and port (usually localhost). A subdomain of serveo.net will be assigned to forward HTTP traffic.

Multiple port forwards can be requested at once:

    ssh -R 80:localhost:8888 -R 80:localhost:9999 serveo.net

The target server doesn't have to be on localhost:

    ssh -R 80:example.com:80 serveo.net

The subdomain is chosen deterministically based on your IP address, the provided SSH username, and subdomain availability, so you'll often get the same subdomain between restarts. You can also request a particular subdomain (from a set list):

    ssh -R incubo:80:localhost:8888 serveo.net
    ssh -R incubo.serveo.net:80:localhost:8888 serveo.net

Change the SSH username to get assigned a different subdomain:

    ssh -R 80:localhost:8888 foo@serveo.net

Ports other than 80 may be requested, and raw TCP traffic will be forwarded. (In this case, there's no way to route connections based on hostname, and the host, if specifed, will be ignored.)

    ssh -R 1492:localhost:1492 serveo.net

If port 0 is requested, a random TCP port will be forwarded:

    ssh -R 0:localhost:1492 serveo.net

GUI

Pressing g will start a GUI session. Use up and down arrow keys to inspect requests/responses, and left and right arrow keys to switch between request and response views. Use j, k, u, d, p, and n to scroll the lower inspector pane. Press r to replay the selected request. Press h or ? at any time for help.