Host · 设备③
运行位置:能访问客户内网目标的电脑,例如客户笔记本。
输入:Host Token 和目标 TCP 地址。
作用:把中继上的专用回环端口反向接到设备③可访问的目标。
先看 Agent 操作流程;下方也提供给用户的连接命令、Token 申请和撤销说明。中继只建立 TCP 通道,不负责目标服务器的登录认证。
设备③主动建立反向隧道;设备①建立本地入口。中继只转发 TCP。
-L 把 Agent 本地端口接到中继;-R 由③主动连中继并提供目标通道。两侧连接都保持运行时,①才能访问④。
HOST_TOKEN 和 ACCESS_TOKEN。Host Token 与 Access Token 由管理员一次性成对签发。主机:端口。让进程保持运行;输出“Host 隧道已授权”表示反向通道已建立。127.0.0.1:2223;端口被占用时改用其他 1024–65535 端口。ssh -p 2223 <目标用户名>@127.0.0.1。HTTP 或数据库则连接同一个本地端口并使用相应客户端。/healthz 返回正常当作目标已连通。只有 Agent 实际连接 127.0.0.1:本地端口 并收到目标服务响应,才算端到端验证通过。目标 SSH 密码、密钥和主机指纹由用户提供并由 Agent 单独处理。如果还没有 Token:Agent 只有在获准使用 Aliyun 管理账号时才可代为签发;否则请向管理员申请一组 Host/Access Token。不要在网页、日志、截图或公开消息中粘贴 Token。
运行位置:能访问客户内网目标的电脑,例如客户笔记本。
输入:Host Token 和目标 TCP 地址。
作用:把中继上的专用回环端口反向接到设备③可访问的目标。
运行位置:Agent 或最终访问者所在电脑。
输入:配对的 Access Token,可选本地端口。
作用:建立本地端口,供 SSH、HTTP、数据库等 TCP 客户端访问。
两个连接进程都要在线。关闭终端或按 Ctrl+C 会结束该端连接;网络中断后脚本会自动重连。
在 Aliyun 服务器②通过管理员 SSH 登录后执行。默认有效期 30 天;允许 1–365 天。输出中会显示 Host Token、Access Token 和中继端口,Token 明文只显示一次。
sudo /usr/local/bin/relayctl issue --customer client1 --days 30
hst_... 交给设备③使用者,将同组 acc_... 交给设备①/Agent。sudo /usr/local/bin/relayctl status。撤销时运行 sudo /usr/local/bin/relayctl revoke 并在隐藏输入提示中粘贴待撤销 Token。脚本使用系统已有的 curl 和 OpenSSH。下面先下载脚本并核对固定 SHA-256,再运行;改成你实际收到的 Token 和目标地址。
( set -eu; p=$(mktemp); trap 'rm -f "$p"' EXIT; curl -fsSL https://relay.hyf2333.top/connect.sh -o "$p"; printf '%s %s\n' '1217225d95dec3835c1ec0623fce81188fb17337dfcdca99e829e641e8a1aeae' "$p" | (sha256sum -c - 2>/dev/null || shasum -a 256 -c -); sh "$p" --token 'HOST_TOKEN' --target '192.168.1.200:22' )
( set -eu; p=$(mktemp); trap 'rm -f "$p"' EXIT; curl -fsSL https://relay.hyf2333.top/connect.sh -o "$p"; printf '%s %s\n' '1217225d95dec3835c1ec0623fce81188fb17337dfcdca99e829e641e8a1aeae' "$p" | (sha256sum -c - 2>/dev/null || shasum -a 256 -c -); sh "$p" --token 'ACCESS_TOKEN' --local-port 2223 )
若本地 2223 已占用,把 --local-port 2223 改成例如 --local-port 2224。若本机没有 sha256sum 或 shasum,先安装系统提供的校验工具或由管理员提供已审核脚本;不要跳过校验。
无需管理员权限或第三方客户端。用系统 PowerShell、OpenSSH。PowerShell 5.1 使用 Invoke-WebRequest -UseBasicParsing,以下命令会校验脚本摘要。
$ErrorActionPreference='Stop'; $p=Join-Path $env:TEMP 'relay-connect.ps1'; Invoke-WebRequest -UseBasicParsing 'https://relay.hyf2333.top/connect.ps1' -OutFile $p; if ((Get-FileHash $p -Algorithm SHA256).Hash.ToLowerInvariant() -ne '1f2e1ae1787b70159678775eae6f3c88bc5152477350f940b13e410ac4fb1956') { Remove-Item $p -Force; throw '脚本哈希不匹配' }; try { & $p -Token 'HOST_TOKEN' -Target '192.168.1.200:22' } finally { Remove-Item $p -Force -ErrorAction SilentlyContinue }
$ErrorActionPreference='Stop'; $p=Join-Path $env:TEMP 'relay-connect.ps1'; Invoke-WebRequest -UseBasicParsing 'https://relay.hyf2333.top/connect.ps1' -OutFile $p; if ((Get-FileHash $p -Algorithm SHA256).Hash.ToLowerInvariant() -ne '1f2e1ae1787b70159678775eae6f3c88bc5152477350f940b13e410ac4fb1956') { Remove-Item $p -Force; throw '脚本哈希不匹配' }; try { & $p -Token 'ACCESS_TOKEN' -LocalPort 2223 } finally { Remove-Item $p -Force -ErrorAction SilentlyContinue }
在 CMD 提示符复制对应命令。CMD 和 PowerShell 的引号规则不同,不要混用。
powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "$ErrorActionPreference='Stop'; $p=Join-Path $env:TEMP 'relay-connect.ps1'; Invoke-WebRequest -UseBasicParsing 'https://relay.hyf2333.top/connect.ps1' -OutFile $p; if ((Get-FileHash $p -Algorithm SHA256).Hash.ToLowerInvariant() -ne '1f2e1ae1787b70159678775eae6f3c88bc5152477350f940b13e410ac4fb1956') { Remove-Item $p -Force; throw '脚本哈希不匹配' }; try { & $p -Token 'HOST_TOKEN' -Target '192.168.1.200:22' } finally { Remove-Item $p -Force -ErrorAction SilentlyContinue }"
powershell.exe -NoProfile -ExecutionPolicy Bypass -Command "$ErrorActionPreference='Stop'; $p=Join-Path $env:TEMP 'relay-connect.ps1'; Invoke-WebRequest -UseBasicParsing 'https://relay.hyf2333.top/connect.ps1' -OutFile $p; if ((Get-FileHash $p -Algorithm SHA256).Hash.ToLowerInvariant() -ne '1f2e1ae1787b70159678775eae6f3c88bc5152477350f940b13e410ac4fb1956') { Remove-Item $p -Force; throw '脚本哈希不匹配' }; try { & $p -Token 'ACCESS_TOKEN' -LocalPort 2223 } finally { Remove-Item $p -Force -ErrorAction SilentlyContinue }"
| 目标服务 | 连接方式示例 |
|---|---|
| SSH | ssh -p 2223 <目标用户名>@127.0.0.1 |
| HTTP | curl http://127.0.0.1:2223/ |
| 其他 TCP | 把客户端连接地址设为 127.0.0.1,端口设为 Access 的本地端口。 |
Access 端口可由 --local-port 指定。若不是 2223,Agent 连接时也必须使用实际端口。TCP 握手成功只证明端口可达;还要按目标服务协议验证响应。
| 现象 | 检查 |
|---|---|
| 403 或 Token 无效 | 核对 Token 类型、是否过期/撤销,以及 Access 是否与有效 Host 配对。 |
| Host 建立失败或一直重试 | 确认设备③可访问目标地址和端口;检查该组 Host Token 是否有效;保持终端在线。 |
| Access 已启动但目标不可达 | 确认对应 Host 连接仍在线、两 Token 属于同一组、Agent 使用了正确的本地端口。 |
| 端口占用 | 为 Access 指定其他 1024–65535 端口,并连接该端口。 |
| 目标 SSH 登录失败 | 隧道只转发 TCP。单独检查目标用户名、登录密钥/密码和目标 SSH 主机指纹;这不等同于中继 Token 失败。 |
| 脚本哈希不匹配 | 停止执行,联系管理员确认脚本是否经过审核并同步更新可信摘要。 |
服务健康检查:https://relay.hyf2333.top/healthz。它只检查中继 API 进程,不检查 Host、Access 或目标机器。