| src | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| README.md | ||
| rustfmt.toml | ||
mans
A btop-style terminal app for running an Alpine (or LOSD) server over SSH: dashboard, services, processes, connections, firewall, updates, Docker, files and a shell, in one window.
Everything goes through your normal ssh/scp and key, over one shared connection.
Nothing needs installing on the server beyond the usual Alpine tools.
Install (on your computer)
cargo install --path .
mans leserv@192.168.4.39 # or just `mans` to pick from ~/.ssh/config
Server setup (once)
-
Log in with an SSH key (
ssh-keygen -t ed25519, thenssh-copy-id you@server). -
Let mans run admin commands without a password prompt. As root, add these to the end of
/etc/doas.d/doas.conf(doas uses the last matching line, so they must come afterpermit persist :wheel). Replaceleservwith your username:permit nopass leserv as root cmd rc-service permit nopass leserv as root cmd rc-update permit nopass leserv as root cmd kill permit nopass leserv as root cmd ufw permit nopass leserv as root cmd fail2ban-client permit nopass leserv as root cmd rebootCheck with
doas -n ufw status. Without these, viewing works but those actions fail with "Authentication required". -
Optional:
- Firewall tab:
apk add ufw fail2ban - Docker tab:
addgroup leserv docker, then log in again. This user can then do anything root can.
- Firewall tab:
Logs, updates and edit-as-root open in a popup terminal where doas can ask for your
password, so they need no rule.
Keys
| Where | Keys |
|---|---|
| Everywhere | 1-9 / Alt+1-9 / F1-F9 switch tabs · / filter · g refresh · , settings · q / Alt+q quit |
| ¹overview | R reboot |
| ²services | s start · x stop · r restart · l logs · e start at boot · D don't start at boot |
| ³procs | k kill · K kill -9 |
| ⁴conns | b block the remote IP |
| ⁵firewall | o open port · b block IP · x delete rule / unban |
| ⁶updates | f check for new · U install all |
| ⁷docker | s start · x stop · r restart · l logs |
| ⁸files | Enter open · Backspace up · d download to the current folder · u upload · e edit · E edit as root |
| ⁹term / popups | every key goes to the shell · Shift+PgUp/PgDn scroll back |
Stop, kill, block, delete and unban ask y/n first (configurable). Reboot always asks.
Mouse: click a tab to switch, click a row to select it (click again to open, e.g. a folder), click a key hint in the bottom bar to run it, scroll the wheel through lists and terminal output. While the mouse is on, Shift+drag selects text in most terminals, or turn it off in settings.
Settings
Press , to change them, or edit ~/.config/mans/config:
refresh = 2 # seconds: 1, 2, 3, 5, 10
start_tab = overview
cpu_zoom = true # zoom the cpu graph to recent usage
confirm = true # ask before stop/kill/block
mouse = true # off gives your terminal its normal text selection back
default_host = # connect here when run with no argument
Limits
- Graphs only cover the time mans has been open; nothing records history on the server.
- If the SSH connection drops (for example after a reboot), restart mans.
- Colors need a 24-bit color terminal.
AI Warning
This project was facilitated with Claude Code. If you have a problem with that, you can shove it up your ass, or if your a respectable human, open an issue.