1
0
Fork 0
mirror of https://github.com/imjasonh/ssh-proxy synced 2026-07-07 00:23:33 +00:00
ssh-proxy/README.md
Jason Hall e7cba0ce5e update readme more
Signed-off-by: Jason Hall <jason@chainguard.dev>
2025-09-13 22:56:45 -04:00

41 lines
1.5 KiB
Markdown

# SSH Proxy
A Go library and proxy server for tunneling SSH connections over WebSockets, designed for Cloud Run apps that don't support raw TCP connections.
![Architecture Diagram](diagram.png)
## Overview
SSH Proxy provides two main functions:
1. **TCP → WebSocket Proxy** - Accepts TCP connections and forwards them to a WebSocket backend on Cloud Run.
2. **WebSocket → SSH Proxy** - Accepts WebSocket connections and forwards them to a local SSH server implementation.
This allows you to deploy SSH services on Cloud Run by tunneling SSH traffic over HTTP/WebSocket connections.
## Usage
### TCP → WebSocket Proxy
Use the SSH proxy program to forward local SSH connections to a WebSocket endpoint.
You can run this in [GKE Autopilot](https://cloud.google.com/kubernetes-engine/docs/concepts/autopilot-overview) for a minimal, cost-effective and low-maintenance environment to proxy requests.
### WebSocket → SSH Proxy
Create a WebSocket handler that forwards connections to a local SSH server:
```go
// TODO: run an SSH server on :22
// Forward WebSocket connections to local SSH server at :22
http.Handle("/ssh", sshproxy.ProxyWebSocketToSSH(":22", websocket.Upgrader{
// Accept requests from all origins; consider changing this.
CheckOrigin: func(r *http.Request) bool { return true },
}))
http.ListenAndServe(":8080", nil)
```
## Authentication
The proxy sends Google Cloud identity token authentication to the backend service. The backend service can be configured to only accept traffic from the proxy.