sish 3.0.5 介绍与选型指南

sish 3.0.5 介绍与选型指南:定位、架构、功能特性、快速开始与 ngrok/frp/bore/rathole/Cloudflare Tunnel 量化对比,信息溯源自官方仓库与发布件(检索日期 2026-10-26)。

sishsish内网穿透2026/10/26

sish 3.0.5 介绍与选型指南

目标:说清 sish 是什么、能解决什么问题、与 ngrok/frp/bore/rathole/Cloudflare Tunnel 相比如何选型。本文为认知篇,全部信息溯源自 sish 官方仓库与官方发布件(GitHub antoniomika/sish、docs.ssi.sh、shields.io),检索日期 2026-10-26;文中版本、星数、许可、发布时间均为当日实查结果。

一、环境信息

本篇为联网溯源认知篇,不含本地部署实测;溯源对象与当日实查结果如下:

  • 溯源日期:2026-10-26
  • 软件:sish(GitHub:antoniomika/sish)
  • 最新稳定版:v3.0.5,发布时间 2026-10-25T15:58:51Z(GitHub Releases releases/latest 实查)
  • 开发语言与许可:Go 语言编写,MIT License(Copyright (c) 2019 Antonio Mika,v3.0.5 发布件内 LICENSE 文件实查)
  • GitHub 星数:4.8k(shields.io 星数徽章实查,2026-10-26)
  • 官方文档站:docs.ssi.sh
  • 官方托管服务:tuns.sh(由 sish 赞助方 pico.sh 运营)
  • 发布件形态:官方提供 linux-amd64/linux-arm64/linux-armv6/darwin-amd64/darwin-arm64/windows-amd64/windows-arm64 共 7 个平台的压缩包与 checksums.txt(v3.0.5 Releases 资产清单实查)

💡 说明:sish 名字来自 "SSH" 的变体拼写,定位是「用你已有的 ssh 客户端就能建隧道的自托管服务端」。它与 serveo.net、tuns.sh 同属「SSH 即隧道」流派,区别在于 sish 完全开源自托管,serveo 是公共免费服务,tuns.sh 是 sish 作者同一生态下的托管版。

二、软件概述

sish 是一个用 Go 编写的开源 SSH 服务端,它把传统 SSH 服务器的「远程端口转发」能力做成了一个多租户隧道服务:用户用系统自带的 ssh 客户端连接 sish,通过一条 -R 反向转发参数,就能把内网里的 HTTP、WebSocket 或 TCP 服务暴露到公网,或建立一个仅自己可达的私有跳板。官方 README 对它的定义原文是:

"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."(antoniomika/sish README,2026-10-26 检索)

这段话点出了 sish 的三个关键词:开源(服务端完全开源,可部署在自己服务器上)、纯 SSH 客户端(终端用户零安装,不下载任何专用客户端)、自托管(数据与域名完全掌控在自己手里)。

sish 由 Antonio Mika 于 2019 年开始维护,目前由 pico.sh 赞助,与 pico.sh 生态的 tuns.sh 托管服务同源。项目更新活跃:本次溯源当日(2026-10-26)的前一天(2026-10-25)刚发布 v3.0.5,版本节奏稳定。

与「HTTP 反向代理 + 域名解析」这类穿透方案不同,sish 的所有隧道都从一条 SSH 连接里复用出来:认证、转发、多路复用全部走 SSH 协议,HTTP 与 TCP 的流量只在服务端出口处分流。这带来两个直接好处:一是客户端侧零依赖(任何能 ssh 的设备都能建隧道),二是防火墙只需放行 sish 服务端的一个 SSH 端口与一组出口端口。

三、核心架构

依据官方 README 与发布件文档(2026-10-26 检索),sish 的架构可以从「一条 SSH 连接、三类转发出口」来理解:

3.1 SSH 接入层

sish 本质是一个定制的 SSH 服务端(基于 Go 的 SSH 库实现),监听 --ssh-address(默认 localhost:2222)。客户端用标准 ssh 命令连入后,不进入 shell,而是通过 SSH 协议的远程转发(remote forwarding)通道声明隧道意图。sish 在这条 SSH 连接上支持:

  • 密码认证与公钥认证,公钥目录带文件监听、动态增删即时生效;
  • 连接保活与空闲回收(ping-client、cleanup-unauthed 等机制);
  • 每条 SSH 连接可携带多条转发请求(一次登录同时建 HTTP 隧道与 TCP 隧道)。

3.2 HTTP(S) 多路复用层

HTTP 转发的流量进入 sish 的 HTTP 监听(--http-address,默认 localhost:80),sish 按「子域名」做虚拟主机路由:客户端请求 -R 80:localhost:8080,sish 分配或确认一个子域名(如 myapp.example.com),之后所有携带该 Host 的请求都被复用到对应的 SSH 通道、再转回客户端侧的 localhost:8080。同一台 sish 的一个 HTTP 端口可以同时承载成百上千个不同子域名的隧道,这就是「端口复用」的含义。该层同时覆盖 WebSocket(WS/WSS),并支持 HTTPS(证书目录挂载或 Let's Encrypt 按需签发)、SNI 代理、强制跳转 HTTPS 等选项。

3.3 TCP 转发与别名层

TCP 转发把客户端内网的任意 TCP 服务映射到 sish 服务器的一个出口端口(--port-bind-range 控制可分配范围,--bind-random-ports 决定是否内核随机分配)。TCP 别名(--tcp-aliases)则提供另一种访问姿势:不给隧道分配公网端口,而是给一个别名,其他用户通过「以 sish 为跳板(ProxyJump)再连别名」的方式访问,流量不出 sish 的 SSH 端口,适合数据库、内网 SSH 这类不想暴露公网的私有服务。

3.4 管理与可观测

sish 内置两套控制台(官方 README "Feature Highlights"):admin console(管理员全局视角,按 token 鉴权)与 service console(每个隧道一个,回放最近请求)。此外支持 proxy protocol 透传真实客户端 IP、按国家/IP 黑白名单过滤(可配 geodb)、日志落盘轮转等运维能力。

💡 技术拓展:内网穿透的「路由识别」常见三类做法——按端口区分(每个隧道占一个公网端口,frp/bore/rathole 的经典做法)、按域名 Host 头区分(所有隧道共享一个 HTTP 端口,sish 与 ngrok 的 HTTP 模式做法)、按 SNI 区分(TLS 不解密直接转发,sish 的 sni-proxy 与 Cloudflare Tunnel 的部分模式)。sish 三者都实现了:HTTP 隧道走 Host 路由共享 80/443,TCP 隧道走端口分配,TLS 场景可开 SNI 代理。本文所述 sish 的主力形态是 Host 路由 + 端口分配的组合。

四、功能特性

以下特性清单逐条对照官方 README "Feature Highlights" 与 v3.0.5 命令行参数表(sish --help,随发布件分发,2026-10-26 检索)整理:

  • HTTP(S)、WS(S)、TCP 转发与多路复用:一条 SSH 连接承载多条隧道,HTTP 层按子域名路由、端口全局复用;
  • TCP 别名:私有内网访问模式,别名仅能通过 sish 的 SSH 端口以跳板方式访问,不暴露公网端口;
  • SNI 代理:不解密 TLS、按 SNI 路由到多个后端;
  • 负载均衡:HTTP、TCP、SNI、别名四类监听均可开启多客户端绑定同一入口的负载均衡模式(http-load-balancer、tcp-load-balancer、sni-load-balancer、alias-load-balancer);
  • 认证与动态密钥:密码认证、公钥认证、外部认证 URL(公钥/密码可交给远端 HTTP 服务裁决),公钥目录变更 200ms 内自动重载;
  • 多租户绑定策略:随机/固定子域名与端口、强制请求生效、保留子域名黑名单(默认封 localhost)、别名策略、用户名追加进子域名(多租户隔离);
  • 访问控制:IP/国家黑白名单(可启 geodb 校验),作用于 HTTP、TCP、SSH 三类连接;
  • 请求观测:admin console 与 service console 回放请求,可把 HTTP/TCP 请求日志回传客户端(log-to-client);
  • HTTPS 证书:证书目录挂载(支持多 crt/key 对、目录监听热加载)与 Let's Encrypt 按需签发两种路径;
  • 生产运维项:proxy protocol v1/v2 透传、连接空闲超时、客户端 ping 保活、日志轮转(大小/数量/天数可控)、自定义欢迎语与时间格式。

💡 说明:sish 的版本号在 v3.x 有一次较大的配置体系重构(v3.0.0 起引入 viper 统一配置:命令行参数、SISH_ 前缀环境变量、config.yml 三种途径等价生效)。网上大量教程基于 v2.x 的参数默认值,与 v3.x 存在差异(例如 v3 起认证默认开启),查资料时注意版本对应。

五、快速开始(最小可用示例)

最快的体验路径是官方托管服务(无需自建,来自官方 README "Quick Start",2026-10-26 检索)。在本机起一个 8080 端口的 Web 应用后,执行:

ssh -R 80:localhost:8080 tuns.sh

官方 README 对该命令的说明是:这会为本地 8080 端口的应用创建一个公开 URL(形如 https://xxxx.tuns.sh),浏览器访问该 URL 即可打开本地应用。整个过程不需要注册、不需要下载任何客户端——这正是 sish 流派的核心体验。

若要走自托管路径,官方 README 给出的标准形态是「在一台有公网 IP 与域名的服务器上运行 sish 服务端,客户端用 ssh 连入」,核心参数为 --ssh-address(SSH 接入端口)、--http-address(HTTP 出口端口)、--domain(子域名路由的根域名)。完整的从零安装、systemd 托管、认证配置与隧道闭环验证,见本专栏部署篇;此处不展开。

隧道的三类典型命令形态(均来自官方 README "Forwarding Examples",2026-10-26 检索):

# HTTP 隧道:本地 8080 映射为 myapp.<domain> 子域名(官方示例用托管服务演示)
ssh -R myapp:80:localhost:8080 tuns.sh

# TCP 隧道:本地 22 端口映射到服务器 2222 出口端口
ssh -R 2222:localhost:22 tuns.sh

# 私有 TCP 别名:绑定别名 mylaptop,他人经跳板访问(官方示例)
ssh -R mylaptop:22:localhost:22 tuns.sh
ssh -J tuns.sh mylaptop

六、适用场景与限制

6.1 适用场景

  • 向客户/同事临时演示本地开发中的应用:一条 ssh 命令得到公网 HTTPS 子域名,手机可直接访问,无需部署;
  • 给自托管服务一个公网入口:家庭宽带/NAT 后的 NAS、监控、面板等,用固定子域名绑定(--bind-random-subdomains=false + 请求式子域名)长期暴露;
  • 私有服务的跳板访问:数据库、内网 SSH 用 TCP 别名,只有持有 SSH 凭据的人能通过 sish 跳板连入,不开放公网端口;
  • 多后端分流:SNI 代理按域名把 TLS 流量分发到多个内网后端,不解密不落证书;
  • 多租户隧道平台:团队/对外提供 ngrok 式服务,认证、黑白名单、子域名策略、console 观测齐备。

6.2 限制(据官方仓库与发布件信息归纳,2026-10-26)

  • 需要一台有公网 IP 的服务器与域名:HTTP 子域名路由依赖「泛域名解析到 sish 服务器」这一前置(自托管路径的服务端前置),没有域名只能走 TCP 出口端口形态;
  • 单实例架构:官方发布件与文档未提供多节点集群方案,高可用需自行在外层做(如多实例 + DNS 轮询,负载均衡仅在单实例内的多客户端维度);
  • HTTPS 需要证书准备或公网可验证的 Let's Encrypt 环境:证书目录方式需自行提供 crt/key,按需签发方式要求 Let's Encrypt 能回访验证;
  • 客户端能力取决于 ssh:SSH 连接断开隧道即断(需自行用 autossh/参数保活),这是纯 SSH 方案的固有形态;
  • 出口端口需要防火墙配合:TCP 转发的端口范围(--port-bind-range)需在服务器防火墙上同步放行。

七、同类选型对比

内网穿透/隧道类工具的选型本质是五个问题的取舍:服务端是否开源自托管、客户端要不要装专用工具、支持哪些协议、多租户治理能力多强、是否绑定商业云。下表在 2026-10-26 用统一口径实查(星数取自 shields.io 徽章;语言/许可/协议能力据各项目官方仓库 README 与发布件;ngrok 服务端闭源故星数一栏以 agent 仓库形态标注说明):

项目GitHub 星数语言/许可服务端形态客户端要求协议与路由能力典型定位
sish4.8kGo / MIT完全开源,单二进制自托管系统自带 ssh,零安装HTTP(S)/WS(S)/TCP/别名/SNI,Host 路由端口复用,四类负载均衡自托管 ngrok 替代,SSH 流派
frp110kGo / Apache-2.0完全开源,frps 自托管专用 frpc 客户端 + 配置文件TCP/UDP/HTTP/HTTPS/STCP/P2P,功能最全全能型穿透,运维级功能丰富
rathole14kRust / Apache-2.0完全开源,单二进制自托管专用客户端 + TOML 配置TCP/UDP 转发,主打低资源高性能资源敏感场景的轻量 frp 替代
bore12kRust / MIT完全开源,单二进制自托管专用 bore CLI(也可自建服务端)仅 TCP 转发,极简临时分享 TCP 服务,最小可用
Cloudflare Tunnel16k(cloudflared)Go / Apache-2.0闭源云服务(cloudflared 客户端开源)专用 cloudflaredHTTP/TCP/UDP,经 Cloudflare 边缘,无需公网 IP企业内网接入 Cloudflare 生态
ngrok—(agent 仓库)agent 开源,服务端闭源商业 SaaS(可自建仅限付费授权)专用 ngrok agentHTTP/TLS/TCP,域名与认证托管开箱即用的商业标准

关键差异与选型建议:

  1. 客户端是否零安装是 sish 与其余开源方案的分水岭。frp/rathole/bore 都要求在「被穿透的那台机器」上部署专用客户端与配置文件;sish 只要求能 ssh。对「演示给客户看」「在他人设备上临时暴露服务」这类场景,sish 的体验不可替代。
  2. 协议广度上 frp 最全(UDP、P2P、STCP 等),sish 覆盖 HTTP/TCP/SNI 主流面但无 UDP 转发;需要 UDP 穿透时选 frp 或 rathole。
  3. 治理能力上 sish 在开源方案中最接近「平台」形态:认证、黑白名单、保留域名、console 请求回放、proxy protocol 都是内置项,适合直接对外提供多租户隧道服务;frp 偏运维工具定位,治理靠配置与外层组件。
  4. 不依赖第三方云是 sish/frp/rathole/bore 相对 Cloudflare Tunnel 与 ngrok 的共同优势;其中若要求客户端零安装,答案只剩 sish。
  5. 资源占用与语言:rathole(Rust)在极低资源设备上有优势;sish/frp(Go)单二进制部署成本也很低,sish 服务端一个二进制 + 一个域名即可跑起来。
  6. 一句话决策:想要「自托管 + 客户端零安装 + HTTP 域名复用」→ sish;要 UDP/P2P 与最全功能 → frp;极致轻量 TCP/UDP → rathole;只临时分享 TCP → bore;接受云托管、无公网 IP → Cloudflare Tunnel 或 ngrok。

八、参考链接