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.
-
Instance Removal via SSH: Delete instances using
ssh /rm/instance.project@hostorssh /remove/instance.project@hostcommands- Force deletion with
/rm-f/or/remove-force/to skip confirmation - Requires root host user for security
- Automatically handles ephemeral instance cleanup
- Shows instance details before confirmation
- Force deletion with
-
Login String Explanation: New
/explain/command decodes complex login strings- Example:
ssh /explain/root@myinstance.default@hostshows parsed components - Helps troubleshooting and onboarding
- Example:
- NixOS Compatibility: SSH authentication now checks
/etc/ssh/authorized_keys.d/<user>in addition to~/.ssh/authorized_keys - Non-Root Operation: Auto-detects process owner instead of hardcoding "root" as default host user for authentication
- Web UI Reliability: Fixed empty instance list display when no containers are running
- Image Selection: Web UI now supports selecting images from local or remote repositories
- OS Detection: Enhanced OS detection for better web UI display of instance information
- Config Viewer: Read-only CodeMirror modal for viewing multi-line configuration values
- Terminal Font: Bundled monospace nerd font for consistent terminal/editor rendering
- Web Dependencies: Updated to latest versions for improved security and features
- Modern Web Dashboard: New responsive web interface for managing Incus instances
- Web-Based Terminal: Browser-based terminal emulation for instance shells
- xterm.js integration with full terminal support
- Persistent terminal sessions using tmux/screen
- Multi-Step Creation Wizard: Comprehensive 4-step instance creation interface
- Step 1: Basic configuration (name, project, profile, image, resources)
- Step 2: Advanced settings (configuration, devices)
- Step 3: Cloud-init configuration with code editor
- Step 4: Summary and review before creation
- Profile-Based Configuration: Full profile integration in web UI
- Profile selection with cumulative merge strategy (overlays on current config)
- Applied profiles history tracking with badges
- Reset button to revert to defaults
- Device Management: Specialized editors for different device types
- Proxy device editor with protocol selection (TCP/UDP/Unix), NAT mode, and address configuration
- Disk device editor for mounting volumes and directories
- Generic device editor for other device types
- Cloud-Init Support:
- Code editor with YAML and shell script syntax highlighting
- Cloud-init support warning for non-cloud images
- Image Selection: Searchable image aliases and metadata
- For Default Profile: Apply completely to all form fields
- For Non-Default Profiles: Merge on top of current form state
- Step 1 fields override current values
- Step 2 config merges additively (profile overrides on key collision)
- Step 2 devices merge (same device name overwrites, respects type)
- Step 3 cloud-init overrides if provided
- New web interface available at
http://host:port(when enabled) - Instance creation now possible via web UI without SSH login syntax
- Profile selection in web UI uses cumulative merging (not replacement)
- Form state auto-saves to browser localStorage
- Enable web UI with
--web|-Wflag orweb: truein config.yaml - Configure web authentication with
--web-auth user1:password1,user2:password2 - Set web UI listen address with
--web-listen 0.0.0.0:8080orweb_listen: 0.0.0.0:8080in config.yaml - Instance creation profiles now support device configuration
- Cloud-init data can be preloaded from profiles in create-config.yaml
- YAML Configuration: New
config.yamlfile support for persistent server configuration- Configuration file loads from current directory,
$HOME/.config/ssh2incus/, or/etc/ssh2incus/(checked in order) - All configuration options available as YAML settings with same names as command-line flags
- All options commented out by default to use system defaults
- Command-line flags have higher priority than configuration file options
- Configuration file loads from current directory,
- Flexible Configuration Management: Simplified server configuration without modifying system service files
- Each YAML setting maps directly to corresponding command-line flag
- Easy to enable/disable features by uncommenting configuration options
- Better configuration organization and documentation
- Profile-Based Instance Creation: New
%profilesyntax allows applying predefined configuration profiles during instance creation- Use
%profile1+%profile2in login string (e.g.,ssh +instance+%web-server+%database@host) - Profiles are applied in order with later profiles overriding earlier ones
- Direct configuration options always override profile settings
- Use
- File Include Support: Configuration files now support external file includes
!include filename.extsyntax for loading file contents into configuration values<@filename.extalternative syntax for file includes- Smart path resolution: first tries relative to config file directory, then current working directory
- Advanced Configuration Templates: Enhanced
create-config.yamlwith profile support- New
profilessection for defining reusable configuration templates - Hierarchical configuration resolution: defaults → profiles → direct options
- Support for complex multi-profile scenarios
- New
- Configuration Override Hierarchy: Clear precedence order for configuration resolution
- Base defaults from
create-config.yaml - Applied profiles in specified order
- Direct SSH login string options (highest priority)
- Base defaults from
- Enhanced Login String Parsing: Improved parsing of complex instance creation syntax
- Support for multiple profiles:
+instance+%profile1+%profile2+options@host - Better error handling for malformed login strings
- Validation of profile existence before instance creation
- Support for multiple profiles:
- CHROOT Support: New
-cflag enables chrooting to the start directory for enhanced security isolation - Directory Control: Enhanced
-dflag for setting custom start directories in SFTP sessions - Security Improvements: Better privilege separation and directory access control
- Custom Banner Support: Server now looks for
banner.txtfile to display custom SSH login banners - Welcome Message: Optional
welcome.txtfile provides personalized welcome messages for users - Template Variables: Both banner and welcome files support template variables:
[INSTANCE_USER]: Current instance user[INSTANCE]: Instance name[PROJECT]: Project name[REMOTE]: Remote server name[HOSTNAME]: System hostname
- Example Files: Provided
banner.txt.exampleandwelcome.txt.exampletemplates in packaging
- Enhanced Parser: Completely refactored login string parsing with better modularity
- Comprehensive Testing: Extensive test coverage for all login string formats and edge cases
- Better Error Handling: Improved validation and error reporting for malformed login strings
- Backward Compatibility: Maintained full compatibility with existing login string formats
- Extended CreateConfig Structure: Enhanced configuration file format
- Added
profilesmap for named configuration templates - Improved validation and error reporting for configuration files
- Better handling of optional configuration sections
- Added
- Enhanced File Processing: Improved
LoadCreateConfigfunction- Added file include processing for both defaults and profile configurations
- Better error messages for missing include files or invalid paths
- Support for nested configuration scenarios
- Command-line Flags: Added support for standard OpenSSH SFTP server flags (-c, -d, -R, -e, -u, -l, -h)
- Security Model: Enhanced security with proper chroot and directory change operations
- Environment Integration: Better integration with UID/GID environment variables
- Modular Architecture: Split parsing logic into focused, testable functions
- Performance Improvements: Optimized parsing for complex login string formats
- Code Organization: Better separation of concerns for different login string components
- Intuitive Profile Usage: Simple syntax for applying complex configurations
- Example:
ssh +web01+%nginx+%ssl+ubuntu/24.04@hostapplies nginx and SSL profiles with Ubuntu 24.04
- Example:
- Flexible Configuration Management: Easy organization of instance templates
- Separate profile files can be included via file include directives
- Configuration inheritance allows for base profiles with specialized extensions
- Better Error Handling: Enhanced error messages for configuration issues
- Clear indication when profiles are missing or invalid
- Better path resolution error reporting for file includes
- Visual Feedback: Custom banners provide better visual identification of servers and instances
- Personalization: Welcome messages can be customized per deployment
- Security: SFTP chroot functionality provides better file access isolation
- Modular Configuration: Profile-based system enables better configuration organization
- Template Reusability: Profiles can be shared across different instance creation scenarios
- Configuration Validation: Enhanced validation ensures configuration consistency
# Create instance with web-server profile
ssh -p 2222 +web01+%web-server@host
# Create instance with multiple profiles (database settings override web-server)
ssh -p 2222 +app01+%web-server+%database@host
# Override profile settings with direct options
ssh -p 2222 +dev01+%development+m16+c8@hostversion: 1
defaults:
image: alpine/edge
memory: 1
cpu: 1
profiles:
web-server:
image: ubuntu/24.04
memory: 2
cpu: 2
config:
user.user-data: "!include web-server-init.yaml"
database:
memory: 4
cpu: 2
config:
user.user-data: "<@database-setup.sh"- File includes processed after YAML unmarshaling but before instance creation
- Profile merging follows last-wins precedence for conflicting settings
- Path resolution tries config directory first, then current working directory
- Enhanced error reporting with specific failure contexts
-c: Enable chroot to start directory-d DIR: Set start directory-R: Read-only mode-e: Debug to stderr-u UMASK: Set explicit umask-l LEVEL: Debug level (ignored for compatibility)-h: Show help
- Files are searched in standard configuration directories
- Template variable substitution occurs at runtime
- Graceful fallback when files are not present
- Dynamic Instance Creation: New syntax using
+and~prefixes allows creating Incus instances on-demand via SSH login - Persistent Instances: Use
+prefix (e.g.,ssh +test01@host) to create persistent instances that remain until manually deleted - Ephemeral Instances: Use
~prefix (e.g.,ssh ~test01@host) to create ephemeral instances that auto-delete on poweroff - Configuration Parsing: Smart login parser supports inline instance configuration:
- Image selection:
+test01+ubuntu/24.04@host - Resource allocation:
+test01+m4+c2+d20@host(4GB RAM, 2 CPUs, 20GB disk) - Advanced options:
+test01+nest+priv+vm@host(nested, privileged, VM)
- Image selection:
- Default Templates: Integration with
/etc/ssh2incus/create-config.yamlfor standardized instance creation defaults
- Password Authentication: Added
--password-auth(-P) flag to enable password-based SSH authentication - Multi-Factor Authentication: New
--auth-methodsflag allows configuring authentication method chains (e.g.,"publickey,password") - Advanced Password Hashing: Integrated
yescrypt-golibrary for secure password hashing and verification
- Persistent Sessions: Added
/prefix for persistent terminal sessions that survive SSH disconnections - Terminal Multiplexer Support: Added
--term-mux(-T) flag to choose betweentmux(default) andscreenfor persistent sessions - Built-in tmux Binary: Embedded static tmux binaries (arm64 and amd64) that are automatically deployed when tmux is not available in instances
- Automatic Package Installation: System can now automatically install terminal multiplexers (
tmuxorscreen) in instances when missing
- Cross-Platform Package Installation: New
InstallPackages()function with support for:- Debian-based systems (apt-get)
- RHEL-based systems (dnf/yum)
- Alpine Linux (apk)
- Automatic OS Detection: Smart detection of instance operating systems via
/usr/lib/os-releaseparsing - Package Manager Integration: Seamless integration with native package managers including proper environment handling
- Create Config Support: New
create-config.yamlfunctionality for standardized instance creation profiles - Configuration Templates: Support for instance configuration templates with memory, CPU, VM settings, devices, and config options
- Fallback Configuration Paths: Smart configuration loading with multiple fallback paths and relative/absolute path resolution
- Login Parser: Advanced login string parsing supporting complex instance creation syntax with multiple configuration options
- Go Runtime: Updated from Go 1.24.2 to Go 1.24.7
- Incus API: Updated Incus client from v6.11.0 to v6.16.0 for latest container management features
- Enhanced Argument Parsing: Improved command-line argument parsing with proper quoted string support and escape character handling
- Authentication Flow: Refactored authentication system to support method chaining and more flexible auth configurations
- Expanded Server Config: Enhanced server configuration structure with new options:
TermMux: Terminal multiplexer selectionPassAuth: Password authentication toggleAuthMethods: Authentication method chain configuration
- On-Demand Infrastructure: Create and connect to new instances in a single SSH command without pre-provisioning
- Smart Package Handling: Instances automatically get required terminal multiplexer packages installed without manual intervention
- Better Error Messages: Enhanced error reporting for authentication failures and configuration issues
- Flexible Authentication: Users can now combine multiple authentication methods for enhanced security
- Intuitive Syntax: Human-readable instance creation syntax (e.g.,
+test+ubuntu/24.04+m2+c2+d10+nest+priv)
- Optimized Dependencies: Cleaned up unused dependencies and optimized package imports
- Better Resource Management: Improved handling of binary deployments and package installations
- Enhanced Compatibility: Better compatibility with different Linux distributions and package managers
github.com/openwall/yescrypt-go v1.0.0- Advanced password hashing- Various container-related dependencies for enhanced Incus integration
github.com/lxc/incus/v6 v6.11.0→v6.16.0github.com/spf13/pflag v1.0.6→v1.0.10github.com/stretchr/testify v1.10.0→v1.11.1golang.org/x/crypto v0.36.0→v0.42.0golang.org/x/sys v0.32.0→v0.36.0
github.com/peterh/liner- No longer needed with new terminal handling
--password-auth/-P: Enable password authentication--auth-methods: Configure authentication method chains--term-mux/-T: Select terminal multiplexer (tmux/screen)
+instance-name: Create persistent instance with defaults~instance-name: Create ephemeral instance with defaults/instance-name: Connect with persistent terminal session+instance+image+options: Create instance with specific configuration- Example:
ssh +test01+ubuntu/24.04+m4+c2+d20+nest+priv+vm@host
- Images: Any valid Incus image (e.g.,
ubuntu/24.04,alpine/edge) - Resources:
mN(memory GB),cN(CPU cores),dN(disk GB) - Features:
nest(nesting),priv(privileged),vm(virtual machine) - Shortcuts:
n=nest,p=priv,v=vm,e=ephemeral
/etc/ssh2incus/create-config.yaml: Instance creation configuration template
- Built-in tmux binaries for both ARM64 and AMD64 architectures
- Cross-platform package management for major Linux distributions
Release with core SSH-to-Incus functionality, including:
- Basic SSH server with Incus integration
- Public key authentication
- File transfer support (SCP/SFTP)
- Port forwarding capabilities
- SSH agent forwarding
- Multi-remote support
- Process modes (master/daemon)
- Incus shell access