Open source SSH tunneling for HTTP(S), WS(S), TCP, aliases, and SNI.
If you like the simplicity of serveo/ngrok-style sharing but want to use plain
SSH and run your own infrastructure, sish is built for that.
Docs | Managed Service | Releases | Docker Images | Sponsored by pico.sh
sish runs an SSH server focused on forwarding and multiplexing. Users connect
with commands they already know, and sish handles the routing.
The fastest way to validate your workflow:
ssh -R 80:localhost:8080 tuns.sh
This creates a public URL for your local app running on port 8080.
Pull image:
docker pull antoniomika/sish:latest
Prepare directories:
mkdir -p ~/sish/ssl ~/sish/keys ~/sish/pubkeys
cp ~/.ssh/id_ed25519.pub ~/sish/pubkeys
Run:
docker run -itd --name sish \
-v ~/sish/ssl:/ssl \
-v ~/sish/keys:/keys \
-v ~/sish/pubkeys:/pubkeys \
--net=host antoniomika/sish:latest \
--ssh-address=:2222 \
--http-address=:80 \
--https-address=:443 \
--https=true \
--https-certificate-directory=/ssl \
--authentication-keys-directory=/pubkeys \
--private-keys-directory=/keys \
--bind-random-ports=false \
--domain=example.com
Then connect:
ssh -p 2222 -R 80:localhost:8080 example.com
ssh -R myapp:80:localhost:8080 tuns.sh
Your app at localhost:8080 becomes available at https://myapp.tuns.sh.
ssh -R 2222:localhost:22 tuns.sh
localhost:22 is available at tuns.sh:2222
ssh -R mylaptop:22:localhost:22 tuns.sh
Access from another client:
ssh -J tuns.sh mylaptop
Clone:
git clone git@github.com:antoniomika/sish.git
cd sish
Start locally:
go run main.go --http-address localhost:3000 --domain testing.ssi.sh
Or use:
make dev
Test a tunnel:
ssh -p 2222 -R 80:localhost:8080 testing.ssi.sh
testing.ssi.sh is configured to point to localhost for development.