使用 Teleport 打造统一跳板入口
TIP本文为notion里的旧文章,现在搬运到博客里。
在最近部署了大量虚拟机之后,常常需要从不同入口连接服务器,这不仅增加管理成本,也带来了安全与维护上的不便。一个统一、安全、可审计的跳板机显得非常必要。在调研多种方案后,Teleport 成为了理想选择。
不要问为什么不用jumpserver,问就是太丑了。
Teleport 是一体化的访问控制平台,可集中管理 SSH、Kubernetes、数据库、内部应用、桌面访问等多种资源,建立统一的访问入口,同时提供零信任访问、安全审计、短期证书、SSO 集成等能力。
本文将从 Teleport 的概念、核心功能到 Docker 部署、节点录入,完整介绍如何搭建属于自己的跳板系统。
什么是 Teleport?
Teleport 是一个开源的基础设施访问平台(Infrastructure Access Platform),核心理念是通过统一的 Proxy 入口来代理所有内部资源的访问,包括:
- SSH
- Kubernetes
- 数据库
- 内部 Web 应用
- Windows 远程桌面
- 工作负载身份(Workload Identity)

Teleport 由几个主要组件组成:
-
Auth Service 负责认证、授权、证书管理、RBAC 策略等。
-
Proxy Service 对外暴露唯一入口(通常是 443 或 3080),所有访问通过 Proxy 中转。
-
Node/Kube/DB/Application/Desktop Agent 部署在目标资源上的代理,使这些资源接入 Teleport 集群。
Teleport 的核心价值在于:
身份安全(Identity Security)
- 基于短期证书,无需长期 SSH 密钥。
- 可消除影子访问和常驻权限。
- 强化 RBAC 管理。
统一访问入口(Unified Access Plane)
- 所有访问统一从 Proxy Service 进入。
- 支持 SSO、MFA、Device Trust。
- 集中记录所有会话和审核日志。
核心功能模块
1. SSH 安全访问
- 使用短期证书替代长期 SSH 密钥
- 支持会话录制与回放
- 统一权限管理
- 兼容传统 SSH 工具(通过
tsh)
2. Kubernetes 访问控制
- 统一通过 Teleport 的身份和 RBAC 管理多个 K8s 集群
kubectl会话可审计- 多集群访问无需管理 kubeconfig 文件
3. 数据库访问
- 支持 PostgreSQL、MySQL 等
- 通过 Teleport Proxy 转发数据库连接
- 审计数据库查询
- 无需本地保存静态数据库凭据
4. 内部应用与桌面访问
- Application Service 可代理内网 Web 应用
- Desktop Service 可代理 RDP,实现安全的 Windows 桌面访问
5. Workload Identity(工作负载身份)
- 为服务间调用自动签发短期证书/JWT
- 遵循 SPIFFE 标准
- 支持自动轮换
典型使用场景
- 跨团队运维管理:统一管理所有 SSH、K8s、DB 访问,所有会话都可审计。
- 零信任架构:每一次访问均基于实时认证与授权。
- 混合云与多云环境:私网资源无需暴露,通过反向隧道接入 Teleport。
- CI/CD 集成:通过 API 或 Terraform 控制访问策略与证书发放。
使用 Docker 部署 Teleport
以下示例适合个人或轻量级环境。生产环境建议增加:
- TLS 证书(ACME/手动)
- 持久化存储
- 高可用配置
部署参考:https://goteleport.com/docs/
1. 准备配置目录
mkdir -p teleport/data teleport/config teleport/certs2. 生成 Teleport 配置文件
docker run --hostname localhost --rm \ --entrypoint=/usr/local/bin/teleport \ public.ecr.aws/gravitational/teleport-distroless:17.4.8 \ configure --roles=proxy,auth > ./teleport/config/teleport.yaml根据需要修改其中的 proxy_service:
proxy_service: enabled: "yes" web_listen_addr: 0.0.0.0:3080 tunnel_listen_addr: 0.0.0.0:3024 listen_addr: 0.0.0.0:3023 public_addr: - localhost:3080 https_key_file: /etc/teleport/certs/server-key.pem https_cert_file: /etc/teleport/certs/server.pem acme: {}如需要 TLS,可使用 cfssl 自行生成证书。
3. 启动 Teleport 服务
docker run -d --restart=always \ --hostname localhost --name teleport \ -v ~/Applications/teleport/config:/etc/teleport \ -v ~/Applications/teleport/data:/var/lib/teleport \ -v ~/Applications/teleport/certs:/etc/teleport/certs \ -p 3025:3025 -p 3080:3080 -p 3023:3023 \ public.ecr.aws/gravitational/teleport-distroless:17.4.84. 验证状态
docker exec teleport tctl status5. 创建第一个用户
docker exec teleport tctl users add admin \ --roles=editor,access \ --logins=root,ubuntu复制输出的邀请链接,在浏览器中设置密码和 MFA。
6. 登录 Teleport Web UI
https://<服务器IP>:3080自签证书会提示风险,测试环境可忽略。
使用 tsh 登录集群
安装 tsh 后:
tsh login --proxy=<IP或域名>:3080 --user=admin连接节点:
tsh ssh ubuntu@node-a将其他服务器加入 Teleport(录入节点)
方法一:从 Web UI 生成脚本(推荐)
- 打开 Teleport Web UI
- 点击 Add Resource / Enroll New Server
- 复制生成的脚本,例如:
sudo bash -c "$(curl -kfsSL https://<IP>:3080/scripts/<token>/install-node.sh)"在目标节点执行此脚本即可自动加入集群。
方法二:使用 tctl 手动生成令牌
docker exec teleport tctl nodes add --ttl=5m --roles=node --format=json然后在目标节点手动安装 Teleport 并填写 token 与 auth_server 地址。
验证节点是否加入
在 Web UI 或使用:
tsh ls即可看到新加入的服务器资源,并可直接 SSH 登录。