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
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 | |
|---|---|---|---|
| fleet_ssh-1.0.0.tar.gz | 24.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| fleet_ssh-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
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
|