Skip to content

Commit e9e30cd

Browse files
LukeGusstarhoundkientt137ssongjunu송준우
authored
v2.0.0 (#621)
* Guacd, Docker-Compose, RDP (#475) * fix select edit host but not update view (#438) * fix: Checksum issue with chocolatey * fix: Remove homebrew old stuff * Add Korean translation (#439) Co-authored-by: 송준우 <2484@coreit.co.kr> * feat: Automate flatpak * fix: Add imagemagik to electron builder to resolve build error * fix: Build error with runtime repo flag * fix: Flatpak runtime error and install freedesktop ver warning * fix: Flatpak runtime error and install freedesktop ver warning * feat: Re-add homebrew cask and move scripts to backend * fix: No sandbox flag issue * fix: Change name for electron macos cask output * fix: Sandbox error with Linux * fix: Remove comming soon for app stores in readme * Adding Comment at the end of the public_key on the host on deploy (#440) * Add termix.rb Cask file * Update Termix to version 1.9.0 with new checksum * Update README to remove 'coming soon' notes * -Add New Interface for Credential DB -Add Credential Name as a comment into the server authorized_key file --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * Sudo auto fill password (#441) * Add termix.rb Cask file * Update Termix to version 1.9.0 with new checksum * Update README to remove 'coming soon' notes * Feature Sudo password auto-fill; * Fix locale json shema; --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * Added Italian Language; (#445) * Add termix.rb Cask file * Update Termix to version 1.9.0 with new checksum * Update README to remove 'coming soon' notes * Added Italian Language; --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * Auto collapse snippet folders (#448) * Add termix.rb Cask file * Update Termix to version 1.9.0 with new checksum * Update README to remove 'coming soon' notes * feat: Add collapsable snippets (customizable in user profile) * Translations (#447) * Add termix.rb Cask file * Update Termix to version 1.9.0 with new checksum * Update README to remove 'coming soon' notes * Added Italian Language; * Fix translations; Removed duplicate keys, synchronised other languages using English as the source, translated added keys, fixed inaccurate translations. --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * Remove PTY-level keepalive (#449) * Add termix.rb Cask file * Update Termix to version 1.9.0 with new checksum * Update README to remove 'coming soon' notes * Remove PTY-level keepalive to prevent unwanted terminal output; use SSH-level keepalive instead --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * feat: add Guacamole support for RDP, VNC, and Telnet connections - Implemented WebSocket support for Guacamole in Nginx configuration. - Added REST API endpoints for generating connection tokens and checking guacd status. - Created Guacamole server using guacamole-lite for handling connections. - Developed frontend components for testing RDP/VNC connections and displaying the remote session. - Updated package dependencies to include guacamole-common-js and guacamole-lite. - Enhanced logging for Guacamole operations. * feat: enhance Guacamole support with RDP and VNC connection settings and UI updates * feat: Seperate server stats and tunnel management (improved both UI's) then started initial docker implementation * fix: finalize adding docker to db * fix: merge syntax errors * feat: implement mouse coordinate adjustment based on scale factor in GuacamoleDisplay * feat: add TypeScript definitions for guacamole-common-js module * feat: enhance Mouse.State constructor to accept optional parameters and object destructuring * feat: Add support for RDP and VNC connections in SSH host management - Introduced connectionType field to differentiate between SSH, RDP, VNC, and Telnet in host data structures. - Updated backend routes to handle RDP/VNC specific fields: domain, security, and ignoreCert. - Enhanced the HostManagerEditor to include RDP/VNC specific settings and authentication options. - Implemented token retrieval for RDP/VNC connections using Guacamole API. - Updated UI components to reflect connection type changes and provide appropriate connection buttons. - Removed the GuacamoleTestDialog component as its functionality is integrated into the HostManagerEditor. - Adjusted the TopNavbar and Host components to accommodate new connection types and their respective actions. * feat: Enhance Guacamole integration with extended configuration options - Added detailed Guacamole configuration interface for RDP/VNC/Telnet connections, including display, audio, performance, and session settings. - Implemented logging for token requests and received options for better debugging. - Updated HostManagerEditor to support new Guacamole configuration fields with validation and default values. - Integrated Guacamole configuration parsing in HostManagerViewer and Host components. - Enhanced API requests to include extended Guacamole configuration parameters in the token request. - Refactored code to convert camelCase configuration keys to kebab-case for compatibility with Guacamole API. * feat: merge guacd into 2.0.0 and improve UI for host manager and made general bug fixes --------- Co-authored-by: Tran Trung Kien <kientt13.7@gmail.com> Co-authored-by: LukeGus <bugattiguy527@gmail.com> Co-authored-by: junu <bigdwarf_@naver.com> Co-authored-by: 송준우 <2484@coreit.co.kr> Co-authored-by: SlimGary <trash.slim@gmail.com> Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Nunzio Marfè <nunzio.marfe@protonmail.com> Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com> * feat: rename api routes and files * feat: improve guacd ui/backend * feat: improve guacd ui/backend * fix: state persistance issues causing refresh * feat: improge guacd connections, fixed telnet not opening, and improved general guacd integration * feat: continue improving integration also with bug fixes * Merge 2.0.0 with 2.0.0 that includes bug fixes (#620) * Guacd, Docker-Compose, RDP (#475) * fix select edit host but not update view (#438) * fix: Checksum issue with chocolatey * fix: Remove homebrew old stuff * Add Korean translation (#439) Co-authored-by: 송준우 <2484@coreit.co.kr> * feat: Automate flatpak * fix: Add imagemagik to electron builder to resolve build error * fix: Build error with runtime repo flag * fix: Flatpak runtime error and install freedesktop ver warning * fix: Flatpak runtime error and install freedesktop ver warning * feat: Re-add homebrew cask and move scripts to backend * fix: No sandbox flag issue * fix: Change name for electron macos cask output * fix: Sandbox error with Linux * fix: Remove comming soon for app stores in readme * Adding Comment at the end of the public_key on the host on deploy (#440) * Add termix.rb Cask file * Update Termix to version 1.9.0 with new checksum * Update README to remove 'coming soon' notes * -Add New Interface for Credential DB -Add Credential Name as a comment into the server authorized_key file --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * Sudo auto fill password (#441) * Add termix.rb Cask file * Update Termix to version 1.9.0 with new checksum * Update README to remove 'coming soon' notes * Feature Sudo password auto-fill; * Fix locale json shema; --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * Added Italian Language; (#445) * Add termix.rb Cask file * Update Termix to version 1.9.0 with new checksum * Update README to remove 'coming soon' notes * Added Italian Language; --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * Auto collapse snippet folders (#448) * Add termix.rb Cask file * Update Termix to version 1.9.0 with new checksum * Update README to remove 'coming soon' notes * feat: Add collapsable snippets (customizable in user profile) * Translations (#447) * Add termix.rb Cask file * Update Termix to version 1.9.0 with new checksum * Update README to remove 'coming soon' notes * Added Italian Language; * Fix translations; Removed duplicate keys, synchronised other languages using English as the source, translated added keys, fixed inaccurate translations. --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * Remove PTY-level keepalive (#449) * Add termix.rb Cask file * Update Termix to version 1.9.0 with new checksum * Update README to remove 'coming soon' notes * Remove PTY-level keepalive to prevent unwanted terminal output; use SSH-level keepalive instead --------- Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> * feat: add Guacamole support for RDP, VNC, and Telnet connections - Implemented WebSocket support for Guacamole in Nginx configuration. - Added REST API endpoints for generating connection tokens and checking guacd status. - Created Guacamole server using guacamole-lite for handling connections. - Developed frontend components for testing RDP/VNC connections and displaying the remote session. - Updated package dependencies to include guacamole-common-js and guacamole-lite. - Enhanced logging for Guacamole operations. * feat: enhance Guacamole support with RDP and VNC connection settings and UI updates * feat: Seperate server stats and tunnel management (improved both UI's) then started initial docker implementation * fix: finalize adding docker to db * fix: merge syntax errors * feat: implement mouse coordinate adjustment based on scale factor in GuacamoleDisplay * feat: add TypeScript definitions for guacamole-common-js module * feat: enhance Mouse.State constructor to accept optional parameters and object destructuring * feat: Add support for RDP and VNC connections in SSH host management - Introduced connectionType field to differentiate between SSH, RDP, VNC, and Telnet in host data structures. - Updated backend routes to handle RDP/VNC specific fields: domain, security, and ignoreCert. - Enhanced the HostManagerEditor to include RDP/VNC specific settings and authentication options. - Implemented token retrieval for RDP/VNC connections using Guacamole API. - Updated UI components to reflect connection type changes and provide appropriate connection buttons. - Removed the GuacamoleTestDialog component as its functionality is integrated into the HostManagerEditor. - Adjusted the TopNavbar and Host components to accommodate new connection types and their respective actions. * feat: Enhance Guacamole integration with extended configuration options - Added detailed Guacamole configuration interface for RDP/VNC/Telnet connections, including display, audio, performance, and session settings. - Implemented logging for token requests and received options for better debugging. - Updated HostManagerEditor to support new Guacamole configuration fields with validation and default values. - Integrated Guacamole configuration parsing in HostManagerViewer and Host components. - Enhanced API requests to include extended Guacamole configuration parameters in the token request. - Refactored code to convert camelCase configuration keys to kebab-case for compatibility with Guacamole API. * feat: merge guacd into 2.0.0 and improve UI for host manager and made general bug fixes --------- Co-authored-by: Tran Trung Kien <kientt13.7@gmail.com> Co-authored-by: LukeGus <bugattiguy527@gmail.com> Co-authored-by: junu <bigdwarf_@naver.com> Co-authored-by: 송준우 <2484@coreit.co.kr> Co-authored-by: SlimGary <trash.slim@gmail.com> Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com> Co-authored-by: Nunzio Marfè <nunzio.marfe@protonmail.com> Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com> * feat: rename api routes and files * feat: improve guacd ui/backend * feat: improve guacd ui/backend * fix: state persistance issues causing refresh * feat: improge guacd connections, fixed telnet not opening, and improved general guacd integration * feat: continue improving integration also with bug fixes --------- Co-authored-by: Wesley Reid <starhound@lostsouls.org> Co-authored-by: Tran Trung Kien <kientt13.7@gmail.com> Co-authored-by: junu <bigdwarf_@naver.com> Co-authored-by: 송준우 <2484@coreit.co.kr> Co-authored-by: SlimGary <trash.slim@gmail.com> Co-authored-by: Nunzio Marfè <nunzio.marfe@protonmail.com> Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com> * feat: allow customizing guacd backened url * fix: ssh route mistmatching and guacamole url not changing * chore: increment ver * feat: change default to work with default compose, added splits creen support, updated readmes * fix: linux app not starting due to better sqlite isuses, improved copy/paste system so no context menu, added oidc remember me toggle, improved OS detection for sessions, flatpak invalid key, and sharing hosts with other users errors * fix: global settings not setting * chore: update compose * feat: improve the global status input * chore: cleanup files * chore: update export/improt with new host fields * fix: file manager and docker not loading properly --------- Co-authored-by: Wesley Reid <starhound@lostsouls.org> Co-authored-by: Tran Trung Kien <kientt13.7@gmail.com> Co-authored-by: junu <bigdwarf_@naver.com> Co-authored-by: 송준우 <2484@coreit.co.kr> Co-authored-by: SlimGary <trash.slim@gmail.com> Co-authored-by: Nunzio Marfè <nunzio.marfe@protonmail.com> Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
1 parent a255a08 commit e9e30cd

85 files changed

Lines changed: 6999 additions & 2232 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

README.md

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,13 @@ If you would like, you can support the project here!\
4646

4747
Termix is an open-source, forever-free, self-hosted all-in-one server management platform. It provides a multi-platform
4848
solution for managing your servers and infrastructure through a single, intuitive interface. Termix offers SSH terminal
49-
access, SSH tunneling capabilities, remote file management, and many other tools. Termix is the perfect
49+
access, remote desktop control (RDP, VNC, Telnet), SSH tunneling capabilities, remote SSH file management, and many other tools. Termix is the perfect
5050
free and self-hosted alternative to Termius available for all platforms.
5151

5252
# Features
5353

5454
- **SSH Terminal Access** - Full-featured terminal with split-screen support (up to 4 panels) with a browser-like tab system. Includes support for customizing the terminal including common terminal themes, fonts, and other components.
55+
- **Remote Desktop Access** - RDP, VNC, and Telnet support over the browser with complete customization and split screening
5556
- **SSH Tunnel Management** - Create and manage SSH tunnels with automatic reconnection and health monitoring and support for -l or -r connections
5657
- **Remote File Manager** - Manage files directly on remote servers with support for viewing and editing code, images, audio, and video. Upload, download, rename, delete, and move files seamlessly with sudo support.
5758
- **Docker Management** - Start, stop, pause, remove containers. View container stats. Control container using docker exec terminal. It was not made to replace Portainer or Dockge but rather to simply manage your containers compared to creating them.
@@ -105,7 +106,7 @@ Supported Devices:
105106
- APK
106107

107108
Visit the Termix [Docs](https://docs.termix.site/install) for more information on how to install Termix on all platforms. Otherwise, view
108-
a sample Docker Compose file here:
109+
a sample Docker Compose file here (you can omit guacd and the network if you don't plan on using remote desktop features):
109110

110111
```yaml
111112
services:
@@ -119,10 +120,27 @@ services:
119120
- termix-data:/app/data
120121
environment:
121122
PORT: "8080"
123+
depends_on:
124+
- guacd
125+
networks:
126+
- termix-net
127+
128+
guacd:
129+
image: guacamole/guacd:latest
130+
container_name: guacd
131+
restart: unless-stopped
132+
ports:
133+
- "4822:4822"
134+
networks:
135+
- termix-net
122136

123137
volumes:
124138
termix-data:
125139
driver: local
140+
141+
networks:
142+
termix-net:
143+
driver: bridge
126144
```
127145
128146
# Sponsors
@@ -153,7 +171,7 @@ channel, however, response times may be longer.
153171

154172
# Screenshots
155173

156-
[![YouTube](./repo-images/YouTube.jpg)](https://youtu.be/sjKIqfCK0NY)
174+
[![YouTube](./repo-images/YouTube.jpg)](https://www.youtube.com/@TermixSSH/videos)
157175

158176
<p align="center">
159177
<img src="./repo-images/Image 1.png" width="400" alt="Termix Demo 1"/>

docker/docker-compose.yml

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
services:
2+
termix:
3+
image: ghcr.io/lukegus/termix:latest
4+
container_name: termix
5+
restart: unless-stopped
6+
ports:
7+
- "8080:8080"
8+
volumes:
9+
- termix-data:/app/data
10+
environment:
11+
PORT: "8080"
12+
depends_on:
13+
- guacd
14+
networks:
15+
- termix-net
16+
17+
guacd:
18+
image: guacamole/guacd:latest
19+
container_name: guacd
20+
restart: unless-stopped
21+
ports:
22+
- "4822:4822"
23+
networks:
24+
- termix-net
25+
26+
volumes:
27+
termix-data:
28+
driver: local
29+
30+
networks:
31+
termix-net:
32+
driver: bridge

docker/nginx-https.conf

Lines changed: 79 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ http {
218218
proxy_set_header X-Forwarded-Proto $scheme;
219219
}
220220

221-
location /ssh/quick-connect {
221+
location /host/quick-connect {
222222
proxy_pass http://127.0.0.1:30001;
223223
proxy_http_version 1.1;
224224
proxy_set_header Upgrade $http_upgrade;
@@ -230,8 +230,8 @@ http {
230230
proxy_set_header X-Forwarded-Proto $scheme;
231231
}
232232

233-
location ~ ^/ssh/opkssh-chooser(/.*)?$ {
234-
proxy_pass http://127.0.0.1:30001/ssh/opkssh-chooser$1$is_args$args;
233+
location ~ ^/host/opkssh-chooser(/.*)?$ {
234+
proxy_pass http://127.0.0.1:30001/host/opkssh-chooser$1$is_args$args;
235235
proxy_http_version 1.1;
236236
proxy_set_header Host $http_host;
237237
proxy_set_header X-Forwarded-Host $proxy_x_forwarded_host;
@@ -245,8 +245,8 @@ http {
245245
add_header Cache-Control "no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0";
246246
}
247247

248-
location ~ ^/ssh/opkssh-callback(/.*)?$ {
249-
proxy_pass http://127.0.0.1:30001/ssh/opkssh-callback$1$is_args$args;
248+
location ~ ^/host/opkssh-callback(/.*)?$ {
249+
proxy_pass http://127.0.0.1:30001/host/opkssh-callback$1$is_args$args;
250250
proxy_http_version 1.1;
251251
proxy_set_header Host $http_host;
252252
proxy_set_header X-Forwarded-Host $proxy_x_forwarded_host;
@@ -260,7 +260,7 @@ http {
260260
add_header Cache-Control "no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0";
261261
}
262262

263-
location /ssh/ {
263+
location /host/ {
264264
proxy_pass http://127.0.0.1:30001;
265265
proxy_http_version 1.1;
266266
proxy_set_header Host $http_host;
@@ -294,7 +294,41 @@ http {
294294
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
295295
}
296296

297-
location /ssh/tunnel/ {
297+
location ^~ /guacamole/websocket/ {
298+
proxy_pass http://127.0.0.1:30008/;
299+
proxy_http_version 1.1;
300+
301+
proxy_set_header Upgrade $http_upgrade;
302+
proxy_set_header Connection "upgrade";
303+
proxy_set_header Host $http_host;
304+
proxy_cache_bypass $http_upgrade;
305+
306+
proxy_set_header X-Real-IP $remote_addr;
307+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
308+
proxy_set_header X-Forwarded-Proto $scheme;
309+
proxy_set_header X-Forwarded-Port $server_port;
310+
proxy_set_header X-Forwarded-Host $http_host;
311+
312+
proxy_read_timeout 86400s;
313+
proxy_send_timeout 86400s;
314+
proxy_connect_timeout 10s;
315+
316+
proxy_buffering off;
317+
proxy_request_buffering off;
318+
319+
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
320+
}
321+
322+
location ~ ^/guacamole(/.*)?$ {
323+
proxy_pass http://127.0.0.1:30001;
324+
proxy_http_version 1.1;
325+
proxy_set_header Host $host;
326+
proxy_set_header X-Real-IP $remote_addr;
327+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
328+
proxy_set_header X-Forwarded-Proto $scheme;
329+
}
330+
331+
location /host/tunnel/ {
298332
proxy_pass http://127.0.0.1:30003;
299333
proxy_http_version 1.1;
300334
proxy_set_header Host $http_host;
@@ -303,7 +337,7 @@ http {
303337
proxy_set_header X-Forwarded-Proto $scheme;
304338
}
305339

306-
location /ssh/file_manager/recent {
340+
location /host/file_manager/recent {
307341
proxy_pass http://127.0.0.1:30001;
308342
proxy_http_version 1.1;
309343
proxy_set_header Host $http_host;
@@ -312,7 +346,7 @@ http {
312346
proxy_set_header X-Forwarded-Proto $scheme;
313347
}
314348

315-
location /ssh/file_manager/pinned {
349+
location /host/file_manager/pinned {
316350
proxy_pass http://127.0.0.1:30001;
317351
proxy_http_version 1.1;
318352
proxy_set_header Host $http_host;
@@ -321,7 +355,7 @@ http {
321355
proxy_set_header X-Forwarded-Proto $scheme;
322356
}
323357

324-
location /ssh/file_manager/shortcuts {
358+
location /host/file_manager/shortcuts {
325359
proxy_pass http://127.0.0.1:30001;
326360
proxy_http_version 1.1;
327361
proxy_set_header Host $http_host;
@@ -330,7 +364,7 @@ http {
330364
proxy_set_header X-Forwarded-Proto $scheme;
331365
}
332366

333-
location /ssh/file_manager/sudo-password {
367+
location /host/file_manager/sudo-password {
334368
proxy_pass http://127.0.0.1:30004;
335369
proxy_http_version 1.1;
336370
proxy_set_header Host $http_host;
@@ -339,7 +373,28 @@ http {
339373
proxy_set_header X-Forwarded-Proto $scheme;
340374
}
341375

342-
location /ssh/file_manager/ssh/ {
376+
location /ssh/file_manager/ {
377+
client_max_body_size 5G;
378+
client_body_timeout 300s;
379+
380+
add_header Cache-Control "no-store, no-cache, must-revalidate" always;
381+
382+
proxy_pass http://127.0.0.1:30004;
383+
proxy_http_version 1.1;
384+
proxy_set_header Host $http_host;
385+
proxy_set_header X-Real-IP $remote_addr;
386+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
387+
proxy_set_header X-Forwarded-Proto $scheme;
388+
389+
proxy_connect_timeout 60s;
390+
proxy_send_timeout 300s;
391+
proxy_read_timeout 300s;
392+
393+
proxy_request_buffering off;
394+
proxy_buffering off;
395+
}
396+
397+
location /host/file_manager/ssh/ {
343398
client_max_body_size 5G;
344399
client_body_timeout 300s;
345400

@@ -400,6 +455,15 @@ http {
400455
proxy_read_timeout 60s;
401456
}
402457

458+
location ~ ^/global-settings(/.*)?$ {
459+
proxy_pass http://127.0.0.1:30005;
460+
proxy_http_version 1.1;
461+
proxy_set_header Host $http_host;
462+
proxy_set_header X-Real-IP $remote_addr;
463+
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
464+
proxy_set_header X-Forwarded-Proto $scheme;
465+
}
466+
403467
location ~ ^/uptime(/.*)?$ {
404468
proxy_pass http://127.0.0.1:30006;
405469
proxy_http_version 1.1;
@@ -428,7 +492,7 @@ http {
428492
}
429493

430494
location ^~ /docker/console/ {
431-
proxy_pass http://127.0.0.1:30008/;
495+
proxy_pass http://127.0.0.1:30009/;
432496
proxy_http_version 1.1;
433497

434498
proxy_set_header Upgrade $http_upgrade;
@@ -439,6 +503,8 @@ http {
439503
proxy_set_header X-Real-IP $remote_addr;
440504
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
441505
proxy_set_header X-Forwarded-Proto $scheme;
506+
proxy_set_header X-Forwarded-Port $server_port;
507+
proxy_set_header X-Forwarded-Host $http_host;
442508

443509
proxy_read_timeout 86400s;
444510
proxy_send_timeout 86400s;

0 commit comments

Comments
 (0)