You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在socat反向shell服务端查看与客户端一致的终端显示内容

Socat交互式终端服务会话审计方案

场景说明

基于socat搭建交互式程序远程访问服务,可正常承载bash反向shell、Python交互环境、vim、irssi等程序的运行需求,最初计划通过socat -v verbose参数输出日志实现客户端操作监控,但该方式输出的日志完全不具备可读性,无法满足审计要求。

测试基准配置

  • 测试脚本script.sh:
#!/bin/bash
while read -p 'Tell me something: ' MSG;
do 
    echo "I got $MSG";
done
  • 初始服务端启动命令:
socat -v tcp-listen:9099,reuseaddr exec:script.sh,pty,stderr,setsid,sane
  • 客户端连接命令:
socat tcp-connect:服务端IP:9099 file:$(tty),rawer

现存问题

  • socat默认verbose输出逐字符拆分传输字节,夹杂大量时间戳、数据长度标记,无法直接识别有效交互内容
  • 运行vim等带文本UI、色彩输出的程序时,日志混杂大量终端控制转义序列,完全无法提取可读内容
  • 已验证无效的排查方向:grep过滤日志行、调整socat icanon参数、修改stty终端模式、cut/sed直接截取日志字段
  • 约束要求:最终方案需尽可能还原客户端侧实际看到的终端显示内容,优先保留socat原生技术栈,方便后续接入SSL加密能力。

落地方案

方案1:PTY层旁路录屏(推荐,兼容性最好)

不依赖socat自带的-v参数,在socat执行目标程序的层嵌入Linux原生script终端录屏工具,直接从PTY虚拟终端侧捕获完整的输入输出流,自动处理行缓冲、终端渲染逻辑,完全不侵入socat原有核心逻辑,后续接入SSL仅需替换socat的监听/连接类型为openssl系列即可,无需调整日志模块。
改造后服务端启动命令:

mkdir -p /var/log/socat
socat tcp-listen:9099,reuseaddr exec:"script -q -f -c './script.sh' /var/log/socat/session_$(date +%Y%m%d_%H%M%S).log",pty,stderr,setsid,sane

参数说明:

  • -q:静默模式,屏蔽script工具自带的启动、退出提示行
  • -f:每次写入操作后立即刷盘,支持实时查看会话日志
  • -c:指定需要运行的目标交互式程序
  • 路径末尾为日志存储位置,每次客户端连接会生成独立的会话日志文件

实时查看当前会话内容直接执行tail -f 对应日志路径即可。如果需要剥离日志中的色彩、光标移动等终端控制序列,输出纯文本内容,使用ansi2txt工具处理即可:

# Debian/Ubuntu系安装命令,其余发行版找对应源里的colorized-logs包即可
apt install -y colorized-logs
# 转储纯文本可读日志
cat /var/log/socat/session_xxx.log | ansi2txt > readable_session.log

该方案对vim、htop、tmux这类频繁刷新全屏的TUI程序捕获效果和客户端实际显示内容一致,无冗余字符。

方案2:改造socat verbose输出流(轻量无额外录屏依赖)

如果需要沿用socat -v 参数的输出逻辑,可通过调整PTY参数增加行缓冲,后置流处理清洗冗余内容,改造后启动命令:

mkdir -p /var/log/socat
socat -v tcp-listen:9099,reuseaddr exec:script.sh,pty,stderr,setsid,sane,ctty,raw,echo=0 2>&1 | stdbuf -oL ansi2txt | sed -u 's/^[<>] [0-9:.]* //g' > /var/log/socat/live.log

该方案缺陷比较明显:由于-v捕获的是网络传输层的原始字节流,而非PTY渲染后的最终终端内容,针对全屏TUI程序会残留大量光标移动、屏幕刷新的冗余序列,清洗后依然存在内容重复、排版错乱问题,仅适合简单命令行交互场景的审计。

选型建议

  • 生产环境优先选择方案1,捕获准确率高,兼容所有类型的交互式程序,性能开销可忽略,完全适配socat的SSL、访问控制、流量转发等原生能力
  • 仅做简单CLI程序调试、无TUI程序承载需求时可选择方案2,无需依赖script录屏工具

内容的提问来源于stack exchange,提问作者Paulo Amaral

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 10:57:19