feat: convert ssh tunnels into a plugin

This commit is contained in:
LukeGus committed 2026-09-23 17:27:28 -05:00
1 parent c85c1fdb86
commit 1682861853
220 files changed
+36928 -11374

No files matched your search

+5 -141
View File
@@ -437,7 +437,6 @@
"connType_terminal": "Terminal",
"connType_files": "File Manager",
"connType_docker": "Docker",
"connType_tunnel": "Tunnel",
"connType_host-metrics": "Host Metrics",
"connType_rdp": "RDP",
"connType_vnc": "VNC",
@@ -669,7 +668,6 @@
"home": "Home",
"terminal": "Terminal",
"localTerminal": "Local Terminal",
"tunnels": "Tunnels",
"fileManager": "File Manager",
"serverStats": "Host Metrics",
"admin": "Admin",
@@ -711,7 +709,6 @@
"macros": "Macros",
"hostManager": "Host Manager",
"credentials": "Credentials",
"portForwarding": "Forwarding",
"connections": "Connections",
"serial": "Serial",
"keepSideMenuOpen": "Keep Menu Open",
@@ -762,7 +759,6 @@
"tabTerminal": "Terminal",
"tabRdp": "RDP",
"tabVnc": "VNC",
"tabTunnels": "Tunnels",
"tabStats": "Host Metrics",
"tabTelnet": "Telnet",
"tabSharing": "Sharing",
@@ -1068,31 +1064,8 @@
"startupSnippetLabel": "Startup Snippet",
"keepaliveIntervalLabel": "Keepalive Interval (seconds)",
"maxKeepaliveMisses": "Max Keepalive Misses",
"tunnelSettings": "Tunnel Settings",
"enableTunneling": "Enable Tunneling",
"enableTunnelingDesc": "Enable SSH tunnel functionality for this host",
"serverTunnelsSection": "Server Tunnels",
"addTunnelBtn": "Add Tunnel",
"noTunnelsConfigured": "No tunnels configured.",
"tunnelLabel": "Tunnel {{number}}",
"tunnelType": "Tunnel Type",
"tunnelModeLocalDesc": "Forward a local port to a port on the remote server (or a host reachable from it).",
"tunnelModeRemoteDesc": "Forward a port on the remote server back to a local port on your machine.",
"tunnelModeDynamicDesc": "Create a SOCKS5 proxy on a local port for dynamic port forwarding.",
"sameHost": "This host (direct tunnel)",
"endpointHost": "Endpoint Host",
"endpointHostPlaceholder": "Same host, SSH host, or reachable host/IP",
"endpointPort": "Endpoint Port",
"bindHost": "Bind Host",
"sourcePort": "Source Port",
"maxRetries": "Max Retries",
"retryIntervalS": "Retry Interval (s)",
"autoStartLabel": "Auto-start",
"autoStartDesc": "Automatically connect this tunnel when the host is loaded",
"tunnelConnecting": "Tunnel connecting...",
"tunnelDisconnected": "Tunnel disconnected",
"failedToConnectTunnel": "Failed to connect",
"failedToDisconnectTunnel": "Failed to disconnect",
"enableTmuxMonitor": "Enable Tmux Monitor",
"enableTmuxMonitorDesc": "Show this host in the Tmux Monitor and add its tmux actions to the sidebar",
"enableTerminalToolbar": "Enable Terminal Toolbar",
@@ -1271,7 +1244,6 @@
"deletedHost": "Deleted {{name}}",
"copiedToClipboard": "Copied to clipboard",
"terminalUrlCopied": "Terminal URL copied",
"tunnelUrlCopied": "Tunnel URL copied",
"dockerUrlCopied": "Docker URL copied",
"hostMetricsUrlCopied": "Host Metrics URL copied",
"tmuxMonitorUrlCopied": "Tmux Monitor URL copied",
@@ -1288,7 +1260,6 @@
"copyAddress": "Copy Address",
"copyLink": "Copy Link",
"copyTerminalUrlAction": "Copy Terminal URL",
"copyTunnelUrlAction": "Copy Tunnel URL",
"copyDockerUrlAction": "Copy Docker URL",
"copyHostMetricsUrlAction": "Copy Host Metrics URL",
"copyTmuxMonitorUrlAction": "Copy Tmux Monitor URL",
@@ -1304,8 +1275,6 @@
"disableTerminalFeature": "Disable Terminal",
"enableFilesFeature": "Enable Files",
"disableFilesFeature": "Disable Files",
"enableTunnelsFeature": "Enable Tunnels",
"disableTunnelsFeature": "Disable Tunnels",
"enableDockerFeature": "Enable Docker",
"disableDockerFeature": "Disable Docker",
"enableProxmoxFeature": "Enable Proxmox",
@@ -1328,12 +1297,9 @@
"refreshBtn": "Refresh",
"addTag": "Add tags...",
"deleteConfirmBtn": "Delete",
"tunnelRequirementsText": "The SSH server must have GatewayPorts yes, AllowTcpForwarding yes, and PermitRootLogin yes set in /etc/ssh/sshd_config.",
"deleteHostConfirm": "Delete \"{{name}}\"?",
"enableAtLeastOneProtocol": "Enable at least one protocol above to configure authentication and connection settings.",
"keyPassphrase": "Key Passphrase",
"connectBtn": "Connect",
"disconnectBtn": "Disconnect",
"basicInformation": "Basic Information",
"authDetailsSection": "Authentication Details",
"credTypeLabel": "Type",
@@ -1365,7 +1331,7 @@
"groupCredentials": "Credentials",
"groupNotes": "Notes",
"groupTags": "Tags & pin",
"groupTunnels": "Tunnels",
"groupProxy": "Proxy",
"groupJumpHosts": "Jump hosts",
"groupQuickActions": "Quick actions",
"groupFeatureFlags": "Feature flags",
@@ -1435,7 +1401,6 @@
"filterFeaturesGroup": "Features",
"filterFeatureTerminal": "Terminal",
"filterFeatureFileManager": "File Manager",
"filterFeatureTunnel": "Tunnel",
"filterFeatureDocker": "Docker",
"filterTagsGroup": "Tags",
"connectRdp": "RDP",
@@ -1963,100 +1928,25 @@
"transferFailedRetryHint": "Partial data was kept on the destination. Retry will resume when the connection is back."
},
"tunnels": {
"noSshTunnels": "No SSH Tunnels",
"createFirstTunnelMessage": "You haven't created any SSH tunnels yet. Configure tunnel connections in the Host Manager to get started.",
"connected": "Connected",
"disconnected": "Disconnected",
"connecting": "Connecting...",
"error": "Error",
"canceling": "Canceling...",
"connect": "Connect",
"disconnect": "Disconnect",
"cancel": "Cancel",
"port": "Port",
"localPort": "Local Port",
"remotePort": "Remote Port",
"destinationPort": "Destination Port",
"currentHostPort": "Current Host Port",
"endpointPort": "Endpoint Port",
"bindIp": "Local IP",
"localAddress": "Local Address",
"remoteAddress": "Remote Address",
"destinationAddress": "Destination Address",
"remoteBindAddress": "Remote Bind Address",
"intermediateHost": "Intermediate Host",
"endpointSshConfig": "Endpoint SSH Configuration",
"endpointSshHost": "Endpoint SSH Host",
"endpointSshHostPlaceholder": "Select a configured host",
"endpointSshHostRequired": "Select an endpoint SSH host for each client tunnel.",
"attempt": "Attempt {{current}} of {{max}}",
"nextRetryIn": "Next retry in {{seconds}} seconds",
"clientTunnels": "Client Tunnels",
"clientTunnel": "Client Tunnel",
"addClientTunnel": "Add Client Tunnel",
"noClientTunnels": "No client tunnels configured on this desktop.",
"tunnelName": "Tunnel Name",
"remoteHost": "Remote Host",
"autoStart": "Auto Start",
"clientAutoStartDesc": "Starts when this desktop client opens and stays connected.",
"clientManualStartDesc": "Use Start and Stop from this row. Termix will not open it automatically.",
"clientRemoteServerNote": "Remote forwarding may require AllowTcpForwarding and GatewayPorts on the endpoint SSH server. The remote port closes when this desktop disconnects.",
"clientTunnelStarted": "Client tunnel started",
"clientTunnelStopped": "Client tunnel stopped",
"tunnelTestSucceeded": "Tunnel test succeeded",
"tunnelTestFailed": "Tunnel test failed",
"localSaved": "Client tunnels saved",
"localSaveError": "Failed to save local client tunnels",
"invalidBindIp": "Local IP must be a valid IPv4 address.",
"invalidLocalTargetIp": "Local target IP must be a valid IPv4 address.",
"invalidRemoteAddress": "Remote address is required.",
"invalidLocalPort": "Local port must be between 1 and 65535.",
"invalidRemotePort": "Remote port must be between 1 and 65535.",
"invalidLocalTargetPort": "Local target port must be between 1 and 65535.",
"invalidEndpointPort": "Endpoint port must be between 1 and 65535.",
"duplicateAutoStartBind": "Only one auto-start client tunnel can use {{bind}}.",
"manualControlError": "Failed to update tunnel state.",
"active": "Active",
"start": "Start",
"stop": "Stop",
"test": "Test",
"type": "Tunnel Type",
"typeLocal": "Local (-L)",
"typeRemote": "Remote (-R)",
"typeDynamic": "Dynamic (-D)",
"typeServerLocalDesc": "Current host to endpoint.",
"typeServerRemoteDesc": "Endpoint back to current host.",
"typeClientLocalDesc": "Local computer to endpoint.",
"typeClientRemoteDesc": "Endpoint back to local computer.",
"typeClientDynamicDesc": "SOCKS on local computer.",
"typeDynamicDesc": "Forward SOCKS5 CONNECT traffic through SSH",
"forwardDescriptionServerLocal": "Current host {{sourcePort}} → endpoint {{endpointPort}}.",
"forwardDescriptionServerRemote": "Endpoint {{endpointPort}} → current host {{sourcePort}}.",
"forwardDescriptionServerDynamic": "SOCKS on current host {{sourcePort}}.",
"forwardDescriptionClientLocal": "Local {{sourcePort}} → remote {{endpointPort}}.",
"forwardDescriptionClientRemote": "Remote {{sourcePort}} → local {{endpointPort}}.",
"forwardDescriptionClientDynamic": "SOCKS on local port {{sourcePort}}.",
"summaryClientLocal": "{{localHost}}:{{localPort}} → {{remoteHost}}:{{remotePort}} via {{endpoint}}",
"summaryClientRemote": "{{remoteHost}}:{{remotePort}} on {{endpoint}} → {{localHost}}:{{localPort}}",
"summaryClientDynamic": "{{localHost}}:{{localPort}} → SOCKS via {{endpoint}}",
"autoNameClientLocal": "Local {{localPort}} → {{endpoint}} {{remotePort}}",
"autoNameClientRemote": "{{endpoint}} {{remotePort}} → local {{localPort}}",
"autoNameClientDynamic": "SOCKS {{localPort}} via {{endpoint}}",
"route": "Route:",
"lastStarted": "Last started",
"lastTested": "Last tested",
"lastError": "Last error",
"maxRetries": "Max Retries",
"maxRetriesDescription": "Maximum amount of retry attempts.",
"retryInterval": "Retry Interval (seconds)",
"retryIntervalDescription": "Time to wait between retry attempts.",
"local": "Local",
"remote": "Remote",
"destination": "Destination",
"host": "Host",
"mode": "Mode",
"noHostSelected": "No host selected",
"working": "Working..."
"remote": "Remote"
},
"cardGrid": {
"dragToMove": "Drag to move",
@@ -2193,37 +2083,13 @@
},
"profile": {
"c2sTunnelConfigDesc": "Local desktop tunnels targeting configured SSH hosts.",
"c2sTunnelPresets": "Client Tunnel Presets",
"c2sTunnelPresetsDesc": "Save this desktop client's local tunnel list as a named server preset, or load a preset back into this client.",
"c2sTunnelPresetsUnavailable": "Client tunnel presets are only available in the desktop client.",
"c2sPresetName": "Preset Name",
"c2sPresetNamePlaceholder": "Client preset name",
"c2sPresetToLoad": "Preset To Load",
"c2sNoPresetSelected": "No preset selected",
"c2sNoPresets": "No presets saved",
"c2sLoadPreset": "Load",
"c2sCurrentLocalConfig": "{{count}} local client tunnel(s) configured on this desktop.",
"c2sPresetSyncNote": "Presets are explicit snapshots; loading one replaces this desktop client's local client tunnel list.",
"c2sPresetSaved": "Client tunnel preset saved",
"c2sPresetLoaded": "Client tunnel preset loaded locally",
"c2sPresetRenamed": "Client tunnel preset renamed",
"c2sPresetDeleted": "Client tunnel preset deleted",
"c2sPresetLoadError": "Failed to load client tunnel presets"
"c2sTunnelPresetsDesc": "Save this desktop client's local tunnel list as a named server preset, or load a preset back into this client."
},
"placeholders": {
"maxRetries": "3",
"retryInterval": "10",
"language": "Language",
"keyPassword": "key password",
"pastePrivateKey": "Paste your private key here...",
"localListenerHost": "127.0.0.1 (listen locally)",
"localTargetHost": "127.0.0.1 (target on this computer)",
"remoteTargetHost": "127.0.0.1 (target from endpoint)",
"remoteBindHost": "127.0.0.1 (listen on endpoint)",
"socksListenerHost": "127.0.0.1 (SOCKS listener)",
"enterPassword": "Enter your password",
"defaultPort": "22",
"defaultEndpointPort": "224"
"enterPassword": "Enter your password"
},
"dashboard": {
"title": "Dashboard",
@@ -2273,8 +2139,7 @@
"justNow": "just now",
"serviceLinks": "Service Links",
"homepagePreview": "Homepage Preview",
"activityFileManager": "File manager",
"activityTunnel": "Tunnel"
"activityFileManager": "File manager"
},
"donation": {
"title": "Enjoying Termix?",
@@ -3150,7 +3015,6 @@
"sectionSecurity": "Security",
"sectionApiKeys": "API Keys",
"sectionData": "Data",
"sectionC2sTunnels": "C2S Tunnels",
"usernameLabel": "Username",
"roleLabel": "Role",
"roleAdministrator": "Administrator",