Changelog¶
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[v2.3.1] - 2026-03-27¶
Fixed¶
- API Reverse Proxy: Web panel now proxies all API calls through
/api/autossh/to the backend, fixing remote access where the browser could not reachlocalhost:8080on the Docker host - Web Panel Networking: Changed web container to
network_mode: "host"so it can reach the autossh API on the host network - Tunnel Status Polling: Fixed status icons stuck on loading (hourglass) by distinguishing API errors from valid empty responses in
fetchTunnelStatuses() - Home Directory Permissions: Added
chownfor/home/myuserafter PUID/PGID change, fixingPermission deniedwhen interactive auth creates~/.autossh-sockets - Config Directory Permissions: Added
chownfor/etc/autossh/configto fix ownership when Docker auto-creates bind-mount directories as root - WebSocket Session Cleanup: Fixed hash lock stuck forever when browser disconnects abnormally by killing the process group (SIGTERM/SIGKILL) instead of only closing the PTY
- Interactive Auth Race Condition: Fixed Go
selectrace where client disconnect could kill a successfully forked SSH process by prioritizing session completion over client disconnect - Forked SSH SIGHUP: Keep PTY master open after successful
ssh -fauthentication to prevent kernel SIGHUP from killing the forked SSH child before it completessetsid() - QEMU Build Compatibility: Added
GOMAXPROCS=1to Dockerfile Go builds to prevent deadlocks during cross-platform QEMU emulation (s390x, riscv64, etc.)
Added¶
- CI/CD Docker Publish: GitHub Actions workflow to automatically build and push multi-arch Docker images on release
- Manual Workflow Dispatch: Docker publish workflow supports manual triggering with version input
- Docker Documentation: New "Docker Deep Dive" page covering Dockerfile walkthrough, build optimizations, multi-arch builds, and CI/CD pipeline
Removed¶
API_BASE_URLfrontend exposure: TheAPI_BASE_URLenvironment variable is now used server-side only for proxying; it is no longer sent to the browser
[v2.3.0] - 2026-03-20¶
Added¶
- WebSocket Server (ws-server): New WebSocket server in the autossh container for in-browser interactive authentication
- Configurable via
WS_PORTenvironment variable (default:8022) - Spawns
autossh-cli authsessions for interactive tunnels
- Configurable via
- In-Browser Terminal Modal: xterm.js-based terminal modal in the web panel for interactive SSH authentication
- Supports password and 2FA/TOTP input directly in the browser
- Auto-closes on successful authentication and refreshes tunnel status
- Terminal icon badge on Start/Restart buttons for interactive tunnels
- Dark/Light Theme Support: Color scheme picker in the web panel navigation bar
- User preference saved in browser storage and persists across sessions
- Configurable Web Panel Port:
PORTenvironment variable to change the web panel listen port (default:5000) - WebSocket Proxy: Go web server proxies WebSocket connections from browser to ws-server via
WS_BASE_URL - Tunnel Detail Page Enhancements: Interactive auth badge and terminal-enabled controls on the tunnel detail page
Changed¶
- Web Panel Architecture: Go web server now handles WebSocket proxy in addition to static file serving
- Interactive Auth UX: Interactive tunnels can now be started from the web interface when ws-server is configured
[v2.2.0] - 2026-02-04¶
Added¶
- Interactive Authentication (CLI): New
autossh-cli authcommand for tunnels requiring 2FA or password authentication- Uses SSH control sockets for connection management
- Supports hash prefix matching (8+ characters)
- Automatic PID tracking and state management
- Interactive Auth Test Server: Dockerized SSH server for testing 2FA authentication (
ssh-interactive-auth-sample-server/)- Pre-configured with Google Authenticator
- Includes Makefile for easy setup
- API Concurrent Connections: Added socat support for handling concurrent API requests
- Web Panel Enhancements:
- Floating toast notifications with copy-to-clipboard support
- Copy hash button on tunnel detail page
- Interactive auth CLI documentation in help page
- Improved config grid layout and element consistency
Changed¶
- Interactive Tunnel UI: Enhanced UI for interactive auth tunnels with fingerprint icon toggle
- i18n Improvements: Static translation keys for language button hints
[v2.1.0] - 2026-02-03¶
Added¶
- Config API: New RESTful API for configuration management (
/configendpoints)GET /config- Get all tunnel configurationsGET /config/<hash>- Get single tunnel configurationPOST /config- Replace all configurationsPOST /config/new- Add new tunnelPOST /config/<hash>- Update single tunnelDELETE /config/<hash>- Delete tunnelPOST /config/<hash>/delete- Delete tunnel (POST alternative)
- Tunnel Detail Page Config Editing: Edit tunnel configuration directly from the detail page
- Per-Row Save Button: Save individual tunnel configurations without affecting others
- Localized External Resources: Material Design CSS/JS and fonts are now served locally
- Enhanced Status Visualization: Improved tunnel status display in the detail page
- Hash Prefix Matching: Support 8+ character hash prefixes for tunnel identification
- Refresh Interval Label: Added refresh interval to auto-refresh label in i18n
Changed¶
- API Modularization: Refactored
api_server.shinto separate modules for better maintainability - Config API Integration: Web panel now uses Config API instead of direct file access
- Optimized Row Updates: Only update saved row instead of full page refresh
- autossh Container Config Mount: Changed from read-only (
ro) to read-write (rw) to support Config API writes - Web Panel Simplified: Removed config volume mount and PUID/PGID environment variables - all config operations now go through Config API
Fixed¶
- Loading Indicator: Show hourglass loading indicator on main page status column
- i18n Ready Check: Check
i18n.isReadybefore callingt()to prevent showing raw keys - Control Buttons: Re-enable control buttons before replacing them
- Save Delay: Increased delay after save to wait for file monitor restart
- Fast Retry: Added fast retry for status fetching on initial load
- Config Save UX: Improved config save user experience and added request logging
- Config API Path: Use
/etc/autossh/config/as default path - JSON Output: Fixed JSON output and logging issues in config API
- Tunnel Status: Fixed internal tunnel status state updates in detail page
- Status Identification: Improved tunnel status identification and handling
- Hash Mapping: Use hash instead of name for tunnel status mapping
[v2.0.0] - 2026-01-30¶
Added¶
- Web Panel: Full-featured web-based management interface
- HTTP API: RESTful API for programmatic tunnel control
- CLI Tool (autossh-cli): Command-line interface for tunnel management
- Individual Tunnel Control: Start, stop, and manage each tunnel independently
- Bearer Token Authentication: Optional API authentication support
- Tunnel Direction Modes: Support for both default (service-oriented) and SSH-standard modes
- Internationalization: Multi-language support for web panel
- Automatic Backup: Configuration backup before modifications
Changed¶
- Architecture: Separated web panel into its own container with API-driven design
- Configuration: Enhanced YAML configuration with more options
- Documentation: Moved docs to dedicated worktrees (docs_en, docs_zh)
Fixed¶
- Various bug fixes and stability improvements
[v1.6.2] - 2025-07-23¶
Added¶
- Material UI: Integrated Material Design styles and components for modern UI
- Data Table: Material data table with input validation and animated feedback
- SSH Config Guide: Comprehensive SSH config usage documentation
Changed¶
- UI Styling: Center aligned text in table cells and inputs
[v1.6.1] - 2025-06-22¶
Changed¶
- Docker Base Image: Updated Alpine base image version
- Dockerfile.web: Updated base image for web panel
Fixed¶
- Documentation updates for README (English and Chinese)
[v1.6.0-fix] - 2025-03-04¶
Fixed¶
- SSH Tunnel Configuration: Adjusted SSH tunnel configuration in start_autossh.sh
- Logging: Improved logging output
- Backup Permissions: Fixed backup folder permission issues
- Typos: Minor typo fixes
[v1.6.0] - 2025-02-12¶
Added¶
- Web Panel: Initial web-based configuration interface (migrated from webpanel-golang)
Changed¶
- Version Numbering: Updated to match version number tradition
- Permissions: Use PGID and PUID to fix permission issues
Fixed¶
- README redirection issues
[v1.5.0] - 2025-02-12¶
Added¶
- Config File Monitor: Background monitoring of config file changes
- Auto Reload: Automatic service reload when configuration changes
[v1.4.0] - 2025-02-03¶
Added¶
- Forward Tunneling: Support for forwarding tunnels to remote host (local_to_remote direction)
[v1.3.0] - 2025-01-13¶
Changed¶
- Remote Port Parsing: Enhanced start_autossh.sh to parse complex remote_port configurations (ip:port format)
- Makefile: Added build-test target for local testing
[v1.2.0] - 2025-01-09¶
Added¶
- Multi-architecture Support: Build and push Docker images for multiple architectures (amd64, arm64, arm/v7, arm/v6, 386, ppc64le, s390x, riscv64)
- Makefile: Added Makefile for multi-arch Docker image build and push
- PUID/PGID Environment Variables: Dynamic user/group ID matching with host
Changed¶
- Entrypoint: Improved entrypoint.sh for user and group ID matching
- Non-root User: Container runs as non-root user (myuser)
Removed¶
- Custom Dockerfile and compose file (consolidated into main files)
[v1.1.1] - 2024-12-29¶
Changed¶
- Environment Variables: Renamed to HOST_UID/GID in docs and configs
Fixed¶
- User Creation: Only create new myuser when provided uid/gid differ from 1000
[v1.1.0] - 2024-12-28¶
Added¶
- Custom Dockerfile: Added custom Dockerfile and compose files for UID/GID matching
- Auto Restart: Container auto-restart on failure
- License: Added MIT License
[v1.0.0] - 2024-11-14¶
Added¶
- Initial Release: Dockerized SSH tunnel manager with autossh
- YAML Configuration: Define multiple SSH tunnel mappings using config.yaml
- Automatic SSH Maintenance: autossh keeps tunnels alive
- Docker Compose: Easy deployment with docker-compose