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 shortcuts —
Ctrl+,/⌘+,settings; browser-reserved tab and omnibox shortcuts remain native - 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. New user allowlist entries and disable/re-enable changes apply immediately without restarting Torrus; disabling a user revokes known LDAP cookies and closes that user's active SSH tabs. 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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file torrus-0.2.43.tar.gz.
File metadata
- Download URL: torrus-0.2.43.tar.gz
- Upload date:
- Size: 683.0 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fbb8c4f68ad30cec8160690046567d39d87d2cecd7543a9f241d5ffaeb6cca23
|
|
| MD5 |
50bed94a9e1e1965ec7c2729e269abb6
|
|
| BLAKE2b-256 |
95af44642073e4cc254c4af4f64299c82354b11dd12596e82489b29ce099b016
|
File details
Details for the file torrus-0.2.43-py3-none-any.whl.
File metadata
- Download URL: torrus-0.2.43-py3-none-any.whl
- Upload date:
- Size: 663.4 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8d92045537b5b556e306b360383dfc41998b37f4322519b92d262fb97ec1a9c3
|
|
| MD5 |
ffbe5a532f76199489e68df544c50186
|
|
| BLAKE2b-256 |
a9a1d5f47df06ba091748719e53273323a2614d4090f7ab86c0b5b8ba0fa11cb
|