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> # 回放指定会话
参数详解
| 参数/概念 | 说明 |
|---|
--proxy | Teleport 代理服务器地址 |
--user | 登录的 Teleport 用户名 |
--logins | 允许使用的 Linux 用户名列表 |
--roles | 分配的角色(access=普通访问, editor=管理) |
--ttl | 证书有效期(默认12小时) |
--request-reason | 访问请求的原因说明 |
--mfa-mode | MFA 模式(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> |
| 生成节点 Token | tctl tokens add --type=node |