https://github.com/lfaoro/ssm
Streamline SSH connections with a simple Terminal UI
https://github.com/lfaoro/ssm
bubbletea cli go golang mosh rsync sftp ssh sshpass sshpasss tui
Last synced: 19 days ago
JSON representation
Streamline SSH connections with a simple Terminal UI
- Host: GitHub
- URL: https://github.com/lfaoro/ssm
- Owner: lfaoro
- License: bsd-3-clause
- Created: 2025-04-12T11:02:50.000Z (8 months ago)
- Default Branch: main
- Last Pushed: 2025-07-28T16:48:53.000Z (5 months ago)
- Last Synced: 2025-07-28T18:41:23.645Z (5 months ago)
- Topics: bubbletea, cli, go, golang, mosh, rsync, sftp, ssh, sshpass, sshpasss, tui
- Language: Go
- Homepage:
- Size: 1.03 MB
- Stars: 85
- Watchers: 2
- Forks: 5
- Open Issues: 9
-
Metadata Files:
- Readme: readme.md
- Changelog: changelog.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Authors: authors
Awesome Lists containing this project
- awesome-cli-apps-in-a-csv - ssm - SSH connection manager designed to connect, filter, tag, and much more from a simple terminal interface. (<a name="networking"></a>Networking)
- awesome-cli-apps - ssm - SSH connection manager designed to connect, filter, tag, and much more from a simple terminal interface. (<a name="networking"></a>Networking)
README
# Secure Shell Manager
> Streamline SSH connections with a simple Terminal UI
[![version][version-badge]](changelog.md)
[![license][license-badge]](license)
[](https://goreportcard.com/report/github.com/lfaoro/ssm)
[![follow on x][x-badge]](https://x.com/intent/follow?screen_name=leonardofaoro)
[version-badge]: https://img.shields.io/badge/version-0.4.0-blue.svg
[license-badge]: https://img.shields.io/badge/license-BSD3-blue
[x-badge]: https://img.shields.io/twitter/follow/leonardofaoro?label=follow&style=social
Scratching my own itch: `ssm` is an SSH connection manager designed to connect, filter, tag, and much more from a simple terminal interface. Works on top of installed command-line programs and does not require any setup on remote systems.
**tl;dr** - [Install](#Install)
See [HELP](data/help) for CLI flags. \
See [CHANGELOG](changelog.md) for dev info.

## Features
- vim keys: jkhl, ctrl+d/u, g/G
- emacs keys: ctrl+p/n/b/f
- `ctrl+r` run commands without spawning a TTY
- `ctrl+e` edit the loaded config
- config will automatically reload on change
- `ctrl+v` show config next to servers
- filter through all your servers: /
- switch between SSH and MOSH with TAB
- CLI short-flags support e.g. `ssm -seo` enables `--show`, `--exit`, and `--order`
- group servers using tags e.g. `#tag: admin`
- show only admin tagged servers `ssm admin`
- use `#tagorder` key to prioritize tagged hosts in list-view
- use `--theme` to change color scheme
- edit [themes.go](pkg/tui/themes.go) to add more
## Keys
```
connect to selected host
edit ssh config
show all config params in sideview
run commands on host w/o starting a tty
switch between SSH/MOSH
< / > filter hosts
quit
# under development (coming soon)
ctrl+s sftp upload/download files to/from server
ctrl+g port-forwarding UI
space␣ select multiple hosts to interact with
```
## Quickstart
> If you're not accustomed to ssh config start here otherwise skip to [Install](#install)
- [SSH config manual](https://man.openbsd.org/ssh_config.5)
```bash
# backup any existing config
[ -f ~/.ssh/config ] && cp ~/.ssh/config ~/.ssh/config.bak
# create ssh config
cat <>~/.ssh/config
# This is an example config for SSH
#tagorder is a key used to prioritize #tag: hosts in list-view
Host hostname1
#tag: tagValue1,tagValue2,tagValueN
User user
HostName hello.world
Port 2222
IdentityFile ~/.ssh/id_rsa
Host segfault.net
#tag: research
User root
HostName segfault.net
Host terminalcoffee
#tag: shops
User adam
HostName terminal.shop
EOF
# file must have 600 perms for security
chmod 600 ~/.ssh/config
```
## Install
Download `ssm` binary from [releases](https://github.com/lfaoro/ssm/releases)
> available for [Linux, MacOS, FreeBSD, NetBSD, OpenBSD, Solaris] \
> on [x86_64, i386, arm64, arm] architectures,
_need more? just ask_
```bash
# verify the binary is signed with my key
gpg --verify ssm_sig ssm
```
```bash
# bash script install for linux|macos|freebsd|netbsd|openbsd|solaris
curl -sSL https://github.com/lfaoro/ssm/raw/main/scripts/get.sh | bash
wget -qO- https://github.com/lfaoro/ssm/raw/main/scripts/get.sh | bash
# we don't pay Apple for a signing key, therefore you might need to run
xattr -d com.apple.quarantine ssm # on MacOS
# brew tap for macos/linux
brew install lfaoro/tap/ssm
```
## Build
> requires [Go](https://go.dev/doc/install)
```bash
# bootstrap
go install github.com/lfaoro/ssm@latest
# build
git clone https://github.com/lfaoro/ssm.git \
&& cd ssm \
&& make \
&& bin/ssm
# build from sr.ht mirror
git clone https://git.sr.ht/~faoro/ssm \
&& cd ssm \
&& make \
&& bin/ssm
make clean
# clean everything even caches
make distclean
```
## Help
- [SSH config example](data/config_example)
- [message me on Telegram](https://t.me/leonarth)
- [tag me on X](https://x.com/leonardofaoro)
## Contributors
[See all](https://github.com/lfaoro/ssm/graphs/contributors)
Pull requests are very welcome and will be merged. \
Report a bug or request a new feature, feel free to open a [new issue](https://github.com/lfaoro/ssm/issues).
## Show support
> If `ssm` is useful to you, please consider giving it a ⭐.
- **star the repo**
- **tell your friends**
- [GitHub sponsor](https://github.com/sponsors/lfaoro)
- [BTC sponsor](https://mempool.space/address/bc1qzaqeqwklaq86uz8h2lww87qwfpnyh9fveyh3hs)
- [XMR sponsor](https://xmrchain.net/search?value=89XCyahmZiQgcVwjrSZTcJepPqCxZgMqwbABvzPKVpzC7gi8URDme8H6UThpCqX69y5i1aA81AKq57Wynjovy7g4K9MeY5c)
- [FIAT sponsor](https://checkout.revolut.com/pay/1122870b-1836-42e7-942b-90a99ef5e457)