最近, libssh2 爆出了 9.8 分 CVE-2026-55200, 将 SSH 端口暴露至公开网路已经变得不再安全
为了更为安全的管理和访问服务器, 可以使用 Teleport 堡垒机解决方案
堡垒机是一种用于统一鉴权并转发请求到真实服务器的服务, 部分堡垒机服务无需在服务端开启端口, 有着更高的安全性
Teleport is an identity-based access platform that secures servers, Kubernetes clusters, databases, internal applications, and desktops using short-lived certificates, detailed audit logging, and fine-grained role-based access controls tied to your SSO provider (e.g., Okta, GitHub, Google Workspace).1
部署
安装 Teleport
在你想要作为请求转发服务器的服务器上运行如下脚本
curl https://goteleport.com/static/install.sh | bash -s <version>例如
curl https://cdn.teleport.dev/install.sh | bash -s 18.9.2配置或生成 TLS 证书
对于域名有所有权且 443 端口可以访问的设备, 可以使用
sudo teleport configure -o file \ --acme --acme-email=<email> \ --cluster-name=<domain>对于已有 TLS 证书的用户, 可以将证书复制至 /var/lib/teleport/fullchain.pem 和 /var/lib/teleport/privkey.pem, 并使用
sudo teleport configure -o file \ --cluster-name=<domain> \ --public-addr=<domain:port> \ --cert-file=/var/lib/teleport/fullchain.pem \ --key-file=/var/lib/teleport/privkey.pem要使用 openssl 自签名证书, 请使用
# teleport-ext.cnf[req]distinguished_name = req_distinguished_namex509_extensions = v3_reqprompt = no[req_distinguished_name]C = GSST = Genshin ImpactL = TeyvatO = Miruku Teleport LabCN = <domain>[v3_req]keyUsage = critical, digitalSignature, keyEnciphermentextendedKeyUsage = serverAuth, clientAuthsubjectAltName = @alt_names[alt_names]DNS.1 = <domain>Terminal window sudo openssl req -x509 -nodes -days 3650 \-newkey ec -pkeyopt ec_paramgen_curve:prime256v1 \-keyout /var/lib/teleport/privkey.pem \-out /var/lib/teleport/fullchain.pem \-config teleport-ext.cnf
开启 Systemd 服务
sudo systemctl enable --now teleport如果使用 --public-addr=<domain:port> 开启的服务, 则启动于 0.0.0.0:port 上, 否则请查看 /etc/teleport.yaml 中 proxy_service.web_listen_addr
同时, 如果服务器位于 NAT 后, :3025 为默认鉴权端口, 请开启端口以保证 domain:3025 可以被访问
使用
创建用户
在运行有 Teleport 设备上运行如下命令, 以创建 admin 用户
如下示例中, admin 可以管理集群 (administrative), 连接到任何 Teleport 功能保护的资源, 查看审计事件和会话记录, 并支持使用 root 或 ubuntu Linux 用户 登录集群中的设备
sudo tctl users add admin --roles=editor,access,auditor --logins=root,ubuntu打开命令输出的连接
User "admin" has been created but requires a password. Share this URL with the user to complete user setup, link is valid for 1h:https://<domain>:<port>/web/invite/<id>即可初始化用户密码
添加 Node
https://goteleport.com/docs/get-started/connect/ 为了使现有服务器可以连接到 Teleport, 我们需要在服务器上配置 Teleport Agent
在 WebUI 中选择 Add New > Resource, 按照流程添加即可
NOTE为了避免 Node 添加状态出现问题, 在进入添加流程至至成功前, 请不要刷新页面, 也不要在同一服务器重复运行 Agent 安装程序
要删除 Node, 请使用
Terminal window tctl rm node/<uuid>
客户端 CLI 工具
https://goteleport.com/docs/connect-your-client/teleport-clients/tsh/
tsh 是 Teleport 的 CLI 连接与鉴权工具
使用如下命令获取服务端版本
curl https://<domain>[:<port> | '443']/webapi/find | jq '.server_version'使用如下命令安装
curl -O https://cdn.teleport.dev/teleport-v<version>-linux-amd64-bin.tar.gztar -xzf teleport-v<version>-linux-amd64-bin.tar.gzcd teleportsudo ./install使用如下命令登录 Teleport
tsh login --proxy=<domain>[:<port> | '443'] [--user=<user>]登出
Terminal window tsh logout
查看可用 Node
tsh ls登录成功后, 使用如下命令可以连接到 Node
tsh ssh [<user>@]<node>备份 Teleport
为了避免单点故障造成数据丢失, 我们需要对 Teleport 数据进行备份
/etc/teleport.yaml 配置文件是自动生成的, 所以备份它是可选的
参考 官方文档内的备份与恢复 章节, 对于使用本文方法部署的自托管 Teleport, 仅需备份 /var/lib/teleport/ 文件夹即可