Files
Termix/docs/readme/README-HI.md
T
+2
Luke GustafsonGitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>L.H.default-studentBrad Bakercopilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>Copilot Autofix powered by AIBrennan NeohbrennanneohXtraLargeZacharyZcR
1a26628a48 release-2.6.0 (#1085)
* fix: general bug fixes

* fix: general qol additions

* ci(deps): bump actions/setup-node in the github-actions group (#1068)

Bumps the github-actions group with 1 update: [actions/setup-node](https://github.com/actions/setup-node).


Updates `actions/setup-node` from 6 to 7
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/v6...v7)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps-dev): bump the dev-patch-updates group with 28 updates (#1069)

Bumps the dev-patch-updates group with 28 updates:

| Package | From | To |
| --- | --- | --- |
| [@biomejs/biome](https://github.com/biomejs/biome/tree/HEAD/packages/@biomejs/biome) | `2.5.2` | `2.5.4` |
| [@codemirror/view](https://github.com/codemirror/view) | `6.43.5` | `6.43.6` |
| [@radix-ui/react-accordion](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/accordion) | `1.2.15` | `1.2.17` |
| [@radix-ui/react-alert-dialog](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/alert-dialog) | `1.1.18` | `1.1.20` |
| [@radix-ui/react-checkbox](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/checkbox) | `1.3.6` | `1.3.8` |
| [@radix-ui/react-dialog](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/dialog) | `1.1.18` | `1.1.20` |
| [@radix-ui/react-dropdown-menu](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/dropdown-menu) | `2.1.19` | `2.1.21` |
| [@radix-ui/react-label](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/label) | `2.1.11` | `2.1.12` |
| [@radix-ui/react-popover](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/popover) | `1.1.18` | `1.1.20` |
| [@radix-ui/react-progress](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/progress) | `1.1.11` | `1.1.13` |
| [@radix-ui/react-scroll-area](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/scroll-area) | `1.2.13` | `1.2.15` |
| [@radix-ui/react-select](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/select) | `2.3.2` | `2.3.4` |
| [@radix-ui/react-separator](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/separator) | `1.1.11` | `1.1.12` |
| [@radix-ui/react-slider](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/slider) | `1.4.2` | `1.4.4` |
| [@radix-ui/react-switch](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/switch) | `1.3.2` | `1.3.4` |
| [@radix-ui/react-tabs](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/tabs) | `1.1.16` | `1.1.18` |
| [@radix-ui/react-tooltip](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/tooltip) | `1.2.11` | `1.2.13` |
| [@tailwindcss/vite](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-vite) | `4.3.2` | `4.3.3` |
| [@uiw/codemirror-extensions-langs](https://github.com/uiwjs/react-codemirror) | `4.25.10` | `4.25.11` |
| [@uiw/codemirror-theme-github](https://github.com/uiwjs/react-codemirror) | `4.25.10` | `4.25.11` |
| [@uiw/react-codemirror](https://github.com/uiwjs/react-codemirror) | `4.25.10` | `4.25.11` |
| [@vitest/coverage-v8](https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8) | `4.1.9` | `4.1.10` |
| [@vitest/ui](https://github.com/vitest-dev/vitest/tree/HEAD/packages/ui) | `4.1.9` | `4.1.10` |
| [i18next](https://github.com/i18next/i18next) | `26.3.4` | `26.3.6` |
| [radix-ui](https://github.com/radix-ui/primitives/tree/HEAD/packages/react/radix-ui) | `1.6.1` | `1.6.3` |
| [react-i18next](https://github.com/i18next/react-i18next) | `17.0.8` | `17.0.10` |
| [tailwindcss](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/tailwindcss) | `4.3.2` | `4.3.3` |
| [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest) | `4.1.9` | `4.1.10` |


Updates `@biomejs/biome` from 2.5.2 to 2.5.4
- [Release notes](https://github.com/biomejs/biome/releases)
- [Changelog](https://github.com/biomejs/biome/blob/main/packages/@biomejs/biome/CHANGELOG.md)
- [Commits](https://github.com/biomejs/biome/commits/@biomejs/biome@2.5.4/packages/@biomejs/biome)

Updates `@codemirror/view` from 6.43.5 to 6.43.6
- [Changelog](https://github.com/codemirror/view/blob/main/CHANGELOG.md)
- [Commits](https://github.com/codemirror/view/commits)

Updates `@radix-ui/react-accordion` from 1.2.15 to 1.2.17
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/accordion/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/accordion)

Updates `@radix-ui/react-alert-dialog` from 1.1.18 to 1.1.20
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/alert-dialog/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/alert-dialog)

Updates `@radix-ui/react-checkbox` from 1.3.6 to 1.3.8
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/checkbox/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/checkbox)

Updates `@radix-ui/react-dialog` from 1.1.18 to 1.1.20
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/dialog/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/dialog)

Updates `@radix-ui/react-dropdown-menu` from 2.1.19 to 2.1.21
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/dropdown-menu/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/dropdown-menu)

Updates `@radix-ui/react-label` from 2.1.11 to 2.1.12
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/label/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/label)

Updates `@radix-ui/react-popover` from 1.1.18 to 1.1.20
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/popover/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/popover)

Updates `@radix-ui/react-progress` from 1.1.11 to 1.1.13
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/progress/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/progress)

Updates `@radix-ui/react-scroll-area` from 1.2.13 to 1.2.15
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/scroll-area/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/scroll-area)

Updates `@radix-ui/react-select` from 2.3.2 to 2.3.4
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/select/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/select)

Updates `@radix-ui/react-separator` from 1.1.11 to 1.1.12
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/separator/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/separator)

Updates `@radix-ui/react-slider` from 1.4.2 to 1.4.4
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/slider/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/slider)

Updates `@radix-ui/react-switch` from 1.3.2 to 1.3.4
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/switch/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/switch)

Updates `@radix-ui/react-tabs` from 1.1.16 to 1.1.18
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/tabs/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/tabs)

Updates `@radix-ui/react-tooltip` from 1.2.11 to 1.2.13
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/tooltip/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/tooltip)

Updates `@tailwindcss/vite` from 4.3.2 to 4.3.3
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.3.3/packages/@tailwindcss-vite)

Updates `@uiw/codemirror-extensions-langs` from 4.25.10 to 4.25.11
- [Release notes](https://github.com/uiwjs/react-codemirror/releases)
- [Commits](https://github.com/uiwjs/react-codemirror/compare/v4.25.10...v4.25.11)

Updates `@uiw/codemirror-theme-github` from 4.25.10 to 4.25.11
- [Release notes](https://github.com/uiwjs/react-codemirror/releases)
- [Commits](https://github.com/uiwjs/react-codemirror/compare/v4.25.10...v4.25.11)

Updates `@uiw/react-codemirror` from 4.25.10 to 4.25.11
- [Release notes](https://github.com/uiwjs/react-codemirror/releases)
- [Commits](https://github.com/uiwjs/react-codemirror/compare/v4.25.10...v4.25.11)

Updates `@vitest/coverage-v8` from 4.1.9 to 4.1.10
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Changelog](https://github.com/vitest-dev/vitest/blob/main/docs/releases.md)
- [Commits](https://github.com/vitest-dev/vitest/commits/v4.1.10/packages/coverage-v8)

Updates `@vitest/ui` from 4.1.9 to 4.1.10
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Changelog](https://github.com/vitest-dev/vitest/blob/main/docs/releases.md)
- [Commits](https://github.com/vitest-dev/vitest/commits/v4.1.10/packages/ui)

Updates `i18next` from 26.3.4 to 26.3.6
- [Release notes](https://github.com/i18next/i18next/releases)
- [Changelog](https://github.com/i18next/i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/i18next/compare/v26.3.4...v26.3.6)

Updates `radix-ui` from 1.6.1 to 1.6.3
- [Changelog](https://github.com/radix-ui/primitives/blob/main/packages/react/radix-ui/CHANGELOG.md)
- [Commits](https://github.com/radix-ui/primitives/commits/HEAD/packages/react/radix-ui)

Updates `react-i18next` from 17.0.8 to 17.0.10
- [Changelog](https://github.com/i18next/react-i18next/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/react-i18next/compare/v17.0.8...v17.0.10)

Updates `tailwindcss` from 4.3.2 to 4.3.3
- [Release notes](https://github.com/tailwindlabs/tailwindcss/releases)
- [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/tailwindlabs/tailwindcss/commits/v4.3.3/packages/tailwindcss)

Updates `vitest` from 4.1.9 to 4.1.10
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Changelog](https://github.com/vitest-dev/vitest/blob/main/docs/releases.md)
- [Commits](https://github.com/vitest-dev/vitest/commits/v4.1.10/packages/vitest)

---
updated-dependencies:
- dependency-name: "@biomejs/biome"
  dependency-version: 2.5.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: "@codemirror/view"
  dependency-version: 6.43.6
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: "@radix-ui/react-accordion"
  dependency-version: 1.2.17
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: "@radix-ui/react-alert-dialog"
  dependency-version: 1.1.20
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: "@radix-ui/react-checkbox"
  dependency-version: 1.3.8
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: "@radix-ui/react-dialog"
  dependency-version: 1.1.20
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: "@radix-ui/react-dropdown-menu"
  dependency-version: 2.1.21
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: "@radix-ui/react-label"
  dependency-version: 2.1.12
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: "@radix-ui/react-popover"
  dependency-version: 1.1.20
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: "@radix-ui/react-progress"
  dependency-version: 1.1.13
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: "@radix-ui/react-scroll-area"
  dependency-version: 1.2.15
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: "@radix-ui/react-select"
  dependency-version: 2.3.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: "@radix-ui/react-separator"
  dependency-version: 1.1.12
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: "@radix-ui/react-slider"
  dependency-version: 1.4.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: "@radix-ui/react-switch"
  dependency-version: 1.3.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: "@radix-ui/react-tabs"
  dependency-version: 1.1.18
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: "@radix-ui/react-tooltip"
  dependency-version: 1.2.13
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: "@tailwindcss/vite"
  dependency-version: 4.3.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: "@uiw/codemirror-extensions-langs"
  dependency-version: 4.25.11
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: "@uiw/codemirror-theme-github"
  dependency-version: 4.25.11
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: "@uiw/react-codemirror"
  dependency-version: 4.25.11
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: "@vitest/coverage-v8"
  dependency-version: 4.1.10
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: "@vitest/ui"
  dependency-version: 4.1.10
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: i18next
  dependency-version: 26.3.6
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: radix-ui
  dependency-version: 1.6.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: react-i18next
  dependency-version: 17.0.10
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: tailwindcss
  dependency-version: 4.3.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
- dependency-name: vitest
  dependency-version: 4.1.10
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: dev-patch-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump ws in the prod-patch-updates group (#1071)

Bumps the prod-patch-updates group with 1 update: [ws](https://github.com/websockets/ws).


Updates `ws` from 8.21.0 to 8.21.1
- [Release notes](https://github.com/websockets/ws/releases)
- [Commits](https://github.com/websockets/ws/compare/8.21.0...8.21.1)

---
updated-dependencies:
- dependency-name: ws
  dependency-version: 8.21.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: prod-patch-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* chore(deps): bump the major-updates group with 2 updates (#1072)

Bumps the major-updates group with 2 updates: [nanoid](https://github.com/ai/nanoid) and [typescript](https://github.com/microsoft/TypeScript).


Updates `nanoid` from 5.1.16 to 6.0.0
- [Release notes](https://github.com/ai/nanoid/releases)
- [Changelog](https://github.com/ai/nanoid/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ai/nanoid/compare/5.1.16...6.0.0)

Updates `typescript` from 6.0.3 to 7.0.2
- [Release notes](https://github.com/microsoft/TypeScript/releases)
- [Commits](https://github.com/microsoft/TypeScript/commits)

---
updated-dependencies:
- dependency-name: nanoid
  dependency-version: 6.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: major-updates
- dependency-name: typescript
  dependency-version: 7.0.2
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: major-updates
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* fix: general qol additions and new analytics/telemetrics feature

* fix: incorrect version sent to posthog

* feat: add multiplayer/shared sessions for terminal and guacd

* feat: rework Electron desktop app to run standalone-first with optional two-way sync to a remote Termix server

* Fix Guacamole tab visibility lifecycle (#1074)

Co-authored-by: default-student <default-student@github.com>
Co-authored-by: Luke Gustafson <88517757+LukeGus@users.noreply.github.com>

* fix(alerts): send channel config as object payload instead of JSON string (#1075)

* fix tmux-monitor tailscale issue (#1076)

* Initial plan

* fix(tmux-monitor): explicitly handle tailscale auth in PanePreview hostConfig

For Tailscale-auth hosts the pane-preview attach path was building the
Terminal hostConfig with only the generic spread of host fields.  This
could omit or mismap auth-critical details and trigger a plain TCP/SSH
reachability path that doesn't work with Tailscale-only SSH endpoints.

The fix branches on `host.authType === "tailscale"` and:
- Carries `authType: "tailscale"` explicitly so the backend always selects
  the Tailscale-aware PTY path regardless of how the host object evolves.
- Derives `port` from `host.sshPort ?? host.port` so Tailscale SSH
  endpoints on a non-default SSH port are reached correctly.
- Leaves all non-tailscale auth types on the unchanged code path.

Reattach (bumping instanceId + attachNonce) continues to work because
terminalHostConfig is recomputed on every render with the latest
instanceIdRef.current value.

* refactor(tmux-monitor): simplify tailscale port logic with extracted variable

Address code review feedback: extract resolvedPort into a local variable
to avoid the duplicated `host.sshPort ?? host.port` expression that was
assigned to both `port` and `sshPort`.  Restructure as an if/else block
instead of an IIFE for readability.

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* chore: run prettier

* chore: update beta release text

* fix: cant update credential of an RDP host

* feat: add custom key shortcuts

* feat: add support for MFA over SSH

* fix: Invalid websocket frame causing code 10006 crash triggering restart loop

* fix(net): correct SSRF blocklist false-positive blocking all outbound IPv4 (#1079)

* fix: correct IPv4-mapped-IPv6 blocklist entry blocking all outbound IPv4

::ffff:0:0/96 in the IPv6 blocklist matches every IPv4 address once
mapped, since Node's BlockList compares addresses in their mapped form
internally regardless of the declared family. This caused
safeOutboundFetch to reject all IPv4-resolved destinations as private,
breaking outbound requests (e.g. ntfy/webhook notifications) whenever
DNS resolved to IPv4. Replaced with individual mapped ranges mirroring
the existing IPv4 blocklist.

* test: cover isBlockedAddress and link the Node BlockList citation

Exports isBlockedAddress so its family-crossing behavior around
IPv4-mapped-IPv6 addresses can actually be asserted, instead of relying
on manual container debugging to notice a regression. Also swaps the
prior "Node's BlockList compares addresses in mapped form" comment for
one citing the documented example in the Node docs
(https://nodejs.org/api/net.html#class-netblocklist), since that
behavior isn't otherwise obvious from the addSubnet/check call sites.

Related: Termix-SSH/Support#1024

* refactor: derive IPv6 mirror from IPv4 list, split DNS error messages

Two follow-ups from review:

- The IPv6 blocklist previously hand-duplicated each IPv4 range as its
  IPv4-mapped-IPv6 equivalent. Nothing enforced the two stayed in sync,
  which is exactly how the original bug (a mismatched ::ffff:0:0/96
  entry blocking all IPv4) was introduced in the first place. Now
  derived from a single blockedIpv4Ranges list in one loop.

- The connect.lookup hook threw the same "Private destinations are not
  allowed" for both an empty DNS result and an actually-blocked address.
  An empty result is a resolution failure, not a privacy decision, and
  conflating the two is the same kind of opaque-error problem that made
  this bug slow to diagnose in production. Split into distinct messages.

Also extracted the lookup hook itself (createDnsLookupHook) so it can be
unit-tested against a fake resolver directly, instead of only through a
real fetch()/Agent call тАФ the bug lived entirely in this callback, and
undici wraps any error thrown here as a generic "fetch failed" TypeError,
which is why isolating it matters for testability.

---------

Co-authored-by: brennanneoh <497569+brennanneoh@users.noreply.github.com>

* fix(ssh): do not offer chacha20-poly1305 without the native ssh2 binding (#1081)

The availability probe treated a working OpenSSL "chacha20" cipher as proof
that chacha20-poly1305@openssh.com is usable. It is not: ssh2 pure-JS
chacha20-poly1305 corrupts the transport, so the peer aborts the KEX
("incomplete message [preauth]") and the connection times out. Easy to hit
on jump-host connections whose target sshd negotiates chacha20-poly1305
first.

Only trust the native binding (sshcrypto.node); otherwise leave the cipher
disabled so filterCiphers() drops it and AES-GCM is negotiated instead.

Co-authored-by: XtraLarge <>

* fix: add Swiss German server layout (#1078)

* chore: update release notes

* feat: continue improving desktop app 2-way sync with logic fixes and a migration dialog

* fix: dekstop app showing auth form without syncing

* feat: create desktop auto sessions for existing setups

* feat: add electron backend killing

* fix: electron login and session related bugs and updated readme for v2.6.0

* chore: finalize release notes

* fix: click to expand hosts including extra bottom margin

* fix: desktop auth modal failing to log users in

* fix: desktop app failing to sync

* fix: reverse proxy causing sync error

* chore: lint, format, and bump version to 2.6.0

* chore: sync Crowdin translations for 2.6.0

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: L.H. <117188168+default-student@users.noreply.github.com>
Co-authored-by: default-student <default-student@github.com>
Co-authored-by: Brad Baker <xyzulu@users.noreply.github.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Brennan Neoh <brennanneoh@users.noreply.github.com>
Co-authored-by: brennanneoh <497569+brennanneoh@users.noreply.github.com>
Co-authored-by: XtraLarge <eMail@WilliWerres.de>
Co-authored-by: ZacharyZcR <zacharyzcr1984@gmail.com>
2026-07-26 18:47:27 -05:00

431 lines
28 KiB
Markdown

<div align="center">
<img src="../public/icon.svg" width="120" height="120" alt="Termix Logo" />
<h1>Termix</h1>
<p>рд╕реНрд╡-рд╣реЛрд╕реНрдЯреЗрдб SSH рдкреНрд░рдмрдВрдзрди рдФрд░ рд░рд┐рдореЛрдЯ рдбреЗрд╕реНрдХрдЯреЙрдк рдПрдХреНрд╕реЗрд╕</p>
<p>
<a href="../README.md">English</a> ┬╖
<a href="README-CN.md">ф╕нцЦЗ</a> ┬╖
<a href="README-JA.md">цЧецЬмшкЮ</a> ┬╖
<a href="README-KO.md">эХЬъ╡ньЦ┤</a> ┬╖
<a href="README-FR.md">Fran├зais</a> ┬╖
<a href="README-DE.md">Deutsch</a> ┬╖
<a href="README-ES.md">Espa├▒ol</a> ┬╖
<a href="README-PT.md">Portugu├кs</a> ┬╖
<a href="README-RU.md">╨а╤Г╤Б╤Б╨║╨╕╨╣</a> ┬╖
<a href="README-AR.md">╪з┘Д╪╣╪▒╪и┘К╪й</a> ┬╖
рд╣рд┐рдиреНрджреА ┬╖
<a href="README-TR.md">T├╝rk├зe</a> ┬╖
<a href="README-VI.md">Tiс║┐ng Viс╗Зt</a> ┬╖
<a href="README-IT.md">Italiano</a>
</p>
<p>
<img src="https://img.shields.io/github/stars/Termix-SSH/Termix?style=flat&label=Stars&color=F39044&labelColor=1a1a1a" />
<img src="https://img.shields.io/github/forks/Termix-SSH/Termix?style=flat&label=Forks&color=F39044&labelColor=1a1a1a" />
<img src="https://img.shields.io/github/v/release/Termix-SSH/Termix?style=flat&label=Release&color=F39044&labelColor=1a1a1a&v=1" />
<a href="https://discord.gg/jVQGdvHDrf"><img alt="Discord" src="https://img.shields.io/discord/1347374268253470720?color=F39044&labelColor=1a1a1a" /></a>
<a href="https://donate.termix.site/"><img alt="Donate" src="https://img.shields.io/badge/Donate-Support%20Termix-F39044?style=flat&labelColor=1a1a1a" /></a>
</p>
<p>
<a href="https://donate.termix.site/"><img alt="Donations this month" src="https://img.shields.io/badge/dynamic/json?style=for-the-badge&label=Donations%20this%20month&query=%24.fiatTotal&prefix=%24&url=https%3A%2F%2Ftermix.site%2Fdonation-snapshot.json&color=F39044&labelColor=1a1a1a" /></a>
</p>
<br />
Termix рдореБрдлрд╝реНрдд рдФрд░ рдУрдкрди рд╕реЛрд░реНрд╕ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ рдпрд╣ рдЙрдкрдпреЛрдЧреА рд▓рдЧрддрд╛ рд╣реИ, рддреЛ рд╕рд░реНрд╡рд░ рд▓рд╛рдЧрдд рдФрд░ рд╡рд┐рдХрд╛рд╕ рд╕рдордп рдореЗрдВ рдорджрдж рдХреЗ рд▓рд┐рдП [рджрд╛рди рдХрд░реЗрдВ](https://donate.termix.site/)ред
<br />
<img src="../repo-images/Termix Header.png" alt="Termix Banner" width="900" />
<br />
<br />
<p>
<img src="../repo-images/Repo of the Day.png" alt="Repo of the Day Achievement" width="280" />
<br />
<sub>1 рд╕рд┐рддрдВрдмрд░, 2025 рдХреЛ рдкреНрд░рд╛рдкреНрдд</sub>
</p>
</div>
<br />
## рдЕрд╡рд▓реЛрдХрди
Termix рдПрдХ рдУрдкрди-рд╕реЛрд░реНрд╕, рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдореБрдлрд╝реНрдд, рд╕реЗрд▓реНрдл-рд╣реЛрд╕реНрдЯреЗрдб рдСрд▓-рдЗрди-рд╡рди рд╕рд░реНрд╡рд░ рдкреНрд░рдмрдВрдзрди рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╣реИред рдпрд╣ рдПрдХ рдПрдХрд▓, рд╕рд╣рдЬ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдкрдХреЗ рд╕рд░реНрд╡рд░ рдФрд░ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдБрдЪреЗ рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдПрдХ рдорд▓реНрдЯреА-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред Termix SSH рдЯрд░реНрдорд┐рдирд▓ рдПрдХреНрд╕реЗрд╕, рд░рд┐рдореЛрдЯ рдбреЗрд╕реНрдХрдЯреЙрдк рдХрдВрдЯреНрд░реЛрд▓ (RDP, VNC, Telnet), SSH рдЯрдирд▓рд┐рдВрдЧ рдХреНрд╖рдорддрд╛рдПрдБ, рд░рд┐рдореЛрдЯ рдлрд╝рд╛рдЗрд▓ рдкреНрд░рдмрдВрдзрди, рдФрд░ рдХрдИ рдЕрдиреНрдп рдЙрдкрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред Termix рд╕рднреА рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рдЙрдкрд▓рдмреНрдз Termius рдХрд╛ рд╕рд╣реА рдореБрдлрд╝реНрдд рдФрд░ рд╕реЗрд▓реНрдл-рд╣реЛрд╕реНрдЯреЗрдб рд╡рд┐рдХрд▓реНрдк рд╣реИред
<br />
## рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ
<table>
<tr>
<td width="50%" valign="top">
**SSH рдЯрд░реНрдорд┐рдирд▓ рдПрдХреНрд╕реЗрд╕:**
рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЬреИрд╕реА рдЯреИрдм рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд╕рд╛рде рд╕реНрдкреНрд▓рд┐рдЯ-рд╕реНрдХреНрд░реАрди рд╕рдкреЛрд░реНрдЯ (4 рдкреИрдирд▓ рддрдХ) рд╡рд╛рд▓рд╛ рдкреВрд░реНрдг-рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд╛рд▓рд╛ рдЯрд░реНрдорд┐рдирд▓ред рдЗрд╕рдореЗрдВ рд▓реЛрдХрдкреНрд░рд┐рдп рдЯрд░реНрдорд┐рдирд▓ рдереАрдо, рдлрд╝реЙрдиреНрдЯ рдФрд░ рдЕрдиреНрдп рдХрдВрдкреЛрдиреЗрдВрдЯ рд╕рд╣рд┐рдд рдЯрд░реНрдорд┐рдирд▓ рдХреЛ рдХрд╕реНрдЯрдорд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХрд╛ рд╕рдкреЛрд░реНрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИред
</td>
<td width="50%" valign="top">
**рд░рд┐рдореЛрдЯ рдбреЗрд╕реНрдХрдЯреЙрдк рдПрдХреНрд╕реЗрд╕:**
рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкрд░ RDP, VNC рдФрд░ Telnet рд╕рдкреЛрд░реНрдЯ, рдкреВрд░реНрдг рдХрд╕реНрдЯрдорд╛рдЗрдЬрд╝реЗрд╢рди рдФрд░ рд╕реНрдкреНрд▓рд┐рдЯ рд╕реНрдХреНрд░реАрди рдХреЗ рд╕рд╛рдеред
</td>
</tr>
<tr>
<td width="50%" valign="top">
**SSH рдЯрдирд▓ рдкреНрд░рдмрдВрдзрди:**
рдСрдЯреЛрдореИрдЯрд┐рдХ рд░реАрдХрдиреЗрдХреНрд╢рди, рд╣реЗрд▓реНрде рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рдФрд░ рд▓реЛрдХрд▓, рд░рд┐рдореЛрдЯ рдпрд╛ рдбрд╛рдпрдиреЗрдорд┐рдХ SOCKS рдлреЙрд░рд╡рд░реНрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕рд░реНрд╡рд░-рдЯреБ-рд╕рд░реНрд╡рд░ SSH рдЯрдирд▓ рдмрдирд╛рдПрдБ рдФрд░ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░реЗрдВред рдбреЗрд╕реНрдХрдЯреЙрдк рдХреНрд▓рд╛рдЗрдВрдЯ-рдЯреБ-рд╕рд░реНрд╡рд░ рдЯрдирд▓ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкреНрд░рддреНрдпреЗрдХ рдбреЗрд╕реНрдХрдЯреЙрдк рдЗрдВрд╕реНрдЯреЙрд▓ рдореЗрдВ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреА рд╣реИрдВ; рд╡реИрдХрд▓реНрдкрд┐рдХ C2S рдкреНрд░реАрд╕реЗрдЯ рд╕реНрдиреИрдкрд╢реЙрдЯ рд╕рд░реНрд╡рд░ рдкрд░ рд╕реЗрд╡ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рддрдерд╛ рдЬрдм рдЖрдк рдХрд┐рд╕реА рд▓реЛрдХрд▓ рдЯрдирд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдмреАрдЪ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВ рддреЛ рдЙрдиреНрд╣реЗрдВ рд░реАрдиреЗрдо, рд▓реЛрдб рдпрд╛ рдбрд┐рд▓реАрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
</td>
<td width="50%" valign="top">
**рд░рд┐рдореЛрдЯ рдлрд╝рд╛рдЗрд▓ рдореИрдиреЗрдЬрд░:**
рдХреЛрдб, рдЗрдореЗрдЬ, рдСрдбрд┐рдпреЛ рдФрд░ рд╡реАрдбрд┐рдпреЛ рджреЗрдЦрдиреЗ рдФрд░ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд╕рдкреЛрд░реНрдЯ рдХреЗ рд╕рд╛рде рд░рд┐рдореЛрдЯ рд╕рд░реНрд╡рд░ рдкрд░ рд╕реАрдзреЗ рдлрд╝рд╛рдЗрд▓реЗрдВ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░реЗрдВред sudo рд╕рдкреЛрд░реНрдЯ рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓реЗрдВ рдЕрдкрд▓реЛрдб, рдбрд╛рдЙрдирд▓реЛрдб, рд░реАрдиреЗрдо, рдбрд┐рд▓реАрдЯ рдФрд░ рдореВрд╡ рдХрд░реЗрдВред рдЗрд╕рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдПрдХ рд╕рд░реНрд╡рд░ рд╕реЗ рджреВрд╕рд░реЗ рд╕рд░реНрд╡рд░ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдкреЛрд░реНрдЯ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред
</td>
</tr>
<tr>
<td width="50%" valign="top">
**Docker рдФрд░ Podman рдкреНрд░рдмрдВрдзрди:**
рдХрдВрдЯреЗрдирд░ рд╢реБрд░реВ, рдмрдВрдж, рдкреЙрдЬрд╝, рд╣рдЯрд╛рдПрдБред рдХрдВрдЯреЗрдирд░ рд╕реНрдЯреИрдЯреНрд╕ рджреЗрдЦреЗрдВред docker exec рдЯрд░реНрдорд┐рдирд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдВрдЯреЗрдирд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░реЗрдВред Docker рдФрд░ Podman рджреЛрдиреЛрдВ рдХреЛ рдХрдВрдЯреЗрдирд░ рд░рдирдЯрд╛рдЗрдо рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИред рдЗрд╕реЗ Portainer рдпрд╛ Dockge рдХреА рдЬрдЧрд╣ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдмрд▓реНрдХрд┐ рдХрдВрдЯреЗрдирд░ рдмрдирд╛рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рд╕рд░рд▓рддрд╛ рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
</td>
<td width="50%" valign="top">
**SSH рд╣реЛрд╕реНрдЯ рдореИрдиреЗрдЬрд░:**
рдЯреИрдЧ рдФрд░ рдлрд╝реЛрд▓реНрдбрд░ (рдлрд╝реЛрд▓реНрдбрд░ рдХрд╕реНрдЯрдорд╛рдЗрдЬрд╝реЗрд╢рди рдФрд░ рдиреЗрд╕реНрдЯреЗрдб рдлрд╝реЛрд▓реНрдбрд░ рд╕рдкреЛрд░реНрдЯ рдХреЗ рд╕рд╛рде) рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ SSH рдХрдиреЗрдХреНрд╢рди рд╕рд╣реЗрдЬреЗрдВ, рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░реЗрдВ рдФрд░ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░реЗрдВ, рдФрд░ SSH рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреА рддреИрдирд╛рддреА рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдкреБрди: рдЙрдкрдпреЛрдЧ рдпреЛрдЧреНрдп рд▓реЙрдЧрд┐рди рдЬрд╛рдирдХрд╛рд░реА рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рд╣реЗрдЬреЗрдВред
</td>
</tr>
<tr>
<td width="50%" valign="top">
**рд╣реЛрд╕реНрдЯ рдореЗрдЯреНрд░рд┐рдХреНрд╕:**
рдЕрдзрд┐рдХрд╛рдВрд╢ Linux рдЖрдзрд╛рд░рд┐рдд рд╕рд░реНрд╡рд░ рдкрд░ CPU, рдореЗрдореЛрд░реА, рдбрд┐рд╕реНрдХ рдЙрдкрдпреЛрдЧ, рдиреЗрдЯрд╡рд░реНрдХ, рдЕрдкрдЯрд╛рдЗрдо, рд╕рд┐рд╕реНрдЯрдо рдЬрд╛рдирдХрд╛рд░реА, рдлрд╝рд╛рдпрд░рд╡реЙрд▓, рдкреЛрд░реНрдЯ рдореЙрдирд┐рдЯрд░, рд▓реЙрдЧ рд╡реНрдпреВрдЕрд░, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛/рдЕрдиреБрдорддрд┐рдпрд╛рдБ, рд╕рд░реНрдЯрд┐рдлрд╝рд┐рдХреЗрдЯ рдФрд░ рднреА рдмрд╣реБрдд рдХреБрдЫ рджреЗрдЦреЗрдВред рдЗрд╕рдореЗрдВ рдЯрд╛рдЗрдо-рд╕реАрд░реАрдЬрд╝ рд╣рд┐рд╕реНрдЯреНрд░реА рдЧреНрд░рд╛рдлрд╝ рдФрд░ ntfy рд╡ webhook рд╕рдкреЛрд░реНрдЯ рдХреЗ рд╕рд╛рде рдереНрд░реЗрд╢реЛрд▓реНрдб-рдЖрдзрд╛рд░рд┐рдд рдЕрд▓рд░реНрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
</td>
<td width="50%" valign="top">
**рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг:**
рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдирд┐рдпрдВрддреНрд░рдг (рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ) рдФрд░ OIDC/LDAP/SSO (рдПрдХреНрд╕реЗрд╕ рдХрдВрдЯреНрд░реЛрд▓ рдХреЗ рд╕рд╛рде), 2FA (TOTP), рдФрд░ рдкрд╛рд╕рдХреА (WebAuthn) рд╕рдкреЛрд░реНрдЯ рдХреЗ рд╕рд╛рде рд╕реБрд░рдХреНрд╖рд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдмрдВрдзрдиред рд╕рднреА рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рд╕рдХреНрд░рд┐рдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рддреНрд░ рджреЗрдЦреЗрдВ рдФрд░ рдЕрдиреБрдорддрд┐рдпрд╛рдБ рд░рджреНрдж рдХрд░реЗрдВред рдЕрдкрдиреЗ OIDC/рд╕реНрдерд╛рдиреАрдп рдЦрд╛рддреЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рдЬреЛрдбрд╝реЗрдВред рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдЗрдпреЛрдВ рдХрд╛ рдСрдбрд┐рдЯ рд▓реЙрдЧ рджреЗрдЦреЗрдВред
</td>
</tr>
<tr>
<td width="50%" valign="top">
**Tailscale рдПрдХреАрдХрд░рдг:**
рдЕрдкрдиреЗ Tailscale рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдбрд┐рд╡рд╛рдЗрд╕ рд╕реВрдЪреАрдмрджреНрдз рдХрд░реЗрдВ рддрд╛рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЬрд▓реНрджреА рд╕реЗ рд╣реЛрд╕реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХреЗ, рдФрд░ Tailscale SSH рдХреЛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╡рд┐рдзрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ, рдЬрд┐рд╕рд╕реЗ рдЖрдкрдХреЗ Tailscale ACL рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП рдмрд┐рдирд╛ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╕рдВрднрд╛рд▓ рд╕рдХреЗрдВред
</td>
<td width="50%" valign="top">
**RBAC/рд╢реЗрдпрд░рд┐рдВрдЧ:**
рднреВрдорд┐рдХрд╛рдПрдБ рдмрдирд╛рдПрдБ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ/рднреВрдорд┐рдХрд╛рдУрдВ рдореЗрдВ рд╣реЛрд╕реНрдЯ рд╕рд╛рдЭрд╛ рдХрд░реЗрдВред рд╕рднреА рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкреНрд░рдХрд╛рд░реЛрдВ рдФрд░ рд╕рднреА рд╣реЛрд╕реНрдЯ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рд╕рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИред
</td>
</tr>
<tr>
<td width="50%" valign="top">
**рд╕реАрд░рд┐рдпрд▓ рдХрдиреЗрдХреНрд╢рди:**
рд╕реАрд░рд┐рдпрд▓ рдбрд┐рд╡рд╛рдЗрд╕ (рд░рд╛рдЙрдЯрд░, рд╕реНрд╡рд┐рдЪ, рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдЖрджрд┐) рд╕реЗ рд╕реАрдзреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдпрд╛ рдбреЗрд╕реНрдХрдЯреЙрдк рдРрдк рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВред рдмреЙрдб рд░реЗрдЯ, рдбреЗрдЯрд╛ рдмрд┐рдЯреНрд╕, рд╕реНрдЯреЙрдк рдмрд┐рдЯреНрд╕ рдФрд░ рдкреИрд░рд┐рдЯреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВред рд╕рдорд░реНрдерд┐рдд рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ Web Serial API рдпрд╛ Electron рдРрдк рдореЗрдВ рдиреЗрдЯрд┐рд╡ рдмреИрдХрдПрдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
</td>
<td width="50%" valign="top">
**рдЕрд▓рд░реНрдЯ:**
рд╣реЛрд╕реНрдЯ рдореЗрдЯреНрд░рд┐рдХреНрд╕ (CPU, рдореЗрдореЛрд░реА, рдбрд┐рд╕реНрдХ рдЖрджрд┐) рдкрд░ рдереНрд░реЗрд╢реЛрд▓реНрдб-рдЖрдзрд╛рд░рд┐рдд рдЕрд▓рд░реНрдЯ рдирд┐рдпрдо рд╕реЗрдЯ рдХрд░реЗрдВ рдФрд░ рдЬрдм рд╡реЗ рдЯреНрд░рд┐рдЧрд░ рд╣реЛрдВ рддреЛ ntfy рдпрд╛ webhooks рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реВрдЪрдирд╛ рдкрд╛рдПрдБред рдЗрддрд┐рд╣рд╛рд╕ рд▓реЙрдЧ рдореЗрдВ рд╕рдХреНрд░рд┐рдп рдФрд░ рд╣рд▓ рдХрд┐рдП рдЧрдП рдЕрд▓рд░реНрдЯ рджреЗрдЦреЗрдВред
</td>
</tr>
<tr>
<td width="50%" valign="top">
**рд╣реЛрдордкреЗрдЬ:**
рдбреНрд░реИрдЧ-рдПрдВрдб-рдбреНрд░реЙрдк рд╡рд┐рдЬреЗрдЯ рдЧреНрд░рд┐рдб рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╕реНрдЯрдорд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реЛрдордкреЗрдЬред рд╣реЛрд╕реНрдЯ рд╕реНрдЯреЗрдЯрд╕, рд╕рд░реНрд╡рд┐рд╕ рд▓рд┐рдВрдХ, рдШрдбрд╝рд┐рдпрд╛рдБ, рдиреЛрдЯреНрд╕, RSS рдлрд╝реАрдб, рдореМрд╕рдо, Docker рдХрдВрдЯреЗрдирд░, рд╣реЛрд╕реНрдЯ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдЪрд╛рд░реНрдЯ, рдПрдореНрдмреЗрдбреЗрдб рдЯрд░реНрдорд┐рдирд▓, iframes рдФрд░ рдЕрдиреНрдп рдХреЗ рд▓рд┐рдП рд╡рд┐рдЬреЗрдЯ рдЬреЛрдбрд╝реЗрдВред
</td>
<td width="50%" valign="top">
**рдбреЗрдЯрд╛рдмреЗрд╕ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди:**
рдмреИрдХрдПрдВрдб рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб SQLite рдбреЗрдЯрд╛рдмреЗрд╕ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрддред рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП [рдбреЙрдХреНрд╕](https://docs.termix.site/security) рджреЗрдЦреЗрдВред
</td>
</tr>
<tr>
<td width="50%" valign="top">
**рдиреЗрдЯрд╡рд░реНрдХ рдЧреНрд░рд╛рдлрд╝:**
рд╕реНрдерд┐рддрд┐ рд╕рдкреЛрд░реНрдЯ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ SSH рдХрдиреЗрдХреНрд╢рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдкрдиреЗ рд╣реЛрдорд▓реИрдм рдХреЛ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдбреИрд╢рдмреЛрд░реНрдб рдХрд╕реНрдЯрдорд╛рдЗрдЬрд╝ рдХрд░реЗрдВред
</td>
<td width="50%" valign="top">
**SSH рдЯреВрд▓реНрд╕:**
рдПрдХ рдХреНрд▓рд┐рдХ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдкреБрди: рдЙрдкрдпреЛрдЧ рдпреЛрдЧреНрдп рдХрдорд╛рдВрдб рд╕реНрдирд┐рдкреЗрдЯ рдмрдирд╛рдПрдБред рдПрдХ рд╕рд╛рде рдХрдИ рдЦреБрд▓реЗ рдЯрд░реНрдорд┐рдирд▓реЛрдВ рдореЗрдВ рдПрдХ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдБред
</td>
</tr>
<tr>
<td width="50%" valign="top">
**рдкрд░рд╕рд┐рд╕реНрдЯреЗрдВрдЯ рдЯреИрдм:**
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдкрд░ SSH рд╕реЗрд╢рди рдФрд░ рдЯреИрдм рдбрд┐рд╡рд╛рдЗрд╕/рд░реАрдлреНрд░реЗрд╢ рдХреЗ рдкрд╛рд░ рдЦреБрд▓реЗ рд░рд╣рддреЗ рд╣реИрдВред
</td>
<td width="50%" valign="top">
**рднрд╛рд╖рд╛рдПрдБ:**
рд▓рдЧрднрдЧ 30 рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рдмрд┐рд▓реНрдЯ-рдЗрди рд╕рдкреЛрд░реНрдЯ ([Crowdin](https://docs.termix.site/translations) рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдмрдВрдзрд┐рдд)ред
</td>
</tr>
<tr>
<td width="50%" valign="top">
**рд╕реЗрд╢рди рд╢реЗрдпрд░рд┐рдВрдЧ:**
рд▓рд╛рдЗрд╡ рдЯрд░реНрдорд┐рдирд▓, RDP, VNC, рдпрд╛ Telnet рд╕реЗрд╢рди рдХреЛ рджреВрд╕рд░реЛрдВ рдХреЗ рд╕рд╛рде рд░реАрдпрд▓ рдЯрд╛рдЗрдо рдореЗрдВ рд╢реЗрдпрд░ рдХрд░реЗрдВред рд▓рд┐рдВрдХ рдХреЗ рдЬрд░рд┐рдП рд╢реЗрдпрд░ рдХрд░реЗрдВ (рдЧреБрдордирд╛рдо рд░реВрдк рд╕реЗ рдЬреБрдбрд╝реЗрдВ, рдЕрдХрд╛рдЙрдВрдЯ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВ) рдпрд╛ рдХрд┐рд╕реА рдЦрд╛рд╕ Termix рдпреВрдЬрд░ рдХреЗ рд╕рд╛рде, рдФрд░ рд░реАрдб-рдУрдирд▓реА рдпрд╛ рд░реАрдб-рд░рд╛рдЗрдЯ рдПрдХреНрд╕реЗрд╕ рдЪреБрдиреЗрдВред рд╢реЗрдпрд░ рдЕрдкрдиреЗ рдЖрдк рдПрдХреНрд╕рдкрд╛рдпрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдХрднреА рднреА рд░рджреНрдж рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╕реЗрд╢рди рд╢реЗрдпрд░рд┐рдВрдЧ рдХреЛ рдЧреНрд▓реЛрдмрд▓реА рдпрд╛ рдкреНрд░рддрд┐ рд╣реЛрд╕реНрдЯ рдЯреЙрдЧрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
</td>
<td width="50%" valign="top">
**рдбреЗрд╕реНрдХрдЯреЙрдк рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди + 2-рд╡реЗ рд╕рд┐рдВрдХ:**
Electron рдбреЗрд╕реНрдХрдЯреЙрдк рдРрдк рдЕрдкрдиреЗ рдЦреБрдж рдХреЗ рд▓реЛрдХрд▓ рдмреИрдХрдПрдВрдб рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рдЪрд▓рддрд╛ рд╣реИ, рдХрд┐рд╕реА рд╕рд░реНрд╡рд░ рдХреА рдЬрд░реВрд░рдд рдирд╣реАрдВред рдЪрд╛рд╣реЗрдВ рддреЛ рдЗрд╕реЗ рдХрд┐рд╕реА рд░рд┐рдореЛрдЯ Termix рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ рддрд╛рдХрд┐ рд╣реЛрд╕реНрдЯреНрд╕, рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕, рд╕реНрдирд┐рдкреЗрдЯреНрд╕ рдФрд░ рдЕрдиреНрдп рдЪреАрдЬрд╝реЛрдВ рдХрд╛ рдСрдЯреЛрдореИрдЯрд┐рдХ 2-рд╡реЗ рд╕рд┐рдВрдХ рд╣реЛ рд╕рдХреЗ, рдФрд░ рдЪреБрдиреЗрдВ рдХрд┐ SSH рдХрдиреЗрдХреНрд╢рди рд▓реЛрдХрд▓реА рд╢реБрд░реВ рд╣реЛрдВ рдпрд╛ рд░рд┐рдореЛрдЯ рд╕рд░реНрд╡рд░ рдХреЗ рдЬрд░рд┐рдПред
</td>
</tr>
</table>
<br />
<details>
<summary><b>рдЕрдзрд┐рдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ</b></summary>
<br />
- **рдбреИрд╢рдмреЛрд░реНрдб** - рдЕрдкрдиреЗ рдбреИрд╢рдмреЛрд░реНрдб рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдореЗрдВ рд╕рд░реНрд╡рд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА рджреЗрдЦреЗрдВ
- **API рдХреБрдВрдЬрд┐рдпрд╛рдБ** - рдСрдЯреЛрдореЗрд╢рди/CI рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рд╣реЗрддреБ рд╕рдорд╛рдкреНрддрд┐ рддрд┐рдерд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рд╕реНрдХреЛрдкреНрдб API рдХреБрдВрдЬрд┐рдпрд╛рдБ рдмрдирд╛рдПрдБ
- **рдбреЗрдЯрд╛ рдПрдХреНрд╕рдкреЛрд░реНрдЯ/рдЗрдореНрдкреЛрд░реНрдЯ** - SSH рд╣реЛрд╕реНрдЯ, рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдФрд░ рдлрд╝рд╛рдЗрд▓ рдореИрдиреЗрдЬрд░ рдбреЗрдЯрд╛ рдПрдХреНрд╕рдкреЛрд░реНрдЯ рдФрд░ рдЗрдореНрдкреЛрд░реНрдЯ рдХрд░реЗрдВ
- **рд╕реНрд╡рдЪрд╛рд▓рд┐рдд SSL рд╕реЗрдЯрдЕрдк** - HTTPS рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдмрд┐рд▓реНрдЯ-рдЗрди SSL рд╕рд░реНрдЯрд┐рдлрд╝рд┐рдХреЗрдЯ рдЬрдирд░реЗрд╢рди рдФрд░ рдкреНрд░рдмрдВрдзрди
- **рдЖрдзреБрдирд┐рдХ UI** - React, Tailwind CSS, рдФрд░ Shadcn рд╕реЗ рдмрдирд╛ рд╕рд╛рдлрд╝ рдбреЗрд╕реНрдХрдЯреЙрдк/рдореЛрдмрд╛рдЗрд▓-рдлрд╝реНрд░реЗрдВрдбрд▓реА рдЗрдВрдЯрд░рдлрд╝реЗрд╕ред рд▓рд╛рдЗрдЯ, рдбрд╛рд░реНрдХ, рдбреНрд░реИрдХреБрд▓рд╛ рдЖрджрд┐ рд╕рд╣рд┐рдд рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ UI рдереАрдо рдХреЗ рдмреАрдЪ рдЪреБрдиреЗрдВред рдХрд┐рд╕реА рднреА рдХрдиреЗрдХреНрд╢рди рдХреЛ рдлрд╝реБрд▓-рд╕реНрдХреНрд░реАрди рдореЗрдВ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП URL рд░реВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
- **рдХрдорд╛рдВрдб рдЗрддрд┐рд╣рд╛рд╕** - рдкрд╣рд▓реЗ рдЪрд▓рд╛рдП рдЧрдП SSH рдХрдорд╛рдВрдб рдХрд╛ рдСрдЯреЛ-рдХрдореНрдкреНрд▓реАрдЯ рдФрд░ рджреГрд╢реНрдп
- **рдХреНрд╡рд┐рдХ рдХрдиреЗрдХреНрдЯ** - рдХрдиреЗрдХреНрд╢рди рдбреЗрдЯрд╛ рд╕рд╣реЗрдЬреЗ рдмрд┐рдирд╛ рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ
- **рдХрдорд╛рдВрдб рдкреИрд▓реЗрдЯ** - рдЕрдкрдиреЗ рдХреАрдмреЛрд░реНрдб рд╕реЗ SSH рдХрдиреЗрдХреНрд╢рди рддрдХ рддреНрд╡рд░рд┐рдд рдкрд╣реБрдБрдЪ рдХреЗ рд▓рд┐рдП рдмрд╛рдПрдБ Shift рдХреЛ рджреЛ рдмрд╛рд░ рдЯреИрдк рдХрд░реЗрдВ
- **Proxmox рдПрдХреАрдХрд░рдг** - рдЕрдкрдиреЗ Proxmox рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╕реЗ Termix рдореЗрдВ рд╣реЛрд╕реНрдЯ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝реЗрдВ
- **SSH рд╕реБрд╡рд┐рдзрд╛рдУрдВ рд╕реЗ рднрд░рдкреВрд░** - рдЬрдореНрдк рд╣реЛрд╕реНрдЯ, Warpgate, TOTP рдЖрдзрд╛рд░рд┐рдд рдХрдиреЗрдХреНрд╢рди, SOCKS5, рд╣реЛрд╕реНрдЯ рдХреА рд╡реЗрд░рд┐рдлрд╝рд┐рдХреЗрд╢рди, рдкрд╛рд╕рд╡рд░реНрдб рдСрдЯреЛрдлрд╝рд┐рд▓, [OPKSSH](https://github.com/openpubkey/opkssh), tmux, рдкреЛрд░реНрдЯ рдиреЙрдХрд┐рдВрдЧ, рдЯрд░реНрдорд┐рдирд▓ рд▓реЙрдЧрд┐рдВрдЧ, SSH рдПрдЬреЗрдВрдЯ рдлрд╝реЙрд░рд╡рд░реНрдбрд┐рдВрдЧ, Bitwarden SSH рдПрдЬреЗрдВрдЯ, HashiCorp Vault SSH рд╕рд┐рдЧреНрдирд┐рдВрдЧ, рдФрд░ рдЕрдиреНрдп рдХрд╛ рд╕рдкреЛрд░реНрдЯред
- **Termix ID** - Termix рдореЗрдВ рдмрд┐рд▓реНрдЯ-рдЗрди sshid.io рдХреЗ рд╕рдордХрдХреНрд╖ред рдПрдХ рд╣реИрдВрдбрд▓ рдХреНрд▓реЗрдо рдХрд░реЗрдВ, рдЕрдкрдиреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ SSH рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рдПрдХ рд░рд┐рдЬрд╝реЙрд▓реНрд╡рд░ URL рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реЗрдВ, рдФрд░ SSH рд╕рд░реНрдЯрд┐рдлрд╝рд┐рдХреЗрдЯ рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдЯ-рдЗрди CA рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
</details>
<br />
## рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╕рдкреЛрд░реНрдЯ
<table align="center">
<tr>
<th align="center">рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо</th>
<th align="center">рд╡рд┐рддрд░рдг</th>
</tr>
<tr>
<td align="center"><b>Web</b></td>
<td>рдХреЛрдИ рднреА рдЖрдзреБрдирд┐рдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ (Chrome, Safari, Firefox) ┬╖ PWA рд╕рдкреЛрд░реНрдЯ</td>
</tr>
<tr>
<td align="center"><b>Windows</b> <sub>x64/ia32</sub></td>
<td>рдкреЛрд░реНрдЯреЗрдмрд▓ ┬╖ MSI рдЗрдВрд╕реНрдЯреЙрд▓рд░ ┬╖ Chocolatey</td>
</tr>
<tr>
<td align="center"><b>Linux</b> <sub>x64/ia32</sub></td>
<td>рдкреЛрд░реНрдЯреЗрдмрд▓ ┬╖ AUR ┬╖ AppImage ┬╖ Deb ┬╖ Flatpak</td>
</tr>
<tr>
<td align="center"><b>macOS</b> <sub>x64/ia32, v12.0+</sub></td>
<td>Apple App Store ┬╖ DMG ┬╖ Homebrew</td>
</tr>
<tr>
<td align="center"><b>iOS/iPadOS</b> <sub>v15.1+</sub></td>
<td>Apple App Store ┬╖ IPA</td>
</tr>
<tr>
<td align="center"><b>Android</b> <sub>v7.0+</sub></td>
<td>Google Play Store ┬╖ APK</td>
</tr>
</table>
<br />
## рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди
рд╕рднреА рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рдкреВрд░реНрдг рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП Termix [рдбреЙрдХреНрд╕](https://docs.termix.site/install) рдкрд░ рдЬрд╛рдПрдБред
рдирдореВрдирд╛ Docker Compose рдлрд╝рд╛рдЗрд▓ (рдпрджрд┐ рдЖрдк рд░рд┐рдореЛрдЯ рдбреЗрд╕реНрдХрдЯреЙрдк рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ рддреЛ рдЖрдк `guacd` рдФрд░ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рд╣рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ):
```yaml
services:
termix:
image: ghcr.io/lukegus/termix:latest
container_name: termix
restart: unless-stopped
ports:
- "8080:8080"
volumes:
- termix-data:/app/data
environment:
PORT: "8080"
depends_on:
- guacd
networks:
- termix-net
guacd:
image: guacamole/guacd:1.6.0
container_name: guacd
restart: unless-stopped
ports:
- "4822:4822"
networks:
- termix-net
volumes:
termix-data:
driver: local
networks:
termix-net:
driver: bridge
```
<br />
## рджрд╛рди рдХрд░реЗрдВ
Termix рдореБрдлрд╝реНрдд рдФрд░ рдУрдкрди рд╕реЛрд░реНрд╕ рд╣реИ, рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдмреНрд╕рдХреНрд░рд┐рдкреНрд╢рди рдпрд╛ рдкреЗрдб рдкреНрд▓рд╛рди рдХреЗред рдпрджрд┐ рдЖрдкрдХреЛ рдпрд╣ рдЙрдкрдпреЛрдЧреА рд▓рдЧрддрд╛ рд╣реИ, рддреЛ рд╕рд░реНрд╡рд░ рд▓рд╛рдЧрдд, рдбреЛрдореЗрди рдФрд░ рд╡рд┐рдХрд╛рд╕ рд╕рдордп рдХреЛ рдХрд╡рд░ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХреЗ рд▓рд┐рдП рджрд╛рди рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рджрд╛рди SAML, Kubernetes, рдФрд░ Agent рд╕рдкреЛрд░реНрдЯ рдЬреИрд╕реА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╢реЛрдз рдФрд░ рд╕реАрдЦрдиреЗ рдореЗрдВ рд▓рдЧрдиреЗ рд╡рд╛рд▓реЗ рд╕рдордп рдХреЛ рд╡рд┐рддреНрдд рдкреЛрд╖рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рднреА рдорджрдж рдХрд░рддреЗ рд╣реИрдВред рдиреАрдЪреЗ рдкреНрд░рдЧрддрд┐ рджреЗрдЦреЗрдВ рдФрд░ рджрд╛рди рдХрд░реЗрдВред
[рджрд╛рди рдХрд░реЗрдВ](https://donate.termix.site/)
<br />
## рдкреНрд░рд╛рдпреЛрдЬрдХ
рд╡рд┐рдХрд╛рд╕ рдХреЛ рд╕рдорд░реНрдерди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдкреЗрдб рдкреНрд▓реЗрд╕рдореЗрдВрдЯ рдореЗрдВ рд░реБрдЪрд┐ рд╣реИ? [mail@termix.site](mailto:mail@termix.site) рдкрд░ рдИрдореЗрд▓ рдХрд░реЗрдВред
<div align="center">
<br />
<a href="https://www.digitalocean.com/">
<img src="https://opensource.nyc3.cdn.digitaloceanspaces.com/attribution/assets/SVG/DO_Logo_horizontal_blue.svg" height="40" alt="DigitalOcean" />
</a>
&nbsp;&nbsp;&nbsp;
<a href="https://crowdin.com/">
<img src="https://support.crowdin.com/assets/logos/core-logo/svg/crowdin-core-logo-cDark.svg" height="40" alt="Crowdin" />
</a>
&nbsp;&nbsp;&nbsp;
<a href="https://www.blacksmith.sh/">
<img src="https://cdn.prod.website-files.com/681bfb0c9a4601bc6e288ec4/683ca9e2c5186757092611b8_e8cb22127df4da0811c4120a523722d2_logo-backsmith-wordmark-light.svg" height="40" alt="Blacksmith" />
</a>
&nbsp;&nbsp;&nbsp;
<a href="https://www.cloudflare.com/">
<img src="https://sirv.sirv.com/website/screenshots/cloudflare/cloudflare-logo.png?w=300" height="40" alt="Cloudflare" />
</a>
&nbsp;&nbsp;&nbsp;
<a href="https://tailscale.com/">
<img src="https://drive.google.com/uc?export=view&id=1lIxkJuX6M23bW-2FElhT0rQieTrzaVSL" height="40" alt="Tailscale" />
</a>
&nbsp;&nbsp;&nbsp;
<a href="https://akamai.com/">
<img src="https://upload.wikimedia.org/wikipedia/commons/8/8b/Akamai_logo.svg" height="40" alt="Akamai" />
</a>
&nbsp;&nbsp;&nbsp;
<a href="https://aws.amazon.com/">
<img src="https://upload.wikimedia.org/wikipedia/commons/thumb/9/93/Amazon_Web_Services_Logo.svg/960px-Amazon_Web_Services_Logo.svg.png" height="40" alt="AWS" />
</a>
&nbsp;&nbsp;&nbsp;
<a href="https://rackgenius.com/">
<img src="https://rackgenius.com/rackgenius-logo.png" height="40" alt="Rack Genius" />
</a>
</div>
<br />
## рд╕рд╣рд╛рдпрддрд╛
рдпрджрд┐ рдЖрдкрдХреЛ рд╕рд╣рд╛рдпрддрд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ Termix рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ [рдЗрд╢реНрдпреВрдЬрд╝](https://github.com/Termix-SSH/Support/issues) рдкреЗрдЬ рдкрд░ рдЬрд╛рдПрдБ, рд▓реЙрдЧ рдЗрди рдХрд░реЗрдВ, рдФрд░ `New Issue` рджрдмрд╛рдПрдБред рдХреГрдкрдпрд╛ рдЕрдкрдиреЗ рдЗрд╢реНрдпреВ рдореЗрдВ рдпрдерд╛рд╕рдВрднрд╡ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рджреЗрдВ, рдЕрдзрд┐рдорд╛рдирддрдГ рдЕрдВрдЧреНрд░реЗрдЬрд╝реА рдореЗрдВ рд▓рд┐рдЦреЗрдВред рдЖрдк [Discord](https://discord.gg/jVQGdvHDrf) рд╕рд░реНрд╡рд░ рдореЗрдВ рднреА рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рд╣рд╛рдпрддрд╛ рдЪреИрдирд▓ рдкрд░ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдБрдХрд┐, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдордп рдЕрдзрд┐рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
<br />
## рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ
<div align="center">
<br />
[![YouTube](../repo-images/YouTube.png)](https://www.youtube.com/@TermixSSH/videos)
<sub>YouTube рдкрд░ рдЕрдкрдбреЗрдЯ рдХреА рд╕рдореАрдХреНрд╖рд╛рдПрдБ рджреЗрдЦреЗрдВ</sub>
<br />
<br />
<table>
<tr>
<td><img src="../repo-images/Image 1.png" alt="Termix Screenshot 1" width="400" /></td>
<td><img src="../repo-images/Image 2.png" alt="Termix Screenshot 2" width="400" /></td>
</tr>
<tr>
<td><img src="../repo-images/Image 3.png" alt="Termix Screenshot 3" width="400" /></td>
<td><img src="../repo-images/Image 4.png" alt="Termix Screenshot 4" width="400" /></td>
</tr>
<tr>
<td><img src="../repo-images/Image 5.png" alt="Termix Screenshot 5" width="400" /></td>
<td><img src="../repo-images/Image 6.png" alt="Termix Screenshot 6" width="400" /></td>
</tr>
<tr>
<td><img src="../repo-images/Image 7.png" alt="Termix Screenshot 7" width="400" /></td>
<td><img src="../repo-images/Image 8.png" alt="Termix Screenshot 8" width="400" /></td>
</tr>
<tr>
<td><img src="../repo-images/Image 9.png" alt="Termix Screenshot 9" width="400" /></td>
<td><img src="../repo-images/Image 10.png" alt="Termix Screenshot 10" width="400" /></td>
</tr>
<tr>
<td><img src="../repo-images/Image 11.png" alt="Termix Screenshot 11" width="400" /></td>
<td><img src="../repo-images/Image 12.png" alt="Termix Screenshot 12" width="400" /></td>
</tr>
<tr>
<td><img src="../repo-images/Image 13.png" alt="Termix Screenshot 13" width="400" /></td>
<td><img src="../repo-images/Image 14.png" alt="Termix Screenshot 14" width="400" /></td>
</tr>
<tr>
<td><img src="../repo-images/Image 15.png" alt="Termix Screenshot 15" width="400" /></td>
<td><img src="../repo-images/Image 16.png" alt="Termix Screenshot 16" width="400" /></td>
</tr>
</table>
<sub>рдХреБрдЫ рд╡реАрдбрд┐рдпреЛ рдФрд░ рдЫрд╡рд┐рдпрд╛рдБ рдкреБрд░рд╛рдиреА рд╣реЛ рд╕рдХрддреА рд╣реИрдВ рдпрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреА рд╣реИрдВред</sub>
</div>
<br />
## рдирд┐рдпреЛрдЬрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ
рд╕рднреА рдирд┐рдпреЛрдЬрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП [рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕](https://github.com/orgs/Termix-SSH/projects/5) рджреЗрдЦреЗрдВред рдпрджрд┐ рдЖрдк рдпреЛрдЧрджрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ [рдпреЛрдЧрджрд╛рди](https://github.com/Termix-SSH/Termix/blob/main/CONTRIBUTING.md) рджреЗрдЦреЗрдВред
<br />
## рд▓рд╛рдЗрд╕реЗрдВрд╕
Apache License Version 2.0 рдХреЗ рддрд╣рдд рд╡рд┐рддрд░рд┐рддред рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП `LICENSE` рджреЗрдЦреЗрдВред