Skip to content

优化 shell 交互体验,增加 PTY/ConPTY 支持#78

Open
sangnigege wants to merge 1 commit into
ph4ntonn:masterfrom
sangnigege:master
Open

优化 shell 交互体验,增加 PTY/ConPTY 支持#78
sangnigege wants to merge 1 commit into
ph4ntonn:masterfrom
sangnigege:master

Conversation

@sangnigege

@sangnigege sangnigege commented Jun 27, 2026

Copy link
Copy Markdown

说明

之前 shell 使用普通管道实现,不是真正的终端环境,在一些交互场景下体验不太好,比如方向键、补全、全屏程序、终端控制字符等支持有限,而且不能滚动。涉及到一些交互式操作时,往往手动升级为交互式shell,比较不便。

这个 PR 在保留原有 shell 实现的基础上,增加了一套基于 PTY/ConPTY 的交互式终端通道。支持时默认使用新的交互式 shell;不支持或启动失败时,会回退到原来的 shell 逻辑。

主要改动

  • 新增 Terminal Stream 相关协议消息,用于终端启动、数据传输、窗口大小变化和退出通知。
  • Linux/macOS/FreeBSD 下使用 PTY 启动交互式 shell。
  • Windows 下在系统支持 ConPTY 时使用 ConPTY 启动交互式 shell。
  • 目标端不支持或启动失败时,自动回退到原来的 shell。
  • 原来的 shell 保留为 legacy_shell,方便在网络较差或兼容性场景下手动使用。
  • Unix-like admin 侧支持窗口大小变化同步。
  • 对协议解包增加了一些边界检查,避免异常数据导致 panic。

兼容性

  • 原有 shell 逻辑没有移除。
  • 老版本 agent 不支持 Terminal Stream 时,会继续走原 shell。
  • Windows 旧系统不支持 ConPTY 时,会自动回退到原 shell。
  • 多级节点转发仍然走原有消息路由逻辑。

测试

本地已测试:

  • go test ./...
  • go vet ./...
  • make all
  • admin/agent 本地连接后,新 shell 可正常启动和执行命令
  • legacy_shell 可正常使用
  • 新 shell 启动失败时可以回退到原 shell
  • go1.26.1 linux/amd64下,与未修改前相比,总体体积增加约0.5%

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant