Layover
SSH through firewalls. Layover relays your SSH connections over TLS port 443, so they look like normal HTTPS to restrictive networks.
layover.sh — free public relay, ready to use.
You (airport wifi) ──TLS:443──▶ layover.sh ──TCP:22──▶ Your Server
Install
Or download a prebuilt binary from Releases.
Usage
That's it — your SSH connection is tunneled through layover.sh over TLS on port 443.
Permanent SSH config
Instead of typing -o ProxyCommand=... every time:
# Route specific hosts through Layover
# Or route everything
This writes to ~/.ssh/config. Re-running --install replaces the previous Layover block, so it's safe to run multiple times. Preview first by omitting --install:
Self-hosting
You can run your own relay instead of using layover.sh. You need a server with a public IP on port 443, a domain, and a TLS certificate.
# Get a cert
# Run the relay
Then point clients at it:
# One-off
# Environment variable
# Or persist in SSH config
Verbose mode
Use -v to log connection lifecycle details — useful for debugging or monitoring:
layover: [#1 203.0.113.5:49152] accepted
layover: [#1 203.0.113.5:49152] TLS handshake complete
layover: [#1 203.0.113.5:49152] -> myserver.com:22
layover: [#1 203.0.113.5:49152] resolved myserver.com:22 -> 93.184.216.34:22
layover: [#1 203.0.113.5:49152] connected 10.0.0.1:54321 -> 93.184.216.34:22
layover: [#1 203.0.113.5:49152] closed (1234B up, 5678B down, 42.3s)
Connection IDs (#1, #2, ...) link all log lines for a single relay session.
Development mode
For local testing without TLS:
# Server
# Client
How it works
- SSH invokes
layover connectas a ProxyCommand - Client opens a TLS connection to the relay on port 443
- Client sends the destination (
host:port) - Relay authenticates via challenge-response, connects to the destination
- Bytes flow bidirectionally: SSH <-> client <-> relay <-> destination
- To the network, it all looks like HTTPS traffic
CLI reference
layover connect <destination>
ProxyCommand mode — bridges stdin/stdout through the relay to the destination.
| Flag | Default | Description |
|---|---|---|
--server |
layover.sh |
Relay server address (also LAYOVER_SERVER env) |
--no-tls |
off | Disable TLS (dev only) |
layover serve
Run a relay server.
| Flag | Default | Description |
|---|---|---|
--listen |
0.0.0.0:443 |
Bind address |
--cert |
required | TLS certificate (PEM) |
--key |
required | TLS private key (PEM) |
-v, --verbose |
off | Log connection details |
--no-tls |
off | Disable TLS (dev only) |
layover setup
Generate or install SSH config.
| Flag | Default | Description |
|---|---|---|
--server |
layover.sh |
Relay server address |
--host |
* |
Host pattern(s) to route (repeatable) |
--install |
off | Write to ~/.ssh/config |
--no-tls |
off | Include --no-tls in ProxyCommand |
When using Host * (the default), an exclusion entry for the relay server is automatically added to prevent routing loops.
Building from source