Termite.SSH

SSH transport for Termite applications.

Installation

Add termite_ssh to your dependencies:

def deps do
[
{:termite_ssh, "~> 0.1.0"}
]
end

Add Termite.SSH to your application's supervision tree to start the SSH listener. Its module documentation describes the required options, session entrypoint contract, resource limits, and security considerations.

Before exposing a listener to the public Internet, review the official Erlang SSH hardening guide.

Host key

Termite.SSH requires an explicit system_dir containing server host keys such as ssh_host_rsa_key. You can generate a local key for this repo with:

mix termite.ssh.gen_host_key

That writes a key into priv/ssh, which the examples use by default. Pass --force to overwrite an existing key. Override the examples with TERMITE_SSH_SYSTEM_DIR if you want to use a different key directory.

Run the examples

These examples are all copied from the Termite application and adjusted to use the SSH adapter.

mix run examples/demo.exs
mix run examples/colors.exs
mix run examples/snake.exs
mix run examples/termite.exs

Each example starts an SSH server on localhost:2222 by default. Override with TERMITE_SSH_PORT, TERMITE_SSH_USER, TERMITE_SSH_PASSWORD, and TERMITE_SSH_SYSTEM_DIR.

The examples default to TERMITE_SSH_NO_AUTH=1. Set TERMITE_SSH_NO_AUTH=0 to require password authentication for local testing.

For resource safety, each server defaults to 100 simultaneous SSH sessions, one active channel per connection, and a five-second deadline for the Termite terminal to attach after a shell request. Override these with :max_sessions, :max_channels, and :terminal_attach_timeout when starting Termite.SSH. SFTP and other SSH subsystems are disabled.

Then connect with either:

ssh -o PreferredAuthentications=none -o PubkeyAuthentication=no -p 2222 demo@localhost
# with password auth enabled
TERMITE_SSH_NO_AUTH=0 mix run examples/demo.exs
ssh -p 2222 demo@localhost