WebSSH v1.1.0
WebSSH v1.1.0
WebSSH v1.1.0 is a substantial security, reliability, identity, and administration update. It adds native web backup and restore, modern authentication options, stronger SSH and storage boundaries, safer transfer handling, and a significantly expanded test and supply-chain baseline.
Highlights
Native web backup and restore
- Create, download, upload, verify, and restore backups directly from Administration > Backup & Restore.
- Create online-consistent snapshots with SQLite's native backup API while WebSSH remains available.
- Protect generated archives with administrator-only, session-bound, one-time downloads and automatic expiry.
- Validate uploaded archives against path traversal, symlinks, duplicate or encrypted members, ZIP bombs, checksum and size mismatches, malformed databases, and unsupported schema versions.
- Restore through maintenance mode with password reauthentication, two explicit confirmations, emergency rollback, session invalidation, and a controlled application restart.
- Preserve verification and restore support for legacy format-v1 archives while new CLI and web archives use format v2 with explicit data-schema compatibility.
- Keep the existing offline CLI backup, verification, restore, and persisted-secret rotation workflows fully supported.
Backup archives contain highly sensitive application data. Store downloaded archives encrypted, off-host, and with access restricted to administrators.
Authentication and account security
- Add username-less discoverable passkey sign-in and a password-protected credential replacement path.
- Add OIDC identity support with explicit administrator linking based on stable issuer and subject identifiers. Accounts are never linked automatically by email address.
- Add recovery-code management, hardened recovery login, bounded WebAuthn challenges, and a dedicated Security interface.
- Make the first account on a fresh standard installation the initial administrator through a one-time atomic bootstrap flow.
- Preserve existing administrator assignments and repair only legacy installations that contain users but no administrator.
- Add administrator audit export, retention controls, completeness metadata, and safer asynchronous security actions.
SSH, SFTP, and persistent-state hardening
- Replace Eventlet with native threaded Socket.IO and background execution while retaining the required single-worker deployment model for process-local SSH state.
- Add per-user SSH host trust, persistent host-key verification, DNS/address pinning, stronger SSRF controls, resource quotas, and bounded Paramiko operations.
- Add explicit transfer lifecycle management, cancellation, bounded upload and download routes, reliable temporary-client cleanup, and safer remote ZIP handling.
- Harden atomic storage, schema validation, corruption handling, migrations, user deletion quarantine, and secret rotation with rollback safeguards.
- Add graceful runtime shutdown, connection cleanup, liveness and readiness endpoints, and persistent-data write checks.
- Upgrade the container runtime to Python 3.14 and refresh the locked Python, JavaScript, and CI dependency stack.
Saved connection workflow
- Launch complete saved connections directly without flashing the Quick Connect dialog.
- Fall back to review only when a password, key, jump-host credential, or authorization decision is still required.
- Upload SSH keys inline while editing a saved connection without losing entered profile data.
- Rename stored keys atomically while preserving key usability after mutation acknowledgements.
- Use consistent Saved Connections and Quick Connect terminology across all six supported languages.
- Improve keyboard accessibility, touch targets, and the 375 px mobile layout.
Operations and supply-chain security
- Add
/healthand/readyendpoints and use readiness checks for the container healthcheck. - Add a production Compose overlay and clearer reverse-proxy, secret, identity-provider, backup, and recovery guidance.
- Reproducibly lock Python dependencies with hashes and validate the locks in CI.
- Pin GitHub Actions and container inputs, and add CodeQL, Trivy, dependency, browser, Redis 7/8, SSH integration, and container-threading gates.
- Publish multi-architecture AMD64 and ARM64 images with SBOM and provenance attestations.
Upgrade notes
-
Create and download a verified backup before upgrading. The new native Admin workflow can create an online-consistent backup without stopping WebSSH.
-
Pull the versioned image
ghcr.io/bifrost0x/webssh:1.1.0, or update an existing Compose deployment with:docker compose pull docker compose up -d
-
Wait for the container healthcheck and verify
/ready, administrator login, stored keys, a direct terminal connection, and SFTP before returning the service to users.
Built-in database and storage migrations run during startup. Existing users and administrator assignments are preserved, but backups remain mandatory before an upgrade of persistent state.
Custom Python deployments should note that the runtime no longer uses Eventlet. The official container now uses Python 3.14. WebSSH must still run with one application worker because live SSH state remains process-local.
Validation
The release commit passed the complete Python test matrix, JavaScript unit tests, browser E2E scenarios, Redis 7 and 8 checks, SSH integration, container-threading smoke tests, dependency-lock verification, CodeQL, Trivy image scanning, and multi-architecture Docker builds.
Included pull requests
- #60 - Upgrade dependencies and harden multi-user security
- #58 - Update Playwright to 1.62.0
- #64 - Update pinned GitHub Actions
- #63 - Update the Docker runtime to Python 3.14
- #65 - Isolate secret-rotation CLI fixtures
- #69 - Improve saved connection workflows
- #70 - Preserve key usability after mutations
- #71 - Add native Admin backup and restore
- #67 - Update Playwright to 1.62.1
- #66 - Update Graphify to 0.9.31
Full changelog: v1.0.0...v1.1.0
Thank you to everyone who tested WebSSH, reported issues, suggested improvements, or contributed changes.