Skip to main content

Torrus

Torrus

A web-based SSH terminal that works behind any reverse proxy. Install it, run it, use it.

Features

  • Web-based SSH terminal with full xterm.js emulation
  • SFTP file browser — upload, download, rename, delete files directly from the browser
  • Multi-tab support — open multiple SSH sessions side by side, close all at once
  • Tab management — right-click to rename, clone, duplicate, or save a tab as a session
  • Keyboard shortcutsCtrl+T new tab, Ctrl+W close tab, Ctrl+Tab cycle tabs, Ctrl+, settings
  • Saved servers — save, edit, import, and export connection configs
  • Works behind reverse proxies — uses Socket.IO for reliable transport
  • Session sidebar — quick-connect to saved servers
  • Admin console — LDAP-admin session inventory, owner-bound controls, and submitted-input activity view
  • LDAP/AD authentication — optional, via ldapgate

Install

pip install torrus

Usage

torrus serve

Opens the terminal in your browser. Connect to any SSH server from there.

Options:

--host TEXT          Bind host. [default: 127.0.0.1]
--port INTEGER       Bind port. [default: 8080]
--no-browser         Don't open the browser automatically.
--ldap-config PATH   Path to ldapgate YAML config to enable LDAP authentication.

LDAP Authentication

Torrus can require users to log in via LDAP/AD before accessing the terminal. This uses ldapgate as FastAPI middleware — no separate proxy process needed.

pip install 'torrus[ldap]'
torrus serve --ldap-config /path/to/ldapgate.yaml

When LDAP is enabled, a logout button and (for configured admins) an admin console button appear in the top-right corner of the tab bar.

Set TORRUS_ADMIN_USERS to a comma-separated list of LDAP usernames allowed to use the console:

TORRUS_ADMIN_USERS=alice,bob torrus serve --ldap-config /path/to/ldapgate.yaml

Session controls use immutable session identity plus generation checks. User allowlist changes are queued for restart; disabling a user revokes known LDAP cookies and closes that user's active SSH tabs first. Policy mutation requires LDAPGate user-wide revocation support (0.1.22+); older deployments fail closed without changing policy.

Terminal input audit

LDAP deployments persist completed command lines after Enter, not raw keystrokes or terminal output. Pasted multiline input is split into submitted lines; the Admin Console's Submitted input table preserves embedded line breaks, wraps long values, and lets an admin expand truncated previews. Inputs entered after a detected password/passphrase/token prompt, plus command lines containing inline credential flags or assignments, are stored only as a [redacted sensitive input] marker. The password supplied while opening an SSH connection is never recorded. Audit data is stored at ~/.local/share/torrus/audit.db by default (or TORRUS_AUDIT_DB when set).

torrus audit show --user alice
torrus audit purge --older-than 90

audit show escapes control characters so viewing an event cannot replay its terminal escape sequences. Command text can still contain secrets that do not match the sensitive-input detector; restrict access to the audit database.

The Admin Console's Submitted input view displays completed command events to authorized admins; sensitive events show only their redaction marker.

Development

Requires uv.

git clone https://github.com/anudeepd/torrus
cd torrus
uv sync
make dev

License

MIT

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

torrus-0.2.28.tar.gz (679.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

torrus-0.2.28-py3-none-any.whl (653.7 kB view details)

Uploaded Python 3

File details

Details for the file torrus-0.2.28.tar.gz.

File metadata

  • Download URL: torrus-0.2.28.tar.gz
  • Upload date:
  • Size: 679.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.23 {"installer":{"name":"uv","version":"0.11.23","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Fedora Linux","version":"44","id":"","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for torrus-0.2.28.tar.gz
Algorithm Hash digest
SHA256 a45aa1af3ca6b83b395e457ca1c38012af637719250886f770e295be63605222
MD5 dae59d9c9e8b37b6602601d73b85a3f7
BLAKE2b-256 c9bd8cea080174545a835cb81251c7abd45090526d7148504abe25a7fa6b503f

See more details on using hashes here.

File details

Details for the file torrus-0.2.28-py3-none-any.whl.

File metadata

  • Download URL: torrus-0.2.28-py3-none-any.whl
  • Upload date:
  • Size: 653.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.23 {"installer":{"name":"uv","version":"0.11.23","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Fedora Linux","version":"44","id":"","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for torrus-0.2.28-py3-none-any.whl
Algorithm Hash digest
SHA256 e884eba483e343eeb2256fc5c8a1da8f6b830eaa45be73f7366bb52927cd8f81
MD5 218cb2a4df8de4543b111ad405a7bf67
BLAKE2b-256 c28acd5ecaf1451f8268b1f1e9c3d710d58286bd12e4c08e561b21b4a063dbbb

See more details on using hashes here.

Release history Release notifications | RSS feed

0.2.43

2 files

0.2.42

2 files

0.2.41

2 files

0.2.40

2 files

0.2.39

2 files

0.2.38

2 files

0.2.37

2 files

0.2.36

2 files

0.2.35

2 files

0.2.34

2 files

0.2.33

2 files

0.2.32

2 files

0.2.31

2 files

0.2.30

2 files

0.2.29

2 files

This release

0.2.28 This release

2 files

0.2.27

2 files

0.2.26

2 files

0.2.25

2 files

0.2.24

2 files

0.2.23

2 files

0.2.22

2 files

0.2.21

2 files

0.2.20

2 files

0.2.19

2 files

0.2.18

2 files

0.2.17

2 files

0.2.16

2 files

0.2.15

2 files

0.2.14

2 files

0.2.13

2 files

0.2.12

2 files

0.2.11

2 files

0.2.10

2 files

0.2.9

2 files

0.2.8

2 files

0.2.7

2 files

0.2.6

2 files

0.2.5

2 files

0.2.4

2 files

0.2.3

2 files

0.2.2

2 files

0.2.1

2 files

0.2.0

2 files

0.1.42

2 files

0.1.41

2 files

0.1.40

2 files

0.1.39

2 files

0.1.38

2 files

0.1.37

2 files

0.1.36

2 files

0.1.35

2 files

0.1.34

2 files

0.1.33

2 files

0.1.32

2 files

0.1.31

2 files

0.1.30

2 files

0.1.29

2 files

0.1.28

2 files

0.1.27

2 files

0.1.26

2 files

0.1.25

2 files

0.1.24

2 files

0.1.23

2 files

0.1.22

2 files

0.1.21

2 files

0.1.20

2 files

0.1.19

2 files

0.1.18

2 files

0.1.17

2 files

0.1.16

2 files

0.1.15

2 files

0.1.14

2 files

0.1.13

2 files

0.1.12

2 files

0.1.11

2 files

0.1.10

2 files

0.1.9

2 files

0.1.8

2 files

0.1.7

2 files

0.1.6

2 files

0.1.5

2 files

0.1.4

2 files

0.1.3

2 files

0.1.2

2 files

0.1.1

2 files

0.1.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page