ShellHub 介绍与选型指南
ShellHub 开源 SSH 网关全景认知:集中接入 NAT 后的 Linux 设备与服务器、agent 反向隧道、SSHID 路由与命名空间模型、功能边界与官方快速上手路径,及与 Teleport、Warpgate、sshd 跳板机的量化选型对比(资料来源与查询日期 2026-10-27 全标注)。
ShellHub 介绍与选型指南
目标:面向「服务器与边缘设备分散在 NAT/防火墙之后、需要集中化 SSH 接入与审计」的场景,给出 ShellHub 的全景认知——定位、架构、功能边界、官方快速上手路径与同类方案(Teleport、Warpgate、sshd+跳板机)的量化选型对比。本文为认知篇,全部内容联网溯源自官方渠道并标注来源与查询日期(2026-10-27),未做本地实测;部署、配置与命令的实测结论分别见本专栏部署实战、配置参数与 CLI 命令三篇。
一、环境信息
本文为联网溯源的认知篇,未做本地部署实测,信息来源与采集口径如下:
- 信息采集日期:2026-10-27
- 官网:shellhub.io(产品定位、功能特性、设备规模数据)
- 官方文档站:docs.shellhub.io(工作原理、自托管快速上手、连接方式)
- 代码仓库:github.com/shellhub-io/shellhub(Releases、README、LICENSE、openapi 目录)
- 版本基线:ShellHub v0.27.4(截至查询日 GitHub Releases 页最新稳定版,官方自托管文档同步以 v0.27.4 为例)
- 星数取证:shields.io 实时徽章(未直连 api.github.com)
- 社区活跃度:OpenHUB 项目页(openhub.net/p/ShellHub)
二、软件概述
2.1 项目定位
ShellHub 官方定义为「集中式 SSH 网关(centralized SSH gateway)」:在每台需要被访问的 Linux 设备上运行一个 agent,agent 主动向 ShellHub 服务端发起出站连接并长期保持;运维人员随后用标准 ssh/scp/sftp 客户端或浏览器,经服务端接入任意一台已注册设备。设备因此不需要公网 IP、不需要开放任何入站端口,无论它是云主机、公司内网服务器,还是部署在客户现场、移动网络后面的嵌入式 Linux 设备(来源:仓库 README、docs.shellhub.io/about/how-shellhub-works,2026-10-27)。
官网给出的规模数据(来源:shellhub.io 首页,2026-10-27):
- 超过 150,000 台设备在使用其技术;
- agent 累计下载超过 100 万次;
- 覆盖超过 50 个国家;
- 典型用户场景摘自官网客户证言:嵌入式设备厂商的现场设备远程支持(Inobram、ASKOMA)、无人机与农业设备的工程监控(Lucid Drone、FLUID)。
一句话概括:ShellHub 解决的是「设备在 NAT 后面,人够不着」的远程接入问题,同时把 SSH 的账号、公钥、授权与审计集中到服务端统一管理。
💡 技术拓展:远程接入方案不止「SSH 网关 + 反向隧道」一种。业界常见方案对比——
方案 原理/特点 适用场景 传统跳板机(bastion) 设备开放入站 22 端口,经跳板机二次登录 设备有公网/内网可达,无 NAT 难题 VPN(WireGuard/OpenVPN 类) 组网后设备像在局域网内,任意端口可达 需要访问 SSH 之外的多种服务 反向隧道(frp/sish 类) 设备主动连出建立隧道,外部经隧道进入 临时暴露内网单个服务 SSH 网关(ShellHub 类) 设备 agent 主动外连 + 集中鉴权/审计/Web 终端 大量 NAT 后设备的长期集中运维与合规审计 零信任访问平台(Teleport 类) 证书制短时效访问 + 全量录制,组件较重 中大型企业、强合规诉求 ShellHub 采用的是「agent 主动外连的 SSH 网关」路线,介于轻量反向隧道与重型零信任平台之间:比跳板机/VPN 少了网络侧改造,比零信任平台部署更轻。若只需临时把内网单个 SSH 服务暴露出去,可参考本站 《sish 介绍与选型指南》;需要长期管理一批设备并留审计时,ShellHub 这类网关更合适。
2.2 版本、许可与技术栈
- 当前稳定版:v0.27.4(来源:GitHub Releases 页,2026-10-27)。补丁版 v0.27.4 修复了 v2 隧道 keepalive 超时后设备假在线的问题(来源:v0.27.4 Release Notes)。
- 许可证:Apache License 2.0(来源:仓库 LICENSE.md)。产品分 Community(社区版,免费自托管)、Enterprise(企业版)与 Cloud(官方托管云)三个 Edition(来源:docs.shellhub.io/about/editions)。
- 实现语言与组成:服务端与 agent 为 Go(仓库 go.mod、versions.env 中 GOLANG_VERSION=1.26.10),Web 控制台为独立前端服务;官方自托管栈为「四个服务 + PostgreSQL」(来源:docs.shellhub.io/selfhosted/quickstart,2026-10-27)。
- 社区活跃度:GitHub 星数约 2.2k(来源:shields.io 徽章,2026-10-27);OpenHUB 统计近 30 天(2026-09-12 至 2026-10-12)提交 659 次,仓库处于高频迭代状态(来源:openhub.net/p/ShellHub,2026-10-27)。
三、核心架构
3.1 两大部件:server 与 agent
官方文档把 ShellHub 归纳为「两个运动部件」(来源:docs.shellhub.io/about/how-shellhub-works,2026-10-27):
- 服务端(server):所有 agent 连接的终点、所有用户会话的起点。负责设备注册、在线状态维护、连接者身份识别、访问策略判定、把用户会话桥接到设备隧道,以及开启时的会话录制。
- agent:跑在每台设备上的小型常驻进程,只做三件事——主动连出服务端并保活、注册设备并上报主机名与身份、在既有连接上响应请求(shell、文件传输、端口转发)。agent 不监听任何入站端口。
agent 有几个与排障直接相关的默认行为(来源同上):
- 默认每 30 秒发一次 keepalive(
SHELLHUB_KEEPALIVE_INTERVAL可调); - 约每 8–12 分钟随机重新鉴权一次(避免成批设备同时重连);
- 连接断开后按 5–65 秒随机退避无限重试;
- 首次启动若
SHELLHUB_PRIVATE_KEY指向的设备私钥不存在则自动生成,该密钥是设备身份的唯一凭证——删除它设备将以「新设备」身份重新注册。
3.2 连接方向:设备主动外连
传统 SSH 要求设备可被连入(公网地址 + 开放入站端口),一旦设备落在运营商级 NAT、客户内网或移动网络后即失效。ShellHub 把方向反过来:agent 主动向服务端发起出站连接并保持,用户的会话路由到这条已经存在的连接上。设备对网络唯一的要求是「能访问 ShellHub 服务端的 HTTP(S) 地址」(来源:docs.shellhub.io/about/how-shellhub-works,2026-10-27)。
一次 SSH 连接的完整路径(来源同上,共 8 步):
- 运行
ssh root@mycompany.raspberrypi@cloud.shellhub.io; - 连接到达 ShellHub 服务端;
- 服务端解析 SSHID,定位命名空间与设备;
- 识别连接者身份(公钥、密码或浏览器确认的审批);
- 依据命名空间的访问策略做授权;
- 找到该 agent 已建立的连接;
- 终端 I/O 沿这条连接桥接到 agent;
- agent 在设备上打开 shell 并加入会话。
第 5 步发生在服务端为 agent 生成任何东西之前,被拒绝的连接根本到不了设备——这是它与传统跳板机在安全模型上的本质差别。
3.3 SSHID 与命名空间
一台服务端地址要承载成百上千台设备,ShellHub 把「目标是谁」编码进 SSH 用户名,即 SSHID(来源:docs.shellhub.io/about/how-shellhub-works,2026-10-27):
username@namespace.device@server
以 ssh root@mycompany.raspberrypi@cloud.shellhub.io 为例:
| 组成 | 值 | 含义 |
|---|---|---|
root | SSH 用户名 | 设备上的 unix 用户 |
mycompany | 命名空间 | 工作区(devices/members/policies 的容器) |
raspberrypi | 设备主机名 | 命名空间内的目标设备 |
cloud.shellhub.io | 服务端地址 | ShellHub 服务端 |
服务端按第一个 @ 拆出用户名,再按剩余部分第一个 . 拆出命名空间与主机名。因为 SSHID 就是一个普通的 SSH 用户名,OpenSSH、PuTTY、scp、sftp、Ansible 等所有标准客户端无需插件即可使用。
**命名空间(namespace)**是设备、成员、策略与设置的工作区,拥有可改的名称与不可变的 Tenant ID。命名空间分 legacy(旧模式)与新两种,决定设备注册与 SSH 鉴权行为;新建命名空间一律是新模式(来源:docs.shellhub.io/about/how-shellhub-works,2026-10-27)。社区版单命名空间:实例唯一命名空间在初始化时创建,服务端拒绝创建第二个;Cloud 与企业版支持多命名空间(来源:docs.shellhub.io/selfhosted/quickstart,2026-10-27)。
3.4 自托管服务栈组成
官方自托管 Compose 栈的组成(来源:仓库 docker-compose.yml v0.27.4、docs.shellhub.io/selfhosted/quickstart,2026-10-27):
| 服务 | 职责 | 说明 |
|---|---|---|
| gateway | TLS 终结与 Web 入口 | v0.27 起内置 Caddy 替代 nginx+certbot,可自动 HTTPS 或挂载自有证书 |
| server | API 与 SSH 端点合一 | v0.27 起 API 与 SSH 合并为单进程,shellhubio/server 取代旧 api/ssh 两镜像 |
| ui | Web 控制台 | 设备/成员/会话录制管理界面 |
| postgres | 主存储 | 官方 Compose 使用 postgres:18.0 |
| redis(valkey) | 缓存与任务队列 | 兼容 Redis 协议的 Valkey |
⚠️ 注意:SSH 端口由 server 服务发布,而非 gateway——把负载均衡放到前面时这一点很关键(来源:docs.shellhub.io/selfhosted/quickstart,2026-10-27)。
v0.27 是一次架构大版本:API 与 SSH 合并单进程、设备注册从「TENANT_ID 预授权」改为「配对码(pairing code)+ 预配密钥(provisioning keys)」、SSH 登录按账号与访问策略授权、Web 终端支持会话录制(来源:v0.27.0 Release Notes,2026-10-27)。旧的 TENANT_ID 注册方式在新建命名空间中已弃用。
四、功能特性
4.1 功能清单
综合官网特性页与官方文档(来源:shellhub.io、docs.shellhub.io,2026-10-27):
- 原生 SSH 接入:标准终端直连,无需额外客户端,
ssh/scp/sftp通用; - Web 终端:浏览器内直接开设备会话,v0.27 起支持会话录制,录制可在控制台回放、下载与删除;
- 集中公钥管理:公钥绑定到账号身份,配合访问策略决定「哪些成员、角色与 API key 能用哪些登录名到达哪些设备」;
- 设备注册:配对码(agent 打印、浏览器确认)或带用量上限/有效期/标签/Webhook 的预配密钥;
- 防火墙规则:按来源限制对设备的访问;
- 端口转发与文件传输:官方文档单列 connect/port-forwarding 与 connect/file-transfer 章节;
- 审计与合规:会话记录「做了什么、谁开的」,支持
SHELLHUB_SESSION_RETENTION_DAYS保留期清理; - 暴力破解防护:登录失败锁定(
SHELLHUB_MAXIMUM_ACCOUNT_LOCKOUT、SHELLHUB_ACCOUNT_LOCKOUT_BASE); - API 与自动化:完整 HTTP API(openapi 目录维护规范),v0.27 起还提供 MCP Server 供 AI 代理驱动;
- 企业版能力:SAML 单点登录、多命名空间、对象存储等。
4.2 版本演进节奏
仓库按 v0.x 高频发布,近一年从 v0.18 演进到 v0.27.4(来源:pkg.go.dev 模块版本列表与 GitHub Releases,2026-10-27)。v0.27.0(2026 年发布)为近年最大重构;随后 v0.27.2 修复 Echo 框架两个 WebSocket 安全通告(GHSA-cxf3-9h37-7rr8、GHSA-9969-6676-49h5)、新增 SHELLHUB_PUBLIC_URL 与 SHELLHUB_SSH_PROXY_TRUSTED_IPS;v0.27.4 修复 v2 隧道 keepalive 超时后的设备假在线。官方自托管文档已同步以 v0.27.4 为基线,选型时建议直接从 v0.27.x 起,跳过旧架构版本。
五、快速开始(官方最小可用路径)
本节为官方文档转述(来源:docs.shellhub.io/selfhosted/quickstart,2026-10-27),本专栏已在真实环境按此路径完成全流程实测,逐步回显见 《ShellHub Docker Compose 部署实战》。
5.1 自托管服务端
官方要求主机装有 Docker 与 Docker Compose,并具备设备可达的稳定地址:
git clone -b v0.27.4 https://github.com/shellhub-io/shellhub.git # 官方推荐按 release 标签克隆
cd shellhub
make keygen # 生成 API 密钥对与 SSH 主机密钥三个 secrets
make start # 经 bin/docker-compose 包装器拉起全栈
首次启动后没有任何账号,浏览器打开服务端地址会强制跳到 /setup 创建超级管理员与其命名空间;/setup 在首个账号创建后即消失(来源:docs.shellhub.io/selfhosted/quickstart,2026-10-27)。官方特别提醒:启动必须走 ./bin/docker-compose 包装器而非裸 docker compose——后者不会叠加 PostgreSQL 编排层,服务端会因无数据库起不来。
5.2 接入第一台设备
在目标设备上执行官方安装脚本(来源:docs.shellhub.io/get-started,2026-10-27):
curl -sSf http://<你的服务端地址>/install.sh | sh
agent 启动后打印配对码,登录控制台的成员在浏览器中确认接受后设备上线;随后即可用 SSHID 连接:
ssh root@<命名空间>.<设备主机名>@<服务端地址>
六、适用场景与限制
6.1 典型适用场景
- 边缘/IoT 设备运维:部署在客户现场、4G/5G 移动网络后的嵌入式 Linux 设备(官网客户证言的主流场景);
- 分布式服务器集中 SSH 接入:多云/多机房服务器统一从一个入口进入,公钥、授权、审计集中管理;
- 替代传统跳板机:需要会话录制与集中鉴权,但不想上重型零信任平台的团队;
- 远程支持团队:给现场设备提供二级技术支持,减少差旅(官网证言明确提到「减少差旅需求」)。
6.2 限制与边界
- 社区版单命名空间:无法在单实例内划分多团队隔离(来源:docs.shellhub.io/about/editions);
- 设备端必须能装 agent:网络只需允许设备对服务端 HTTP(S) 出站,但 agent 本身需要在设备上运行(支持 Docker、snap、standalone 等安装方式,来源:官方 install.sh);
- SSH 端口入站需放行:运维人员的客户端必须可达服务端的 SSH 端口(server 发布)与 Web 端口;
- v0.27 架构变更大:从旧版本升级涉及命名空间 legacy/新模式的迁移与一次性升级,TENANT_ID 注册方式在新建命名空间已弃用(来源:v0.27.0 Release Notes);
- 版本迭代快:0.x 阶段 API 与行为可能随版本变化,生产使用应锁定 release 标签并关注 Release Notes。
七、同类选型对比
7.1 候选对象与量化对比
对比对象:Teleport(gravitational/teleport,零信任访问平台)、Warpgate(warp-tech/warpgate,轻量 SSH/HTTP 代理网关)、传统 sshd+跳板机。以下事实性字段来源:各项目官网/仓库/文档站(2026-10-27 查询);星数为 shields.io 实时徽章。
对比解读:四个方案处在同一条「远程接入集中化」光谱的不同位置——sshd+跳板机零成本但零管理;Warpgate 用最小部署换来录制与账号映射,但没有设备管理与 NAT 穿透;ShellHub 主打「大量 NAT 后设备」的长期集中运维,设备管理、注册流程与审计是其差异化能力;Teleport 则在协议广度(K8s/桌面/数据库)、证书体系与企业合规上最强,代价是组件规模与运维复杂度。
7.2 选型建议
- 管理一批 NAT/内网后的 Linux 设备(IoT、现场设备、客户机房)→ ShellHub:agent 反向连接 + 配对码注册 + 设备管理面是为这个场景原生设计的;
- 企业零信任、多协议(K8s/数据库/桌面)、强合规审计 → Teleport:接受更高的部署与运维成本换取企业级能力;
- 个人或小团队,几台服务器想要集中入口 + 会话录制 → Warpgate:单二进制最省事;
- 只有两三台有公网的机器、无审计要求 → sshd + 跳板机:不必引入任何新组件。
💡 说明:若诉求只是「把内网 SSH 端口临时暴露出去」而非设备长期纳管,反向隧道类工具(如本站 《sish 介绍与选型指南》 所述)部署更轻;需要设备台账、成员协作与审计时再回到 SSH 网关类方案。
八、参考链接
- ShellHub 官网:https://shellhub.io
- 官方文档站:https://docs.shellhub.io
- 工作原理(How ShellHub Works):https://docs.shellhub.io/about/how-shellhub-works
- 自托管快速上手:https://docs.shellhub.io/selfhosted/quickstart
- 代码仓库:https://github.com/shellhub-io/shellhub
- Releases(v0.27.4 及各版说明):https://github.com/shellhub-io/shellhub/releases
- ShellHub vs. Jump Hosts and VPNs(官方对比页):https://docs.shellhub.io/about/shellhub-vs-jump-hosts
- OpenHUB 项目统计:https://openhub.net/p/ShellHub
- 星数徽章取证:https://img.shields.io/github/stars/shellhub-io/shellhub(2026-10-27 显示 2.2k)