浏览器演示中的 SSH¶
备注
Silkie 的 WebAssembly 演示仍在开发中。本指南记录其网络设计与私有中继设置。在浏览器中试用 Silkie 提供连接控件;端到端 SSH 验证仍待完成。
浏览器演示使用 CheerpX 运行 Linux shell、基本命令、silkie-sprint、silkie-scramble 和 OpenSSH 客户端。网络连接为可选功能,使用访问者自己的 Tailscale 网络。Silkie 不会运营公共 SSH 中继。 shell 和内置游戏必须在未连接 Tailscale 时也能运行。
网页不能直接向端口 22 打开原始 TCP 套接字。CheerpX 通过 Tailscale 集成 提供连接能力。随后可用 netcat 中继,将 SSH 转发到访问者网络中可达的机器。netcat 本身不提供浏览器传输通道:下面的中继方案同时使用 Tailscale。
通过 Tailscale 连接¶
终端启动横幅包含可点击的 连接 Tailscale 链接。点击后会显示另一个用于登录 Tailscale 的链接,将浏览器虚拟机注册到访问者的 tailnet 中。页面会显示连接状态和分配给虚拟机的地址。在宿主计算机的 Tailscale 应用中登录,不会自动连接浏览器虚拟机;虚拟机需要单独登录。
准备 SSH 目标机器:
在目标机器上安装 Tailscale,并登录同一个 tailnet。
启用目标机器的 SSH 服务器。在 macOS 中,该设置为系统设置里的 远程登录;在 Linux 中,启用发行版提供的 OpenSSH 服务。
在 tailnet 访问策略和目标机器防火墙中,允许浏览器虚拟机访问目标的 SSH 端口。
浏览器虚拟机连接后,在其 shell 中运行以下命令,将账户和目标 Tailscale IPv4 地址替换为实际值::
ssh your-user@100.101.102.103
使用目标的 Tailscale 地址,而非 localhost:在演示中,localhost 指向 Linux 虚拟机。连接 tailnet 内的机器不需要出口节点。参阅 Tailscale 连接指南。
此方案使用通过 Tailscale 网络传输的普通 SSH。Tailscale SSH 是另一个可选服务,拥有独立的访问规则;本设置不要求启用它。接受新密钥之前,请验证目标机器的主机密钥指纹。
运行自己的 netcat 中继¶
如果 SSH 目标没有运行 Tailscale,但另一台计算机可以访问它,就可以使用中继。中继计算机必须运行 Tailscale,并能向目标的 SSH 端口建立 TCP 连接。
连接路径如下::
browser guest -> Tailscale -> your relay:2222 -> your SSH server:22
这些命令使用 Nmap Ncat,这是可执行文件名为 ncat 的 netcat 实现。其他名为 nc 的程序使用不同的监听和执行选项。在中继计算机上安装 Ncat,例如::
# macOS (Homebrew)
brew install nmap
# Debian / Ubuntu
sudo apt-get install ncat
在中继计算机上,将 192.168.1.50 替换为 SSH 服务器的局域网地址,然后运行::
ncat --listen "$(tailscale ip -4)" 2222 --keep-open \
--sh-exec "ncat 192.168.1.50 22"
监听器仅绑定中继的 Tailscale IPv4 地址。tailnet 策略和本地防火墙必须允许浏览器虚拟机访问 TCP 端口 2222;目标服务器必须允许中继访问。在命令中固定目标地址;每个传入连接都会启动一个独立的转发进程,连接到该目标。--keep-open 允许重连及独立的并发会话。
如果 SSH 服务器就在中继计算机上,请用 127.0.0.1 替换 192.168.1.50。如果 tailscale ip -4 不可用,请明确使用中继的 Tailscale IPv4 地址作为监听地址。
在浏览器 shell 中,将中继的 Tailscale IPv4 地址和目标账户名替换为实际值::
ssh -o HostKeyAlias=lan-server -p 2222 your-user@100.101.102.103
HostKeyAlias 标识 SSH known-hosts 文件中的目标;为每个目标选择不同且稳定的名称。请核对目标 SSH 服务器的指纹,而不是中继的指纹。SSH 认证和加密在虚拟机与目标之间进行;Ncat 只转发加密数据流,不会代替访问者登录。
使用期间请保持中继命令运行。按 Ctrl+C 停止接收连接,并关闭已有 SSH 会话。无需配置路由器端口转发、公共监听器或 Tailscale 出口节点。此方案使用 Tailscale 的正常基础设施,Silkie 不提供中继服务。
浏览器集成要求¶
CheerpX 集成必须使用访问者的交互式登录。创建虚拟机时配置 networkInterface.loginUrlCb、stateUpdateCb 和 netmapUpdateCb,再由明确的连接操作调用 cx.networkLogin()。将登录 URL 以可打开的链接显示,并在页面上展示认证失败及连接状态变化。参阅 CheerpX 网络功能 和 Linux.create 参考。
不要在页面或虚拟机镜像中嵌入项目持有的 Tailscale 认证密钥,也不要预置公共代理。shell 启动报告必须说明:外部 SSH 需要访问者自己的 Tailscale 连接,并链接到本指南。虚拟机的 SSH 密钥和 known-hosts 数据保存在访问者的虚拟机文件系统中,而不在 Silkie 服务器上。
验证状态¶
已使用 Ncat 7.991 在回环网络上检查此方案:24 个会话、四个并发客户端,以及累计超过 12 MiB 的重复二进制数据交换均通过。另一个一次发送 1 MiB 突发数据的全双工回显测试发生了停滞,原因尚未解决;流式传输检查并不能证明每种流量模式都可靠。在演示发布前,仍需完成浏览器到服务器的 SSH、批量传输,以及通过 CheerpX 和 Tailscale 重连的端到端验证。