Termix 26.10.6
Overview
This guide covers launching and using Termix 26.10.6 on Ubuntu 24.04 from SecureAnyCloud on Amazon EC2. It is one version of the SecureAnyCloud Hardened WireGuard VPN & VPN, Proxy and Remote Access AMIs listing on AWS Marketplace. You select it as the software version when you launch.
Termix is a self-hosted, browser-based server management platform. You save the servers you manage as hosts. From one web interface, you can then open SSH terminals in tabs and split panes, browse and edit files over SFTP, run SSH port-forwarding tunnels, open RDP, VNC and Telnet remote desktops, manage Docker containers, and keep reusable command snippets. Termix 26.x ships these features as plugins, and this image carries the upstream standard plugin set.
What you get:
- No default login, no open sign-up. The image contains no Termix account and no database. On the first boot of your instance a one-time service creates the single administrator account,
admin, with a password generated on the instance. The service turns self-registration off, verifies both, and only then opens the web interface. Nobody can become the first administrator by reaching the page before you. - HTTPS on port 443, from the first boot. nginx serves Termix on port 443 with a certificate generated on your instance. Port 80 redirects to HTTPS, and a request for a host name the instance does not serve is dropped.
- Termix on localhost only. The Termix backend listens on
127.0.0.1:30001, behind nginx. Port 30001 is not open to the network, and the listing's security group does not include it. - Per-instance keys for your saved credentials. Termix's four keys (session signing, database encryption, credential encryption and its backend authentication token) are generated on your instance's first boot, kept in root-only files and passed to Termix by systemd. The database is stored encrypted, and every user's saved SSH passwords and private keys are encrypted with a key of their own.
- Hardened front door. nginx passes Termix the real client address and the configured host name (never values a client sends). It refuses any request that changes data or opens a WebSocket when the request carries another site's
Origin. - Instance metadata blocked. Termix connects out to the hosts you add (SSH, SFTP, RDP, VNC, Telnet, tunnels, status checks). Neither Termix nor nginx can reach the EC2 instance metadata service (169.254.169.254 and fd00:ec2::254), so a host entry that points at it cannot read this instance's role credentials.
- The current Termix release. Termix 26.10.6 is outside every published Termix security advisory at the time of the build. It is built from the unmodified upstream source, with six npm dependencies raised to their fixed releases.
- No phone-home plugin. Upstream's Usage Statistics (telemetry) plugin is not installed, and only signed plugins can be added later.
- Fully patched. Ubuntu 24.04 LTS is fully patched at build time, with unattended security upgrades turned on.
What is on the image: Termix 26.10.6 with 19 plugins (built from the v26.10.6 source), Node.js 24.22.2 LTS (for Termix only, not on the shell path), nginx 1.24 (from Ubuntu 24.04), cloud-init and the AWS Systems Manager agent.
Default user: ubuntu. Architecture: x86_64. Root volume: 8 GiB gp3.
Security posture
The image applies the following security measures:
- Per-instance secrets only. The administrator password, Termix's session signing secret, database key, credential encryption key, backend authentication token and the TLS key are all generated on your instance's first boot. Two instances launched from the same AMI share none of them.
- Fails closed. Termix and nginx start only after first boot has written this instance's configuration and a ready marker. A start-up check refuses to start Termix if a key is missing or too short, if a plaintext database appears, or if the data directory contains a key or a symbolic link.
- End-entity certificate. The self-signed certificate can vouch only for this instance's own names (it is not a certificate authority). Compare its fingerprint with the one in the credentials file, or replace the certificate with a CA-issued one (Step 8).
- Sandboxed service. Termix runs as its own
termixaccount with no capabilities, a read-only view of the system and write access to/var/lib/termixonly. - Per-instance identity. SSH host keys and the machine ID are generated fresh on every instance.
Prerequisites
Before you launch, make sure you have the following:
- An AWS account and permission to launch EC2 instances
- An EC2 key pair in the Region you launch in
- A security group that allows TCP 22 (SSH) from your admin network and TCP 443 (the Termix web interface) from the networks your users browse from, plus TCP 80 if you want plain-HTTP visitors redirected. Never open 30001, because the Termix backend listens on localhost only.
Recommended instance type: m5.large. Termix itself is light, but open terminals, file transfers and remote-desktop sessions add memory and CPU load. Choose a larger size for many concurrent users.
Connecting to your instance
Termix 26.10.6 on Ubuntu 24.04 runs Ubuntu 24.04 LTS. Connect over SSH as the default user, ubuntu.
Launch the instance
Option A: AWS Marketplace console
- Open the SecureAnyCloud Hardened WireGuard VPN & VPN, Proxy and Remote Access AMIs listing on AWS Marketplace. Choose View purchase options, then Subscribe. One subscription covers every version in the listing.
- Once the subscription is active, choose Launch your software.
- Choose One-click launch from AWS Marketplace (or Launch from EC2 Console for the full launch wizard). In Version, choose Termix 26.10.6 on Ubuntu 24.04, then choose your Region.
- Pick an instance type (
m5.largeis recommended) and your key pair. - Configure the security group. The listing's default group allows SSH (22), HTTP (80) and HTTPS (443). Restrict SSH, and preferably 443, to your own addresses.
- Choose your VPC and a subnet with a route to the servers you will manage, and with a public IP if you browse to Termix over the internet. Leave the metadata defaults, because the image already requires IMDSv2. Then choose Launch.
Option B: AWS CLI
Run these commands on your own workstation. They create a security group that allows SSH and HTTPS from your management address, then launch the instance. Replace the AMI ID with the one shown for your Region on the Marketplace launch page. Replace the VPC, subnet, key pair and CIDR range with your own.
SG=$(aws ec2 create-security-group --group-name termix \
--description "Termix" --vpc-id vpc-0123456789abcdef0 \
--query GroupId --output text)
aws ec2 authorize-security-group-ingress --group-id "$SG" --protocol tcp --port 22 --cidr <your-mgmt-cidr>
aws ec2 authorize-security-group-ingress --group-id "$SG" --protocol tcp --port 443 --cidr <your-mgmt-cidr>
aws ec2 run-instances \
--image-id ami-0123456789abcdef0 \
--instance-type m5.large \
--key-name my-key-pair \
--security-group-ids "$SG" \
--subnet-id subnet-0123456789abcdef0 \
--associate-public-ip-address \
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=termix}]'You do not need --metadata-options, because the AMI already requires IMDSv2. First boot takes about a minute after the instance is running.
Connect and check the services
Connect as ubuntu with the key pair you chose:
ssh -i ~/.ssh/my-key-pair.pem ubuntu@<public-ip>systemctl is-active termix nginx
sudo test -f /var/lib/sac/data/termix-firstboot.done && echo FIRSTBOOT_DONEactive active FIRSTBOOT_DONEtermix-firstboot ran once on the first boot. termix is the Termix backend, and nginx serves the web interface. Only SSH and nginx listen on network ports. Termix listens on the loopback address:
sudo ss -lntp | awk 'NR>1 {print $4}' | grep -v '127.0.0.5' | sort -u0.0.0.0:22 0.0.0.0:443 0.0.0.0:80 127.0.0.1:30001 [::]:22 [::]:443 [::]:80Get your URL and admin password
The URL and the administrator password are in a root-only file. Read it:
sudo cat /root/termix-credentials.txt# Termix 26.10.6 - generated on first boot by termix-firstboot.service.
# Every value below is unique to this instance; nothing was baked into the image. Keep this file private.
# Web interface (HTTPS, self-signed certificate unique to this instance): sign in as admin with the password below,
# then change it (User profile -> Security). Self-registration is OFF; add users under Settings -> Users. TERMIX_URL=https://203.0.113.10/ TERMIX_ADMIN_USERNAME=admin TERMIX_ADMIN_PASSWORD=<your-password> TERMIX_HOST=203.0.113.10
# The certificate served on 443 (/etc/nginx/sac/tls/termix.crt), to compare with your browser's warning: TLS_CERT_SHA256=15:83:3A:...:4C # Self-test:
sudo termix-selftest Serve Termix under your own DNS name:
sudo termix-set-host <dns-name>
# Guide: https://secureanycloud.com/stacks/termix-26-10-6/The URL uses the instance's public IPv4 address (its private address when it has no public one). Termix also answers on the instance's public DNS name.
Sign in
Open TERMIX_URL in your browser. The certificate is self-signed, so the browser warns you once. Compare the fingerprint that the browser shows with TLS_CERT_SHA256 from the credentials file, then continue. Sign in as admin with TERMIX_ADMIN_PASSWORD.
On your first sign-in, Termix walks you through a four-step Set up your workspace wizard. The steps cover which plugins to keep on, the layout, the text size and language, and optionally a passkey or security key for two-factor sign-in. The recommended plugin set is pre-selected. Plugins that you turn off stay installed, and you can turn them on later from the plugin manager. You can change every wizard setting later.
Then change the password. Open User Profile (the avatar at the bottom left, or User Profile under Quick Actions on the dashboard). Consider adding two-factor authentication (TOTP or a passkey) there too.
Add a host and open a terminal
- In the Hosts panel choose + Add Host.
- Enter a name, the server's address and SSH port, the user name, and either a password or a private key. Termix encrypts what you save with your own data key, which unlocks only while you are signed in.
- Save, then choose the terminal icon (
>_) on the host's card. On the first connection, Termix shows the server's SSH host key fingerprint. Compare it with the server's own fingerprint (runssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pubon that server) before you choose Accept & Continue. The file manager (SFTP) and host metrics are the other icons on the card and at the foot of the terminal.
Termix connects from this instance, so the servers you add must be reachable from its subnet and security group. Remote desktop (RDP, VNC and Telnet) uses Termix's built-in engine, so you need no separate guacd service.
Users and sign-up
Self-registration is off on this image in two places: the Allow registration setting is off, and the systemd drop-in /etc/systemd/system/termix.service.d/60-sac-registration.conf pins it off (ALLOW_REGISTRATION=false). Add users yourself under Admin Settings (Quick Actions on the dashboard), which manages users and roles. To check the setting, run this from the instance:
H=$(sudo sed -n 's/^TERMIX_HOST=//p' /root/termix-credentials.txt)
sudo curl -s --cacert /etc/nginx/sac/tls/termix.crt --resolve "$H:443:127.0.0.1" "https://$H/users/registration-allowed"; echo{"allowed":false}If you want open sign-up, remove the drop-in (sudo rm it, then run sudo systemctl daemon-reload and sudo systemctl restart termix) and turn the setting on in Termix. Anyone who can reach port 443 can then create an account, so restrict the security group first.
Tunnels and the security group
The Tunnels plugin runs SSH port forwards from this instance. A forward listens on 127.0.0.1 unless you choose another bind address. A forward bound to another address is reachable only after you open its port in the instance's security group. The default group opens 22, 80 and 443 only.
Your own DNS name and certificate
Point a DNS A record at the instance, then run the helper with your name:
sudo termix-set-host termix.example.comThis issues a new self-signed certificate for that name, updates nginx and the credentials file, and prints the new fingerprint. sudo termix-set-host with no name returns to the instance's own address.
To use a CA-issued certificate instead, put the certificate chain and key in /etc/nginx/sac/tls/termix.crt and /etc/nginx/sac/tls/termix.key (key mode 0600, owned by root), then run sudo nginx -t && sudo systemctl reload nginx. Do not add the self-signed certificate to your computer's trust store. Compare its fingerprint, or replace it.
Security checks
Run the built-in self-test:
sudo termix-selftestTermix 203.0.113.10: termix + nginx up, backend 127.0.0.1:30001 only, HTTPS OK, anonymous API refused, registration closed, IMDS denied SELFTEST_OKConfirm that the server refuses an anonymous API request and that the backend port is not reachable from the network:
H=$(sudo sed -n 's/^TERMIX_HOST=//p' /root/termix-credentials.txt)
sudo curl -s -o /dev/null -w '%{http_code}\n' --cacert /etc/nginx/sac/tls/termix.crt --resolve "$H:443:127.0.0.1" "https://$H/host/db/host"
P=$(hostname -I | awk '{print $1}') timeout 5 bash -c "exec 3<>/dev/tcp/$P/30001" 2>/dev/null && echo "30001 OPEN" || echo "30001 refused"401 30001 refusedConfirm that Termix and nginx are denied access to the instance metadata service:
systemctl show -p IPAddressDeny termix nginxIPAddressDeny=fd00:ec2::254/128 168.63.129.16/32 169.254.169.254/32 IPAddressDeny=fd00:ec2::254/128 168.63.129.16/32 169.254.169.254/32Confirm that Termix's keys are root-only files and that its database is stored encrypted:
sudo ls -l /etc/termix/secrets | awk 'NR>1 {print $1, $3, $9}'
sudo ls /var/lib/termix-rw------- root database_key -rw------- root encryption_key -rw------- root internal_auth_token -rw------- root jwt_secret backups db.sqlite.encrypted uploadsPasswords and access
- Lost the admin password: on the sign-in page, choose Forgot Password?. Termix writes a reset code to its log on the instance. Read the code over SSH with
sudo journalctl -u termix | grep -i reset. - SSH to the instance is key-only: password and keyboard-interactive logins and root logins are disabled in
/etc/ssh/sshd_config.d/00-sac.conf. - Limit port 443 to the networks your users work from, because a Termix account opens shells on every server it holds.
Versions, provenance and file locations
Read the build information and the plugin list:
cat /usr/share/doc/termix/BUILD-INFO.txt | head -4 head -2 /usr/share/doc/termix/PLUGINS.txtThe main files and directories are:
- /opt/termix: Termix 26.10.6 (backend, plugins, web interface) and its Node.js runtime, read-only to the service.
- /var/lib/termix: Termix's data, which includes the encrypted database, uploads and its own upgrade backups.
- /etc/termix/secrets: this instance's four Termix keys (root only).
- /etc/nginx/conf.d/sac-termix.conf and /etc/nginx/sac/: the nginx server blocks, the route map and this instance's certificate.
- /usr/share/doc/termix/: the Apache-2.0 license, build information, the plugin list and the npm audit record.
- /root/termix-credentials.txt: the first-boot URL, administrator password and certificate fingerprint.
Backup and maintenance
Back up /var/lib/termix and /etc/termix/secrets together, with Termix stopped (sudo systemctl stop termix). The database cannot be read without this instance's database_key, and saved credentials need encryption_key. Keep the backup as private as the keys themselves. As an alternative for moving hosts to another instance, use Termix's own data export and import (the Import and Export plugin, off by default).
Ubuntu security updates install automatically. To update Termix itself, move to a newer SecureAnyCloud version of this listing.
Security recommendations
- Restrict ports 22 and 443 in the security group to your own networks.
- Change the administrator password on first sign-in and turn on two-factor authentication.
- Give each person their own Termix account, and do not share the administrator account.
- Install only the signed plugins you need (the image enforces signing).
- Replace the self-signed certificate with a CA-issued one for wider use.
Support and licensing
Termix is open-source software under the Apache License 2.0 (/usr/share/doc/termix/LICENSE), and its plugins are Apache-2.0 too. SecureAnyCloud provides the hardened image and support for its configuration at sales@secureanycloud.com. Termix is a project of its own authors. SecureAnyCloud is not affiliated with or endorsed by them.
Deploy on AWS
Launch Termix 26.10.6 on Ubuntu 24.04 on AWS with 24/7 support from SecureAnyCloud.
View on Marketplace
Need Help?
Our support team is available 24/7.
sales@secureanycloud.com