Standalone web server and WebSocket-to-SSH proxy with the SSH Term web client embedded.
255
SSH Term (https://github.com/c2FmZQ/sshterm) is a full-featured SSH and SFTP client that runs entirely in your web browser using WebAssembly (WASM) and xterm.js.
c2fmzq/sshterm-server is a lightweight, self-contained server that embeds the SSH Term web application and proxies WebSocket connections to configured SSH endpoints. It automatically injects configured endpoints into /config.json on the fly, so no manual endpoint setup is needed in the browser.
Note: For full production deployments with automatic ACME/Let's Encrypt certificates, Single Sign-On (SSO), and SSH certificate issuance, consider pairing SSH Term with c2fmzq/tlsproxy.
xterm.js)-J), in-memory SSH agent & agent forwarding (-A)rz/sz) and streaming SFTP file transfersecdsa-sk) security key / passkey support and SSH certificatesFROM scratch image: linux/amd64, linux/arm64, linux/arm/v7 (runs as non-root 1000:1000, listens on :8080 by default)Run sshterm-server and expose one or more SSH endpoints with --ep name=host[:port]:
docker run -d \
--name=sshterm-server \
--user=1000:1000 \
--publish=127.0.0.1:8080:8080 \
c2fmzq/sshterm-server:latest \
--ep myserver=192.168.1.100:22 \
--ep jumpbox=192.168.1.10:2222
Then open http://127.0.0.1:8080 in your browser.
config.json and TLSdocker run -d \
--name=sshterm-server \
--user=1000:1000 \
--publish=8443:8080 \
--volume=/path/to/config:/config:ro \
c2fmzq/sshterm-server:latest \
--config=/config/config.json \
--tls-cert=/config/cert.pem \
--tls-key=/config/key.pem \
--ep myserver=192.168.1.100:22
The container entrypoint is ["/bin/sshterm-server", "--addr=:8080"]. Additional flags can be appended to docker run:
--addr <ip:port>: TCP address to listen on (default :8080 in container).--ep <name=host[:port]> (or --endpoint, repeatable): Defines a WebSocket proxy endpoint at /_ws/<name> forwarding to host:port (port defaults to 22) and merges it into /config.json.--config <file>: Optional path to a base config.json file.--tls-cert <file> and --tls-key <file>: Serve HTTPS instead of HTTP.-v: Print the version and exit.Images are signed using Cosign keyless OIDC via GitHub Actions:
cosign verify \
--certificate-identity-regexp='^https://github[.]com/c2FmZQ/sshterm/[.]github/workflows/release[.]yml' \
--certificate-oidc-issuer=https://token.actions.githubusercontent.com \
c2fmzq/sshterm-server:latest
For complete usage instructions, config.json reference, and security guidelines, visit the GitHub repository:
Content type
Image
Digest
sha256:71c340266…
Size
8.2 MB
Last updated
about 5 hours ago
docker pull c2fmzq/sshterm-server