Make SSH apps, just like that! 💫
SSH is an excellent platform to build remotely accessible applications on. It offers secure communication without the hassle of HTTPS certificates, it has user identification with SSH keys and it's accessible from anywhere with a terminal. Powerful protocols like Git work over SSH and you can even render TUIs directly over an SSH connection.
Wish is an SSH server with sensible defaults and a collection of middleware that makes building SSH apps easy. Wish is built on gliderlabs/ssh and should be easy to integrate into any existing projects.
The bubbletea
middleware makes it easy to serve any
Bubble Tea application over SSH. Each SSH session will get their own
tea.Program
with the SSH pty input and output connected. Client window
dimension and resize messages are also natively handled by the tea.Program
.
You can see a demo of the Wish middleware in action at: ssh git.charm.sh
The git
middleware adds git
server functionality to any ssh server.
It supports repo creation on initial push and custom public key based auth.
This middleware requires that git
is installed on the server.
The logging
middleware provides basic connection logging. Connects
are logged with the remote address, invoked command, TERM setting, window
dimensions and if the auth was public key based. Disconnect will log the remote
address and connection duration.
Not all applications will support general SSH connections. To restrict access
to supported methods, you can use the activeterm
middleware to
only allow connections with active terminals connected and the
accesscontrol
middleware that lets you specify allowed
commands.
Wish includes the ability to easily create an always authenticating default SSH server with automatic server key generation.
There are examples for a standalone Bubble Tea application and Git server in the examples folder.
When building various Wish applications locally you can add the following to
your ~/.ssh/config
to avoid having to clear out localhost
entries in your
~/.ssh/known_hosts
file:
Host localhost
UserKnownHostsFile /dev/null
Part of Charm.
Charm热爱开源 • Charm loves open source