WebSSH v1.0.0
·
223 commits
to main
since this release
Immutable
release. Only release title and notes can be modified.
WebSSH v1.0.0
This is the first official release of WebSSH: a modern, self-hosted browser-based SSH terminal with an integrated SFTP file manager.
WebSSH is designed for homelabs, server administration, and small teams that want convenient browser access without relying on an external service.
Highlights
Terminal
- Up to 10 concurrent SSH sessions
- Tabs and 1, 2, or 4-pane layouts
- Broadcast input across multiple sessions
- Persistent remote sessions through tmux
- Session restoration and manual reconnect
- Saved connection profiles and jump hosts
- Reusable post-connect command sets
- Command palette, terminal search, notes, and transcripts
- Configurable scrollback and multiple terminal themes
SFTP file manager
- Dual-pane file browser
- Drag-and-drop uploads
- Server-to-server transfers
- Transfer queue with conflict handling
- Batch operations
- File previews and log tail mode
- Inline text editor
- Directory downloads as ZIP archives
- Direct SFTP access without opening a terminal
Multi-user administration
- Individual user accounts
- Per-user profiles, SSH keys, commands, and settings
- Administrator panel and user management
- Registration controls
- Structured audit logging
- Six interface languages
Security
- Encrypted SSH key storage
- Per-user encryption key derivation
- bcrypt password hashing
- CSRF protection and rate limiting
- Persistent SSH host-key verification
- Session ownership checks
- Security headers and optional SSRF protection
- Optional, restricted Tailscale SSH integration
Deployment
- Docker and Docker Compose support
- Multi-architecture images for AMD64 and ARM64
- Reverse-proxy examples for nginx, Traefik, and Caddy
- Subfolder deployment support
- Persistent configuration and user data under
/app/data
Quick start
docker run -d \
--name webssh \
-p 5000:5000 \
-e CORS_ORIGINS=http://localhost:5000 \
-v webssh_data:/app/data \
--restart unless-stopped \
ghcr.io/bifrost0x/webssh:1.0.0Then open http://localhost:5000 and create the first administrator account.
Updating an existing Docker Compose installation
Back up your persistent data before updating, then run:
docker compose pull
docker compose up -dImportant notes
- WebSSH currently uses in-memory SSH session state and must run with a single application worker.
- Persistent tmux sessions require tmux to be installed on the remote SSH host.
- Tailscale SSH is disabled by default and uses the WebSSH node's shared Tailscale identity. Review the documented access restrictions before enabling it.
- Keep
/app/dataon a persistent Docker volume. It contains accounts, settings, encrypted keys, profiles, and the generated secret key.
Thank you to everyone who tested WebSSH, submitted feedback, or contributed improvements.
Questions, ideas, and feature requests are welcome in GitHub Discussions.