5
这个楼主还没有留下简介。
当前还没有回复,欢迎成为第一个参与讨论的人。
第 14 篇通过 Quickstart Router 访问了同一台主机上的 SSH 服务。本篇把 SSH 服务端换成一台独立的 Ubuntu 服务器:在目标服务器安装 ziti-edge-tunnel,让它主动连接 OpenZiti 网络并承载 SSH 服务。
textWindows 客户端 → OpenZiti 网络与 Router → 独立 Ubuntu 上的 Linux Tunneler → Ubuntu 本机的 SSH 服务
开始前,需要一条现有管理通道登录目标 Ubuntu,用于安装软件和传送身份令牌。目标服务器还需要能够访问 Controller 的 Edge API 和至少一个对外发布的 Edge Router;如果沿用第 7 篇的示例,端口通常分别为 TCP 8441 和 8442,请以实际配置为准。
本文假设目标 Ubuntu 已运行 SSH 服务,监听端口为 22。
在 Controller 上创建服务端身份。
使用 Quickstart 安装账号登录 Controller 的 CLI:
bashsource "$HOME/.ziti/quickstart/$(hostname -s)/$(hostname -s).env"
zitiLogin
创建身份并保存一次性注册令牌:
bashziti edge create identity ubuntu-ssh-host \ -o ubuntu-ssh-host.jwt
通过已有管理通道,将 ubuntu-ssh-host.jwt 安全地传到目标 Ubuntu 的用户目录。JWT 是一次性注册令牌,不要公开分享。
在目标 Ubuntu 上安装 Linux Tunneler。
官方提供 Ubuntu 安装脚本。先下载并查看脚本,再运行:
bashsudo apt update
sudo apt install -y curl gpg
curl -fsSL https://get.openziti.io/tun/scripts/install-ubuntu.bash \
-o install-openziti-tunnel.bash
cat install-openziti-tunnel.bash
bash install-openziti-tunnel.bash
启用并启动服务:
bashsudo systemctl enable --now ziti-edge-tunnel.service
包安装方式使用 systemd 管理 Tunneler。默认运行模式也可能为本机配置 TUN 接口、路由和 Ziti DNS;官方还提供只承载服务的 run-host 模式。安装和运行模式说明见 Debian/Ubuntu 安装指南和 运行模式文档。
在目标 Ubuntu 上注册身份。
假设 JWT 已放在当前用户目录中,执行:
bashsudo ziti-edge-tunnel add \
--jwt "$(< ./ubuntu-ssh-host.jwt)" \
--identity ubuntu-ssh-host
查看服务状态:
bashsystemctl status ziti-edge-tunnel.service --no-pager
如果注册失败,可查看日志:
bashsudo journalctl -u ziti-edge-tunnel.service -n 50 --no-pager
注册后的身份文件包含凭据,应保留在目标服务器并妥善保护。确认注册成功后,可以删除传输用的 JWT 副本。
在 Controller 上为独立服务器创建 SSH 服务。
回到已登录 ziti CLI 的 Controller,创建客户端拦截配置:
bashziti edge create config private-ssh-intercept intercept.v1 \
'{"protocols":["tcp"],"addresses":["private-ssh.ziti"],"portRanges":[{"low":22,"high":22}]}'
创建服务端配置,指向独立 Ubuntu 服务器自己的 SSH 服务:
bashziti edge create config private-ssh-host host.v1 \
'{"protocol":"tcp","address":"127.0.0.1","port":22}'
创建服务并授权客户端和服务端身份:
bashziti edge create service private-ssh \
--configs private-ssh-intercept,private-ssh-host
ziti edge create service-policy private-ssh-dial Dial \
--identity-roles '@windows-laptop' \
--service-roles '@private-ssh'
ziti edge create service-policy private-ssh-bind Bind \
--identity-roles '@ubuntu-ssh-host' \
--service-roles '@private-ssh'
这里使用新的 private-ssh.ziti 域名,方便与第 14 篇的 ubuntu-ssh.ziti 区分。host.v1 中的 127.0.0.1 指向运行该 Tunneler 的目标 Ubuntu;如果 Tunneler 与 SSH 服务不在同一网络命名空间,需要改成 Tunneler 能够访问的地址。
验证策略并从 Windows 连接。
在 Controller 上检查客户端和服务端的策略关系:
bashziti edge policy-advisor services private-ssh windows-laptop -q ziti edge policy-advisor services private-ssh ubuntu-ssh-host -q
客户端应有 Dial 权限,服务端应有 Bind 权限,并且双方各自与服务有共同的在线 Router。
在 Windows 上确认 windows-laptop 已连接 Ziti Desktop Edge,然后执行:
powershellssh.exe 用户名@private-ssh.ziti
将用户名换成目标 Ubuntu 的实际账号。首次连接时,通过已有可信管理通道核对目标服务器的 SSH 主机密钥指纹,再继续登录。
如果连接失败,先检查目标 Ubuntu 的 Tunneler 日志和出站网络,再检查 Dial、Bind 及 Router 策略。此前为 local-web 配置的 MFA 和设备检查不会自动应用到 private-ssh;需要的话,可在 private-ssh-dial 中单独关联。
新增 Ziti 服务不会自动关闭原有公网 SSH 入口。准备调整防火墙时,先验证新的 Ziti SSH 连接,并保留备用管理通道。