fleet-ssh
A browser-based SSH & SFTP fleet manager — like Termius, but it runs from a single Python command.
Install
pip install fleet-ssh
Or from a checkout:
pip install -e .
Quick Start
fleet-ssh --init-config # writes a starter servers.yaml
fleet-ssh # serves on http://localhost:7681
Then open http://localhost:7681.
By default fleet-ssh binds to 127.0.0.1 (this machine only). To reach it from
other devices on a trusted network, run fleet-ssh --host 0.0.0.0 — note this
makes every configured server reachable to anyone who can hit the port.
Configure Servers
Config lives at ~/.config/fleet-ssh/servers.yaml (override with --config or
$FLEET_SSH_CONFIG). Authenticate with a password or a private key:
servers:
- name: "My Server"
host: "192.168.1.100"
port: 22
username: "admin"
key_path: "~/.ssh/id_ed25519" # preferred
# password: "yourpassword" # or a password
# key_passphrase: "…" # if the key is encrypted
group: "Production"
tags: ["web"]
You can also add / edit / delete servers from the web UI — changes are written
back to servers.yaml. Each server keeps a stable id, so adding or removing
one never disturbs your other sessions.
Use as a library
from fleet_ssh import create_app
import uvicorn
app = create_app(config_path="servers.yaml")
uvicorn.run(app, host="127.0.0.1", port=7681)
create_app(config_path=None, poll_interval=30, cors_origins=None) returns a
standard FastAPI app you can mount, extend, or serve with any ASGI server.
Features
- SSH Terminal — full xterm.js terminal with color, resize, copy/paste
- SFTP Browser — browse, preview, download, delete files; create folders
- Multi-tab sessions — several SSH/SFTP sessions at once
- Server groups & tags — organize by environment
- Live reachability — background port checks with an up/down indicator
- Password or SSH-key auth
Security notes
- Passwords in
servers.yamlare stored in plain text — preferkey_path. - Credentials never leave the backend; the web UI is only ever sent host, port, username, group, and tags.
- Host keys are auto-accepted (
AutoAddPolicy), so run this on networks you trust. - There is no login on the web UI itself — keep the default localhost bind unless you put it behind your own auth/proxy.
Requirements
- Python 3.9+
- Installed automatically: fastapi, uvicorn, paramiko, pyyaml
Architecture
Browser (xterm.js + Fetch)
↕ WebSocket (SSH terminal)
↕ REST API (SFTP + server management)
Python Backend (FastAPI)
↕ paramiko (SSH/SFTP)
Remote SSH Servers
Metadata
Release files for fleet-ssh 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| fleet_ssh-1.0.0.tar.gz | 24.9 kB | Without provenance | Details for fleet_ssh-1.0.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| fleet_ssh-1.0.0-py3-none-any.whl | Python 3 | none | any | Details for fleet_ssh-1.0.0-py3-none-any.whl |
Total release size: 49.3 kB
Release files / fleet_ssh-1.0.0.tar.gz
| Download URL | fleet_ssh-1.0.0.tar.gz |
|---|---|
| Size | 24.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
41f7334f7ff8bc376727612f2419337c36cb59a6afa310d2dda569b56811760d
|
|
BLAKE2b-256 checksum How to use checksums |
0b6bcd203c24e9a4a54a5c574c6c5dfc0ece0528e38fb94c36bb2a1396e3b543
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.5
|
Release files / fleet_ssh-1.0.0-py3-none-any.whl
| Download URL | fleet_ssh-1.0.0-py3-none-any.whl |
|---|---|
| Size | 24.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
6db3348c977877676665607f7282cd0fd43732b669598a908444117565d577f0
|
|
BLAKE2b-256 checksum How to use checksums |
4d565cc78e734097b60f417ccddfd4b9979acc5f6d8bb4ed18d3511031ca18a2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.5
|
Security for fleet-ssh 1.0.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.