Connection Issues
Fix SSH connection failures in CtrlOps. Diagnose timeouts, key errors, firewall rules, and security groups for AWS, GCP, Azure, DigitalOcean - in minutes.
You hit New Connection, fill in the form, click Connect SSH, and instead of landing in your server you see "Connection Failed" or "Taking longer than usual". This page walks through the most common causes and exact fixes.
How to Diagnose SSH Connection Failures
- Why a "Connection failed" error appears and how to read every row of the modal.
- Copying the full error report to share with support or the AI Assistant.
- Fixing wrong username, wrong key, or wrong IP.
- Firewall and security group fixes for AWS, GCP, Azure, DigitalOcean.
- What to do when CtrlOps says "Windows Server Not Supported".
- When to use the SSH Setup Wizard.
First, find the exact error
When a connection fails, CtrlOps opens a Connection failed modal that breaks the failure down rather than dumping a raw SSH string at you. Read it top to bottom:
| Row | What it tells you |
|---|---|
| Server | The saved connection name, so you know which server this is about |
| Address | The user@ip:port CtrlOps actually dialled. Check this first, a typo here explains a surprising share of failures |
| Failed at | The stage that broke, e.g. Dialling (TCP + SSH handshake). This alone splits network problems from auth problems |
| Took | How long it tried before giving up. A full 45 seconds points at a firewall silently dropping packets; a failure in under a second points at auth or a refused port |
| Error | A category / code pair such as network / PreflightTimeout |
Under that, What happened is a timestamped timeline of the attempt, marking which lines came from the app and which from SSH, so you can see exactly where it stalled. Three buttons sit at the bottom: Close, Try again, and Copy report.
The error wording still matters most. Scan the table below to find your case:
| What the error says | Most likely cause |
|---|---|
| "Connection timed out" | Firewall or security group blocking port 22 |
| "Connection refused" | SSH service isn't running on the server |
| "Permission denied (publickey, password)" | Wrong username, wrong password, or wrong key |
| "Host key verification failed" | Server's identity changed since you last connected |
| "Network unreachable" | DNS or routing problem |
| "Taking longer than usual" | Slow server, slow network, or wrong IP |
| "Windows Server Not Supported" | The server is running Windows; use a Linux server instead |
Copy the full error report
Click Copy report (bottom right of the Connection failed modal)
This puts the whole failure on your clipboard as plain text: the server name, the address dialled, the stage it failed at, how long it took, the error category and code, and the complete What happened timeline. Paste it straight into Discord, an email, or the AI Assistant instead of retyping an error message from memory or a screenshot.
The report is safe to share. It carries the address CtrlOps dialled and the trace of what happened, never your password or the contents of your private key.
Common problems and fixes
When all else fails: gather details and ask
Before you reach out for help, collect:
| Info | Where to find it |
|---|---|
| Everything about the failure itself | Click Copy report in the Connection failed modal. It captures the server, the address dialled, the stage it failed at, the timing, the error code, and the full timeline in one paste |
| Auth method | Password, .pem key, or SSH Agent |
| Cloud provider | AWS, GCP, DigitalOcean, etc. |
Output of ssh -vvv user@ip from your local terminal | Run on your local machine to capture verbose SSH logs |
Then bring it to:
- Discord community: Join Discord
- AI Assistant inside CtrlOps, paste the copied report and ask for a translation. It's surprisingly good at decoding SSH error messages.
Always keep a fallback way into your server, your cloud provider's web console, a second user, or a different SSH key on a different machine. The day your only SSH key stops working is not the day you want to be locked out.