https://github.com/antoniomika/sish
HTTP(S)/WS(S)/TCP Tunnels to localhost using only SSH.
https://github.com/antoniomika/sish
http https ngrok serveo ssh tcp tunnel websockets
Last synced: 17 days ago
JSON representation
HTTP(S)/WS(S)/TCP Tunnels to localhost using only SSH.
- Host: GitHub
- URL: https://github.com/antoniomika/sish
- Owner: antoniomika
- License: mit
- Created: 2019-02-15T15:36:23.000Z (over 7 years ago)
- Default Branch: main
- Last Pushed: 2025-02-23T16:05:12.000Z (over 1 year ago)
- Last Synced: 2025-02-23T17:22:17.972Z (over 1 year ago)
- Topics: http, https, ngrok, serveo, ssh, tcp, tunnel, websockets
- Language: Go
- Homepage: https://ssi.sh
- Size: 7.23 MB
- Stars: 4,132
- Watchers: 55
- Forks: 317
- Open Issues: 18
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
- stars - antoniomika/sish
- fucking-awesome-selfhosted - sish - HTTP(S)/WS(S)/TCP tunnels to localhost using only SSH (serveo/ngrok alternative). `MIT` `Go/Docker` (Software / Proxy)
- awesome-starred - antoniomika/sish - HTTP(S)/WS(S)/TCP Tunnels to localhost using only SSH. (http)
- awesome-homelab - sish
- awesome-network-stuff - **626**星
- tech-resources - sish
- awesome-selfhosted - sish - HTTP(S)/WS(S)/TCP tunnels to localhost using only SSH (serveo/ngrok alternative). `MIT` `Go/Docker` (Software / Proxy)
- awesome-selfhosted - sish - HTTP(S)/WS(S)/TCP tunnels to localhost using only SSH (serveo/ngrok alternative). `MIT` `Go/Docker` (Software / Proxy)
- awesome-selfhosted - sish - HTTP(S)/WS(S)/TCP tunnels to localhost using only SSH (serveo/ngrok alternative). `MIT` `Go/Docker` (Software / Proxy)
- awesome-selfhosted - sish - HTTP(S)/WS(S)/TCP tunnels to localhost using only SSH (serveo/ngrok alternative). `MIT` `Go/Docker` (Software / Proxy)
- awesome-selfhosted - sish - Open source serveo/ngrok alternative providing HTTP(S)/WS(S)/TCP tunnels to localhost using only SSH. `MIT` `Go` (Proxy / Booking and Scheduling)
- awesome-selfhosted123 - sish - Open source serveo/ngrok alternative providing HTTP(S)/WS(S)/TCP tunnels to localhost using only SSH. `MIT` `Go` (Proxy / Booking and Scheduling)
- awesome-selfhosted - sish - HTTP(S)/WS(S)/TCP tunnels to localhost using only SSH (serveo/ngrok alternative). `MIT` `Go/Docker` (Software / Proxy)
- awesome - sish - An open source serveo/ngrok alternative. HTTP(S)/WS(S)/TCP Tunnels to localhost using only SSH. (Go)
README
# sish
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.
- No custom client required for end users
- Public and private tunnel workflows
- Docker and binary releases
- Designed for production-grade self-hosting
[Docs](https://docs.ssi.sh) | [Managed Service](https://tuns.sh) | [Releases](https://github.com/antoniomika/sish/releases) | [Docker Images](https://hub.docker.com/r/antoniomika/sish/tags) | [Sponsored by pico.sh](https://pico.sh)
## Why sish
`sish` runs an SSH server focused on forwarding and multiplexing. Users connect
with commands they already know, and `sish` handles the routing.
### Typical use cases
- Share a local web app instantly over HTTPS
- Expose a TCP service to a fixed or random external port
- Create private TCP aliases that are only reachable through authenticated SSH
- Route TLS traffic by SNI to multiple backends without terminating TLS
## Quick Start
### 1) Try the managed service
The fastest way to validate your workflow:
```bash
ssh -R 80:localhost:8080 tuns.sh
```
This creates a public URL for your local app running on port `8080`.
### 2) Self-host with Docker
Pull image:
```bash
docker pull antoniomika/sish:latest
```
Prepare directories:
```bash
mkdir -p ~/sish/ssl ~/sish/keys ~/sish/pubkeys
cp ~/.ssh/id_ed25519.pub ~/sish/pubkeys
```
Run:
```bash
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:
```bash
ssh -p 2222 -R 80:localhost:8080 example.com
```
## Forwarding Examples
### HTTP tunnel
```bash
ssh -R myapp:80:localhost:8080 tuns.sh
```
Your app at `localhost:8080` becomes available at `https://myapp.tuns.sh`.
### TCP tunnel
```bash
ssh -R 2222:localhost:22 tuns.sh
```
`localhost:22` is available at `tuns.sh:2222`
### Private TCP alias
```bash
ssh -R mylaptop:22:localhost:22 tuns.sh
```
Access from another client:
```bash
ssh -J tuns.sh mylaptop
```
## Feature Highlights
- HTTP(S), WS(S), TCP forwarding, and multiplexing
- TCP aliases for private internal-only access patterns
- SNI proxy support for TLS-based backend routing
- Optional load balancing modes for HTTP/TCP/SNI aliases
- Service console support for inspecting forwarded requests
- Key and password authentication with dynamic key reloading
- Restrictive binding policies for safer multi-tenant setups
## Local Development
Clone:
```bash
git clone git@github.com:antoniomika/sish.git
cd sish
```
Start locally:
```bash
go run main.go --http-address localhost:3000 --domain testing.ssi.sh
```
Or use:
```bash
make dev
```
Test a tunnel:
```bash
ssh -p 2222 -R 80:localhost:8080 testing.ssi.sh
```
`testing.ssi.sh` is configured to point to localhost for development.
## Learn More
- [Getting Started](https://docs.ssi.sh/getting-started)
- [Forwarding Types](https://docs.ssi.sh/forwarding-types)
- [CLI Reference](https://docs.ssi.sh/cli)
- [FAQ](https://docs.ssi.sh/faq)
## Community
- IRC: [#sish on libera](https://web.libera.chat/#sish) / [#pico.sh on libera](https://web.libera.chat/#pico.sh)
- Email: [me@antoniomika.me](mailto:me@antoniomika.me)