sishc is a small daemon-first CLI for managing sish tunnels.
It keeps a config file as the source of truth, runs tunnels in the background, and exposes a web UI when enabled.
The binary is called sishc. The release image is ghcr.io/lanjelin/sishc:latest.
Docker is the easiest way to run it.
- Put your SSH key somewhere under
/config, for example/config/id_rsa. - If you already have a
config.yaml, place it at/config/config.yaml. - Start the container.
- If the config is empty, the container creates a minimal config.
- Open the web UI at
http://yourhost:5000to complete the setup.
docker run \
-e PUID=$(id -u) \
-e PGID=$(id -g) \
-v "$(pwd)/config:/config" \
-p 5000:5000 \
ghcr.io/lanjelin/sishc:latestIf you want the local sishc binary to talk to the daemon inside Docker:
export SISHC_CONFIG_FILE=/path/to/config/config.yaml
export SISHC_LOG_DIR=/path/to/config/logs
export SISHC_SOCKET=/path/to/config/sishc.sock
sishc status![]() |
![]() |
![]() |
![]() |
- keeps tunnels alive and reconnects on connection drops
- manages tunnel config through the CLI or the web UI
- supports
status,logs,add,update,remove,start,stop, andoneoff - writes per-tunnel logs with rotation
- can start the web UI from config
- quickly expose local endpoints for testing using
sishc o <port>
sishc daemon Run the tunnel daemon
sishc status, ls Show tunnel status
sishc logs Show tunnel logs
sishc validate Validate config and exit
sishc reconcile Reconcile config now
sishc add, a Add a tunnel
sishc update, u Update a tunnel
sishc remove, rm Remove a tunnel
sishc start Enable a tunnel
sishc stop Disable a tunnel
sishc oneoff, o Run a temporary tunnel
sishc init Create config interactively
Helpful flags:
--ssh-key PATH
--remote-port PORT
--remote-server HOST
--local-protocol http|https|tcp
sishc add test229 localhostUses the global local port and only overrides the host.
sishc update test229 :9090Updates only the local port. The host stays as-is.
sishc ls test229Shows one tunnel instead of the full table.
sishc logs --follow test229Follows the tunnel log live.
sishc o --local-protocol https cockpit.example.com 192.0.2.10:9090One-off HTTPS tunnel to a remote host.
Config: XDG_CONFIG_HOME/sishc/config.yaml or ~/.config/sishc/config.yaml
Logs: XDG_DATA_HOME/sishc/logs or ~/.local/share/sishc/logs
Socket: XDG_RUNTIME_DIR/sishc.sock or XDG_DATA_HOME/sishc/sishc.sock
or ~/.local/share/sishc/sishc.sock
Useful environment variables:
SISHC_CONFIG_FILESISHC_LOG_DIRSISHC_SOCKETSISHC_KNOWN_HOSTS
For the server side that sishc connects to, see:
Grab the sishc binary from GitHub Releases and put it on your PATH.
go build ./cmd/sishcgo run ./cmd/sishcThis is a Codex-assisted rewrite of the original bash+python version:



