ShellHub 介绍与选型指南

ShellHub 开源 SSH 网关全景认知:集中接入 NAT 后的 Linux 设备与服务器、agent 反向隧道、SSHID 路由与命名空间模型、功能边界与官方快速上手路径,及与 Teleport、Warpgate、sshd 跳板机的量化选型对比(资料来源与查询日期 2026-10-27 全标注)。

ShellHubSSH远程接入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 步):

  1. 运行 ssh root@mycompany.raspberrypi@cloud.shellhub.io;
  2. 连接到达 ShellHub 服务端;
  3. 服务端解析 SSHID,定位命名空间与设备;
  4. 识别连接者身份(公钥、密码或浏览器确认的审批);
  5. 依据命名空间的访问策略做授权;
  6. 找到该 agent 已建立的连接;
  7. 终端 I/O 沿这条连接桥接到 agent;
  8. 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 为例:

组成值含义
rootSSH 用户名设备上的 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):

服务职责说明
gatewayTLS 终结与 Web 入口v0.27 起内置 Caddy 替代 nginx+certbot,可自动 HTTPS 或挂载自有证书
serverAPI 与 SSH 端点合一v0.27 起 API 与 SSH 合并为单进程,shellhubio/server 取代旧 api/ssh 两镜像
uiWeb 控制台设备/成员/会话录制管理界面
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 实时徽章。

维度ShellHubTeleportWarpgatesshd + 跳板机
定位SSH 网关 + 设备管理(边缘向)零信任基础设施访问平台(企业向)轻量 SSH/HTTP 录制代理(个人/小团队向)手工跳板,无管理面
许可/商业模式Apache-2.0(社区/企业/云三版)核心开源,企业功能订阅Apache-2.0,纯开源OpenSSH 自带
实现与部署形态Go;Compose 四服务 + PostgreSQLGo;Auth/Proxy 等多组件集群Rust;单二进制系统自带 sshd
部署复杂度中(官方 Compose 一键栈)高(多组件与证书体系)低最低
NAT 后设备可达✅ agent 主动外连,设备零入站端口⚠️ 需能连到 Proxy(仍要网络可达性规划)⚠️ 目标机需可达 Warpgate❌ 依赖设备入站可达
接入协议SSH(SSHID 编码用户名)、Web 终端SSH/Kubernetes/Desktop(HTTP)/DB 多协议SSH + HTTP + MySQL 代理仅 SSH
集中公钥/账号✅ 公钥绑账号 + 访问策略✅ 证书制短时效凭证✅ 按用户映射目标机❌ 各机 authorized_keys 手工维护
会话录制/审计✅ Web 终端录制回放,会话留存✅ 全量增强录制(部分企业功能)✅ SSH 会话录制❌ 需自建(tlog/script 等)
设备管理面✅ 设备列表/状态/标签/注册流程偏「资源与访问」管理❌ 无设备管理概念❌
多租户社区版单命名空间;企业/云多租户团队/租户体系完整单租户❌
社区星数(2026-10-27)starsstarsstars—(OpenSSH 属系统组件)

对比解读:四个方案处在同一条「远程接入集中化」光谱的不同位置——sshd+跳板机零成本但零管理;Warpgate 用最小部署换来录制与账号映射,但没有设备管理与 NAT 穿透;ShellHub 主打「大量 NAT 后设备」的长期集中运维,设备管理、注册流程与审计是其差异化能力;Teleport 则在协议广度(K8s/桌面/数据库)、证书体系与企业合规上最强,代价是组件规模与运维复杂度。

7.2 选型建议

  • 管理一批 NAT/内网后的 Linux 设备(IoT、现场设备、客户机房)→ ShellHub:agent 反向连接 + 配对码注册 + 设备管理面是为这个场景原生设计的;
  • 企业零信任、多协议(K8s/数据库/桌面)、强合规审计 → Teleport:接受更高的部署与运维成本换取企业级能力;
  • 个人或小团队,几台服务器想要集中入口 + 会话录制 → Warpgate:单二进制最省事;
  • 只有两三台有公网的机器、无审计要求 → sshd + 跳板机:不必引入任何新组件。

💡 说明:若诉求只是「把内网 SSH 端口临时暴露出去」而非设备长期纳管,反向隧道类工具(如本站 《sish 介绍与选型指南》 所述)部署更轻;需要设备台账、成员协作与审计时再回到 SSH 网关类方案。

八、参考链接