跳转至

Teleport — 统一身份的基础设施安全访问平台

安装与配置

# === 方法1: 一键安装脚本(Linux)===
curl https://goteleport.com/static/install.sh | bash -s 18.1.0  # 安装指定版本(当前最新 v18)
# 安装后包含 teleport(服务端)、tsh(客户端 CLI)、tctl(管理 CLI)

# === 方法2: APT 安装(Ubuntu/Debian)===
curl https://deb.releases.teleport.dev/teleport-pubkey.asc | \
  sudo tee /usr/share/keyrings/teleport-archive-keyring.asc      # 导入 GPG 密钥
echo "deb [signed-by=/usr/share/keyrings/teleport-archive-keyring.asc] \
  https://deb.releases.teleport.dev/ stable main" | \
  sudo tee /etc/apt/sources.list.d/teleport.list                 # 添加 APT 源
sudo apt update && sudo apt install teleport                      # 安装 Teleport

# === 方法3: Docker 运行 ===
docker run -d --name teleport \
  -p 3023:3023 -p 3025:3025 -p 3080:3080 \
  -v /var/lib/teleport:/var/lib/teleport \
  public.ecr.aws/gravitational/teleport:18                        # Docker 方式运行

# === 初始化配置 ===
sudo teleport configure --cluster-name=mycompany.example.com \
  --output=/etc/teleport.yaml                                     # 生成配置文件
sudo systemctl enable --now teleport                              # 启动服务

# === 创建管理员用户 ===
sudo tctl users add admin --roles=editor,access \
  --logins=root,ubuntu                                            # 创建管理员并分配角色

核心用法

# --- 客户端登录 ---
tsh login --proxy=teleport.example.com                            # 登录到 Teleport 集群
tsh status                                                        # 查看当前登录状态和证书有效期

# --- SSH 访问 ---
tsh ssh user@hostname                                             # 通过 Teleport 连接 SSH 主机
tsh ls                                                            # 列出所有可访问的服务器
tsh scp localfile.txt user@hostname:/tmp/                         # 通过 Teleport 安全传输文件

# --- Kubernetes 访问 ---
tsh kube ls                                                       # 列出所有可访问的 K8s 集群
tsh kube login mycluster                                          # 登录到 K8s 集群
kubectl get pods                                                  # 正常使用 kubectl(自动认证)

# --- 数据库访问 ---
tsh db ls                                                         # 列出所有可访问的数据库
tsh db connect mydb                                               # 连接到数据库(自动短期证书)

# --- 应用访问 ---
tsh apps ls                                                       # 列出所有可访问的 Web 应用
tsh apps login myapp                                              # 登录到 Web 应用

# --- 会话录制回放 ---
tsh recordings ls                                                 # 列出会话录制
tsh play <session-id>                                             # 回放指定会话

参数详解

参数/概念说明
--proxyTeleport 代理服务器地址
--user登录的 Teleport 用户名
--logins允许使用的 Linux 用户名列表
--roles分配的角色(access=普通访问, editor=管理)
--ttl证书有效期(默认12小时)
--request-reason访问请求的原因说明
--mfa-modeMFA 模式(per-session=每会话验证)
cluster-name集群名称,通常用域名

实战案例

# === 完整流程:搭建 Teleport 并通过它访问服务器 ===

# 第1步:在中心服务器安装并配置 Teleport
sudo teleport configure --cluster-name=ops.mycompany.com \
  --output=/etc/teleport.yaml                 # 生成初始配置
sudo systemctl start teleport                 # 启动 Teleport 服务

# 第2步:创建管理员
sudo tctl users add admin --roles=editor,access \
  --logins=root,ubuntu                        # 创建管理员用户
# 浏览器访问输出的 URL 完成注册(设置密码+MFA)

# 第3步:在目标服务器安装 Teleport Node Agent
sudo teleport node configure \
  --token=$(tctl tokens add --type=node --format=text) \
  --auth-server=ops.mycompany.com:3025 \
  --output=/etc/teleport.yaml                 # 配置节点加入集群
sudo systemctl start teleport                 # 启动节点服务

# 第4步:客户端连接
tsh login --proxy=ops.mycompany.com           # 登录集群
tsh ls                                        # 列出所有已注册的服务器
tsh ssh ubuntu@web-server-01                  # SSH 到目标服务器

# 第5步:配置访问请求审批(Just-in-Time 访问)
# 在 Teleport Web UI 中配置审批流程
tsh request create --roles=db-admin \
  --reason="紧急数据库维护"                    # 提交访问请求
# 审批者在 Web UI 或 Slack 中批准

常见报错与解决

报错原因解决方案
certificate has expired登录证书过期重新执行 tsh login
access denied角色权限不足联系管理员调整角色或提交访问请求
node not found目标服务器未注册或离线检查目标服务器的 Teleport 服务状态
connection refused on 3025认证端口未开放检查防火墙规则
MFA is required需要多因素认证使用 TOTP 或硬件密钥完成 MFA

速查表

操作命令
登录集群tsh login --proxy=<addr>
列出服务器tsh ls
SSH 连接tsh ssh user@host
列出 K8s 集群tsh kube ls
列出数据库tsh db ls
连接数据库tsh db connect <name>
查看登录状态tsh status
提交访问请求tsh request create --roles=<role>
创建用户tctl users add <name> --roles=<roles>
生成节点 Tokentctl tokens add --type=node