1. 项目定位与核心用途
tty2web 是一个开源命令行工具,设计目标是将本地终端命令实时转换为 Web 应用,使用户能通过浏览器访问交互式终端会话。它继承自 Gotty 但进行了大幅增强,专注于提供简单、高效且功能丰富的远程终端共享方案,适用于开发、运维和安全测试等多种领域。工具通过 WebSocket 实现终端数据的双向流式传输,并结合 xterm.js 在前端渲染完整的终端体验。
tty2web 是一个开源工具,可将本地终端会话通过浏览器实时访问,支持 bind/reverse 连接、DNS 隧道、文件传输和 API 执行。本页提供详细安装方法、使用示例、功能说明及架构解析,帮助您快速掌握这一远程终端解决方案。
tty2web 是一个基于 Gotty 改进的开源命令行工具,可将本地终端会话通过浏览器实时访问,支持 bind/reverse 连接、DNS 隧道、双向文件传输及 API 执行,适用于远程管理、渗透测试和 NAT 穿透等场景。
tty2web 是一个开源命令行工具,设计目标是将本地终端命令实时转换为 Web 应用,使用户能通过浏览器访问交互式终端会话。它继承自 Gotty 但进行了大幅增强,专注于提供简单、高效且功能丰富的远程终端共享方案,适用于开发、运维和安全测试等多种领域。工具通过 WebSocket 实现终端数据的双向流式传输,并结合 xterm.js 在前端渲染完整的终端体验。
项目主要解决远程终端访问中的三大挑战:一是网络限制下的连接建立,通过 bind/reverse 模式实现 NAT 穿透和防火墙绕过,使客户端能主动连接或被动接收连接;二是环境约束下的命令执行,利用 DNS 隧道在仅允许 DNS 流量的网络中建立通信通道;三是协作与文件交换需求,提供双向文件传输(下载/上传)和 API 执行能力,避免依赖额外工具如 SCP 或 SSH,简化工作流程。
常见使用场景包括:远程服务器管理(通过浏览器直接操作命令行,无需 SSH 客户端);渗透测试与红队行动(利用 reverse shell 和 SOCKS5 代理进行内网渗透与横向移动);临时技术协作(共享终端会话进行联合调试或教学演示);以及受限网络环境下的命令执行(如企业防火墙仅开放 DNS 端口时)。此外,API 模式允许程序化执行命令,适合集成到自动化运维系统。
tty2web 提供三种安装方式:一是从 GitHub Releases 页面下载预编译的二进制文件(推荐生产使用,选择 Latest release 版本,注意 darwin_amd64 为 macOS 版本);二是通过 Go 环境安装:克隆仓库后执行 `go install`(需 Go 1.18+,因使用 fork 的 pty 模块需先 checkout 源码);三是使用 Makefile 构建:运行 `make tools` 后 `make tty2web`。Windows 用户需下载支持 ConPTY 的版本。
基本用法为 `tty2web <command>`,默认监听 0.0.0.0:8080 并提供 Web 界面。Bind 模式:`tty2web --port 8081 top`,浏览器访问 IP:8081;添加 `-w` 允许浏览器写入终端。Reverse 模式:先启动监听 `tty2web --listen :4444 --server 127.0.0.1:8000`,再在目标机连接 `tty2web --connect <监听IP>:4444 -w /bin/sh`,最后访问 http://127.0.0.1:8000。其他选项:`--api` 启用命令 API,`--regeorg` 启用 SOCKS5 代理,`--all` 开启全部特性,`--credential` 设置基础认证。
项目支持 DNS 隧道(需自有域名),通过 `--dns` 和 `--dns-listen` 启用。配置可通过环境变量或文件(默认 ~/.tty2web)覆盖默认值。前端资源嵌入在二进制中(bindata),便于单文件分发。安全方面,`--permit-write`、`--api` 等选项赋予远程完整控制权,需谨慎使用并建议配合认证。代码结构清晰:main.go 处理 CLI 路由,server 模块提供 HTTP/WebSocket 服务,webtty 实现终端协议,backend/localcommand 管理 PTY,rdns 处理 DNS 隧道。依赖包括 gorilla/websocket、pty(fork 版本)等。
提供三种方式:从 GitHub Releases 下载最新稳定版二进制文件(推荐);使用 Go 安装:克隆仓库后执行 `go install`(需 Go 1.18+);或通过 Makefile 构建:运行 `make tools` 后 `make tty2web`。Windows 用户请选择对应平台版本。
reverse 模式需两步:首先在监听方运行 `tty2web --listen :4444 --server 127.0.0.1:8000` 启动监听;然后在目标机运行 `tty2web --connect <监听IP>:4444 -w /bin/sh` 发起连接;最后在浏览器访问 http://127.0.0.1:8000 即可看到终端。
DNS 隧道需要您控制一个(子)域名,并通过 `--dns` 指定域名、`--dns-listen` 指定监听地址来启用。具体参数用法未在 README 中详述,但该功能基于 github.com/kost/dnstun 库实现,允许在仅开放 DNS 端口的网络中传输数据。
这些选项赋予远程用户直接写入终端或执行任意命令的权限,存在较高安全风险。建议仅在可信网络环境中使用,并务必配合 `--credential` 设置基本认证,或通过防火墙限制访问来源。生产环境应谨慎评估。
支持。项目明确包含 Windows 后端实现(backend/local_command_windows.go)并支持 ConPTY(Windows 10+ 的现代终端模拟器接口)。Windows 用户可从 Releases 页面下载对应版本二进制文件使用。