Loading Smiley Hoster
Skip to content

Diagnose an SSH tunnel that no longer responds

Smiley Hoster Team · · 2 min read
A path from computer through SSH to a private service marks three diagnostic checkpoints.

Vultr's Cycle.io announcement describes easier infrastructure operations. A failed SSH tunnel still benefits from a simple diagnostic question: which part of the path broke? This guide troubleshoots a local forward to a private web service already intended to run on your VPS.

1. Write down the connection path

In the example, your browser reaches local port 18080. SSH connects to vps.example.com, and the VPS connects to its own port 8080. Substitute the real account, server and destination port.

The first 127.0.0.1 in the forwarding specification describes the listener on your computer. The second is the destination as reached from the VPS. Keep these two perspectives separate when deciding where to investigate.

Save the original command and the actual error message. Note the most recent deployment, port change, login change or laptop sleep event. A recent change is a useful lead, but it does not by itself establish the cause.

Agree on what a successful application response should look like before testing. A login page, for example, is a different result from a blank browser error.

2. Observe one foreground connection

If you control an earlier test tunnel, stop it with Ctrl+C. Start a single visible diagnostic session:

Example
ssh -v -N \ -L 127.0.0.1:18080:127.0.0.1:8080 \ admin@vps.example.com

Verbose mode provides connection diagnostics, while -N avoids running a remote command. Keep that terminal open and visit http://127.0.0.1:18080 in your local browser. Use HTTPS if the target service requires it, and investigate certificate warnings rather than bypassing them.

A local port conflict calls for identifying the existing listener or choosing another free local port. Update the browser address as well. Do not kill an unfamiliar process just to make the example port available.

If authentication fails, resolve the account or key issue first. An unexpected server identity requires independent verification; removing the warning blindly is not a troubleshooting step.

3. Follow the failure to the remote service

When SSH authentication succeeds but a subsequent request fails, check the destination on the VPS. Ask whether the intended service is running and listening on the expected port. That check must reflect the server's perspective, because the forwarded connection is made from there.

Distinguish an application HTTP error from a refused TCP connection. Record the exact message and timestamp. Do not expose the private port publicly as a workaround: that would change the access model instead of explaining the fault.

Prepare a short handoff with the expected path, failing stage and recent changes. Redact sensitive addresses and account details before sharing verbose output. Once corrected, test the useful application path and close the temporary tunnel with Ctrl+C. You should leave with both a working connection and a clear understanding of its endpoints.

Sources: Vultr, OpenSSH — ssh.

Slide 1 of 5: VPS troubleshooting. SSH tunnel not responding?. Find the failing stage: local port, SSH login or remote service.
Slide 2 of 5: Step 1 of 3. Map the connection path. Trace browser > local port > SSH server > destination service. Local and VPS loopback addresses refer to different machines. Save the command and exact error.
Slide 3 of 5: Step 2 of 3. Watch one SSH session. Run one foreground tunnel with ssh -v -N. Keep the terminal open while testing. Resolve local port conflicts or login failures first. Verify unexpected server identity warnings independently.
Slide 4 of 5: Step 3 of 3. Check the remote service. After SSH login succeeds, check the service and destination port from the VPS. Separate HTTP errors from refused TCP connections. Keep the private port private; do not expose it as a workaround.
Slide 5 of 5: Confirm the fix. Retest the application path. Redact sensitive details before sharing logs. Once the fix is confirmed, close the temporary tunnel with Ctrl+C.
On social media

See it in our social posts

The key steps of this article, as a carousel. Follow us to catch the next ones.

Did this article answer your question?
Your feedback shapes what we write next.

Your site online today

Free migration* · 30-day refund

Get started* A site under 30 GB, cPanel, WordPress and VPS plans.