MCPcopy Index your code
hub / github.com/blacknon/lssh

github.com/blacknon/lssh @v0.10.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.10.0 ↗ · + Follow
2,796 symbols 9,068 edges 325 files 288 documented · 10%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Go Report Card Version Go Platforms License

lssh

ls + ssh = lssh

lssh is a terminal-native remote access suite for SSH workflows, cloud inventories, and provider-backed connectors.

It lets you select hosts from OpenSSH config, lssh config, or provider inventories, then operate them through native SSH or connector backends such as AWS SSM, EC2 Instance Connect Endpoint, WinRM, Telnet, and custom providers.

Use it for interactive shells, parallel commands, mux workspaces, file transfer, sync, mount, and monitoring. Connector-backed hosts expose only the operations their connector supports.

  • works with your existing SSH config
  • interactive host selection
  • parallel command execution

Install

Homebrew

brew install blacknon/lssh/lssh

Go

go install github.com/blacknon/lssh/cmd/lssh@latest

Provider-backed inventory and connector features use separate provider executables. If you install only cmd/lssh, those provider binaries are not installed automatically.

For local development, install the bundled providers with:

mise run provider_install

For release builds, either install the all-in-one lssh-complete_* archive or add the matching lssh-providers_* archive from GitHub Releases.

For more installation details, including other options and platform-specific notes, see docs/install.md.

Quick start

Already using ~/.ssh/config?

Just run:

lssh

Want to generate an lssh config from your existing SSH config?

lssh --generate-lssh-conf > ~/.lssh.toml

Basic workflow

lssh is built for a simple workflow:

  1. list hosts from SSH config
  2. pick one or more hosts
  3. open a shell or run a command

Examples

lssh host picker Interactive host picker
lssh
Select one or more hosts from the TUI.
lssh parallel command execution Parallel command execution
lssh -p tail -f /var/log/syslog
Pick hosts and run the same command across them.
lssh mux workflow Mux workflow
lssh -P
Open the multi-pane terminal workflow.
lssh mux workflow with command Mux workflow with command
lssh -P 'htop'
Start the mux UI and launch a command immediately.

You can still target a single host directly when you already know where to connect:

lssh -H my-server

For more details about config formats and settings, see cmd/lssh/README.md.

Demo

Want to try lssh quickly with a ready-to-run local playground? Start with demo/README.md. For the telnet connector + multi-hop provider flow, use demo-telnet-provider/README.md.

OpenSSH config and lssh config

lssh supports both your existing OpenSSH config and its own config format.

If you want to get started quickly, you can keep using ~/.ssh/config as-is. If you want richer host metadata and workflow-oriented settings, you can move to an lssh config instead.

You can also generate an lssh config from your existing SSH config:

lssh --generate-lssh-conf > ~/.lssh.toml

Even after moving to lssh config, you can still point it at your existing OpenSSH config and load hosts from there:

[sshconfig.default]
path = "~/.ssh/config"

For more details about config formats and settings, see docs/configuration.md.

Providers

lssh can work with more than static SSH config entries. Providers let it pull hosts from external inventory sources, resolve secrets just before connect, and use non-SSH connection backends such as cloud-managed connectors.

In v0.10.0, provider-backed inventory and secret workflows are best treated as beta. Connector-backed access beyond native SSH is still experimental, especially for cloud-managed runtimes and non-SSH backends.

If you want to try provider-oriented flows locally, start from these demos:

  • demo/README.md: core SSH, proxy chains, and general multi-host workflow examples
  • demo-telnet-provider/README.md: provider-managed telnet connector flow, including direct telnet access and telnet behind a double SSH hop

For the provider architecture and protocol overview, start with provider/README.md. Category details are also documented under inventory, connector, secret, and mixed.

Bundled providers

These provider implementations are currently bundled in this repository.

Inventory

provider-inventory-proxmox Build host entries from Proxmox inventory.

Connector

provider-connector-openssh Use OpenSSH-compatible connection handling as a provider-backed connector. provider-connector-telnet Reach telnet targets through the connector interface. provider-connector-winrm Run command execution workflows against WinRM targets. Interactive shell support is not available in v0.10.0.

Mixed

provider-mixed-aws-ec2 Combine EC2 inventory with AWS SSM and EC2 Instance Connect Endpoint connectors. Native SSH-adjacent flows are usable, while connector-specific behavior remains experimental. provider-mixed-azure-compute Build Azure Compute inventory with connector-aware access settings. provider-mixed-gcp-compute Build Google Compute Engine inventory with connector-aware access settings.

Secret

provider-secret-bitwarden Resolve secret references from [Bitwarden](https://bitwarden.com/). provider-secret-onepassword Resolve secret references from [1Password](https://1password.com/). provider-secret-custom-script Resolve secret references through custom local scripts.
provider-secret-os-keychain Resolve secret references from the local OS keychain.

Tools in the lssh suite

The lssh project includes multiple tools for SSH-centered workflows.

lssh preview lssh core / stable Interactive SSH access, parallel commands, and forwarding modes. lscp preview lscp transfer / stable SCP-style copy over SSH/SFTP, including remote-to-remote transfers. lsftp preview lsftp transfer / stable Interactive SFTP shell for browsing and transferring files.
lsshell preview lsshell sysadmin / beta Parallel interactive shell with broadcast and targeted commands. lsmux preview lsmux sysadmin / beta Pane-based SSH workspace for multi-host terminal workflows. lsmon preview lsmon monitor / beta Multi-host monitoring UI over SSH without extra remote agents.
lssync preview lssync transfer / beta Tree sync over SSH/SFTP with daemon and bidirectional modes. lsdiff preview lsdiff sysadmin / beta Compare remote files from multiple hosts in a synchronized TUI. lspipe preview lspipe sysadmin / alpha Persistent host sessions reusable from local pipelines and automation.
lsshfs transfer / beta Mount a remote directory through `FUSE on Linux` or `NFS on macOS`.

Docs

Related projects

  • go-sshlib: Go library for SSH connections, command execution, and interactive shells
  • tvxterm: tvxterm provides terminal widgets for tview
  • boco: Bash Shell Function's Fuzzy Finder.

Alternatives

If you are evaluating lssh, these projects are also worth a look. They overlap with parts of the suite, but each usually covers a narrower slice of the overall workflow.

Project Closest lssh command(s) Main focus How it differs from lssh
sshs lssh TUI-based SSH host picker Similar in spirit to a focused host picker, but lssh also covers parallel execution, forwarding, mux workflows, and provider/connector-b

Extension points exported contracts — how you extend this code

Node (Interface)
Node represents a line in a Config. [3 implementers]
internal/ssh_config/config.go
StreamSession (Interface)
(no doc) [3 implementers]
internal/connectorruntime/session.go
FileSystem (Interface)
(no doc) [3 implementers]
internal/sync/filesystem.go
SessionFactory (FuncType)
SessionFactory creates remote sessions for panes.
internal/mux/remote.go
FileInfo (Interface)
(no doc)
internal/sftp/common.go
Dialer (Interface)
(no doc) [1 implementers]
internal/connectorruntime/provider.go
Executor (Interface)
(no doc) [1 implementers]
internal/connectorruntime/provider.go
InteractiveSession (Interface)
(no doc) [1 implementers]
internal/connectorruntime/session.go

Core symbols most depended-on inside this repo

Join
called by 364
internal/sync/filesystem.go
Close
called by 344
internal/lsshfs/runner.go
String
called by 159
internal/ssh_config/config.go
String
called by 128
providerapi/common.go
Run
called by 111
internal/connectorruntime/session.go
WriteErrorResponse
called by 76
providerapi/common.go
Wait
called by 74
internal/lspipe/daemon.go
Stat
called by 68
internal/sync/filesystem.go

Shape

Function 1,489
Method 985
Struct 295
Interface 11
TypeAlias 11
FuncType 5

Languages

Go100%

Modules by API surface

provider/mixed/provider-mixed-aws-ec2/ssmsession/session.go73 symbols
internal/config/provider.go63 symbols
internal/ssh_config/config.go61 symbols
provider/mixed/provider-mixed-azure-compute/main.go52 symbols
internal/mux/layout.go51 symbols
internal/sync/filesystem.go50 symbols
internal/lspipe/daemon.go44 symbols
provider/mixed/provider-mixed-gcp-compute/iapconnector/iapconnector.go40 symbols
internal/monitor/node.go40 symbols
internal/lsshfs/sftp_mount_unix.go39 symbols
internal/config/match.go38 symbols
internal/mux/remote.go36 symbols

For agents

$ claude mcp add lssh \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact