Sign inSign up

c2fmzq/sshterm-server

By c2fmzq

•Updated about 5 hours ago

Standalone web server and WebSocket-to-SSH proxy with the SSH Term web client embedded.

Image
Networking
Security
Developer tools
0

255

c2fmzq/sshterm-server repository overview

⁠sshterm-server

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⁠.

⁠Features

  • Client-side SSH & SFTP in the browser (Go WASM + xterm.js)
  • Jump hosts (-J), in-memory SSH agent & agent forwarding (-A)
  • ZMODEM (rz/sz) and streaming SFTP file transfers
  • WebAuthn (ecdsa-sk) security key / passkey support and SSH certificates
  • Multi-arch FROM scratch image: linux/amd64, linux/arm64, linux/arm/v7 (runs as non-root 1000:1000, listens on :8080 by default)

⁠Quick Start

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.

⁠With Custom config.json and TLS
docker 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

⁠Command-Line Flags

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.

⁠Verifying the Image Signature

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

⁠Documentation & Source

For complete usage instructions, config.json reference, and security guidelines, visit the GitHub repository:

Tag summary

Content type

Image

Digest

sha256:71c340266…

Size

8.2 MB

Last updated

about 5 hours ago

docker pull c2fmzq/sshterm-server