-
-
Notifications
You must be signed in to change notification settings - Fork 43
Quick Start
This guide starts a persistent WebSSH instance for evaluation or homelab use. For an Internet-facing installation, continue with Production Deployment before accepting users.
- Docker Engine with the Compose plugin, or another Docker-compatible runtime.
- TCP port
5000available on the host. - At least one SSH server that the WebSSH container can reach.
- A modern browser.
Download the homelab Compose file and start WebSSH:
mkdir webssh-deployment
cd webssh-deployment
curl -O https://raw.githubusercontent.com/bifrost0x/webssh/main/docker-compose.yml
docker compose up -dPowerShell:
New-Item -ItemType Directory -Path webssh-deployment
Set-Location webssh-deployment
Invoke-WebRequest `
https://raw.githubusercontent.com/bifrost0x/webssh/main/docker-compose.yml `
-OutFile docker-compose.yml
docker compose up -dOpen http://localhost:5000 or replace localhost with the host address.
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:latestThe named volume is essential. It preserves users, settings, keys, host trust, and the generated application secret across container updates.
A fresh homelab instance with an empty database redirects to /register.
Exactly the first browser-created account becomes administrator. The one-time
bootstrap path closes atomically once that account exists.
Create the account immediately on a trusted network. Never expose an unclaimed fresh instance to untrusted clients.
If you prefer an explicit CLI bootstrap, disable browser bootstrap and run:
docker compose exec webssh \
/app/entrypoint.sh flask --app start:app create-admin --username adminThe command prompts for the password without echoing it. Running it for an existing username promotes that account without changing its password.
Check container state and readiness:
docker compose ps
curl -fsS http://localhost:5000/health
curl -fsS http://localhost:5000/readyExpected responses:
{"status":"ok"}{"status":"ready"}Then sign in and perform a small functional check:
- Open Quick Connect.
- Enter the SSH hostname, port, remote username, and one authentication method.
- Review and accept the host key only after checking the fingerprint when that assurance is available.
- Open a terminal and run a harmless command such as
uname -a. - Open the SFTP workspace and list the remote home directory.
- Disconnect the session.
The base Compose file intentionally configures:
DEPLOYMENT_PROFILE=homelab- wildcard CORS for trusted-network convenience;
- non-secure browser cookies for HTTP;
- tmux support enabled and selected by default;
- one Gunicorn worker with a bounded thread pool;
- persistent state in the
webssh_datavolume.
These defaults are convenient on a trusted LAN but are not a production security profile.
docker compose ps
docker compose logs --tail=200 websshConfirm that another process is not already using port 5000 and that the
container healthcheck is not failing.
The response lists only failed component categories. Typical causes are an unwritable data volume, SQLite failure, active maintenance mode, or a runtime that is shutting down. See Health Checks and Troubleshooting.
Verify connectivity from the container network, not only from the Docker host.
Check DNS resolution, firewall rules, the SSH port, and BLOCK_INTERNAL_SSH.
tmux must be installed on the remote SSH host. If it is unavailable, WebSSH falls back to a regular shell.
WebSSH documentation - Project - Issues - Discussions - Security
WebSSH Wiki
Install and operate
- Installation from Source
- Docker and Docker Compose
- Production Deployment
- Reverse Proxy and Subfolder Deployment
- Upgrading, Rollback, and FAQ
Identity and access
- Users and Account Management
- Authentication Overview
- LDAP and Active Directory
- OpenID Connect
- Passkeys and Recovery Codes
SSH and files
- SSH Connections and Host Keys
- Profiles, Jump Hosts, and Commands
- Terminal and Persistent tmux Sessions
- SFTP File Workspace and Transfers
- Tailscale SSH
Reference and administration