Linux下如何后台运行telnet并记录全部会话输出到文件
根因说明
telnet 是交互式终端程序,默认会将标准输出、标准错误绑定到控制终端。当后台运行脱离终端后,程序的输出缓冲机制会切换为全缓冲,仅在缓冲区填满或进程退出时才会写入文件;且 telnet 会话的交互内容默认不会直接写入重定向的普通文件,只有连接阶段的状态信息会直接输出,因此会出现日志不全的问题。
可行解决方案
方案1:用script命令捕获全量终端输出(最推荐)
script 是 Linux 系统内置的终端会话录制工具,可完整捕获所有终端输出,无需额外依赖,兼容性最好:
script -q -c "telnet 替换为你的目标IP" new.txt > /dev/null 2>&1 & disown
参数说明:
-q:启用静默模式,不打印 script 自身的启动、退出提示信息-c:指定要执行的目标命令,此处填写你要运行的 telnet 指令- 末尾的 new.txt 即为存储全量日志的文件,会包含从 telnet 启动到连接关闭的所有输出内容
方案2:用unbuffer禁用输出缓冲
如果要保留原有的重定向写法,可以用 expect 工具包提供的 unbuffer 强制 telnet 输出使用行缓冲,实时写入文件:
# Debian/Ubuntu 系安装依赖 apt install -y expect # 后台运行telnet并实时写入日志 unbuffer telnet 替换为你的目标IP >> new.txt 2>&1 & disown
方案3:tcpdump 抓包兜底
如果需要完整记录 telnet 会话的所有交互流量,也可以直接抓对应端口的网络包,后续按需解析:
# 抓目标IP 23端口的所有流量,保存为pcap文件 tcpdump -i any host 替换为你的目标IP and port 23 -w telnet_traffic.pcap &
内容的提问来源于stack exchange,提问作者Tan512
相关产品推荐
相关产品推荐

