telnet失效

问题描述

打包后,telnet进不去目标机环境了

manifest.yml 如下:

环境信息

  • 操作系统:Ubuntu 24.04

  • 软件版本:OpenUBMC2512

答案内容由AI生成,仅供参考:

总结

:red_circle: 根本原因
当前构建为 release 类型,镜像中使用的 busybox 被裁剪,未包含 telnet 服务组件,导致连接失败。

:green_circle: 解决方案

  1. 构建并集成支持 telnet 的自定义 busybox;
  2. 将构建类型改为 debug
  3. 使用串口等替代方式登录系统进行调试。

:pushpin: 建议操作

  • 开发阶段使用 build_type: debug
  • 生产阶段关闭 telnet,仅保留 SSH 和 Web 安全访问通道。

:blue_book: 相关参考文档

点击此处查看详细分析解答

Telnet 失效问题分析与解决方案

问题概述

用户在使用 OpenUBMC 构建系统时,遇到了 telnet 无法访问目标机环境 的问题。此问题出现在构建并打包固件后,尽管之前可能正常运作,但在当前构建版本中 telnet 功能失效。


问题详情

问题描述

  • 现象:打包生成的固件烧录后,无法通过 telnet 连接目标设备。
  • 关键信息:使用的是 release 类型构建(build_type: release),且构建流程未报错。
  • manifest.yml 配置重点
    manufacture:
      WBD:
        package_name: wbd/wbd_output.zip
        build_type: release
        # ... 白牌包配置
    
    表明当前构建为发布版本(release),而非调试版本。

根本原因分析

根据知识库中的多份文档和实体描述,telnet 在 release 构建中默认不可用,主要原因如下:

1. BusyBox 裁剪导致 telnet 缺失

来源:Search Result #1《openUBMC调试工具安装指导》

“openubmc镜像中自带的busybox功能做了裁剪,没有telnet、i2c tools等工具……社区conan脚本仓增加了busybox工具构建脚本,内置了telnet服务拉起功能。”

  • OpenUBMC 默认镜像中使用的 busybox 是经过裁剪的,不包含 telnet、i2c 工具等开发调试功能
  • telnet 属于非安全协议,出于安全考虑,在 release 构建中被主动移除或禁用

2. Debug 与 Release 构建差异

来源Debug Package 实体

  • Debug 包支持 lspropTelnet 等命令,使用 /bin/bash 作为默认 shell。
  • Release 构建通常不包含调试组件,也不会启用 telnet 服务

用户当前构建为 build_type: release,因此即使 manifest 包含了部分脚本(如 afteraction.sh),默认也不会包含完整的 busybox 及其 telnet 组件

3. 依赖自定义 busybox 才能启用 telnet

来源:Search Result #1#3

  • 要启用 telnet,需要手动构建并打包自定义 busybox
  • 默认情况下,该 busybox 会被放置于 /opt/debug/busybox
  • 若未显式集成进 rootfs,则无法使用 telnet。

解决方案

:white_check_mark: 方案一:构建并集成支持 telnet 的自定义 busybox

步骤一:克隆并构建支持 telnet 的 busybox

# 克隆 conan_index 仓库
git clone https://gitcode.com/openUBMC/conan_index.git

# 进入 busybox 源码目录
cd conan_index/recipes/busybox/all

# 构建配置启用 telnet 的 busybox
conan create . openUBMC/release/stable -o busybox:with_telnet=True

步骤二:确保 busybox 打包进镜像

manifest.yml 或构建流程中添加如下逻辑,将自定义 busybox 注入到目标系统中:

components:
  - name: busybox
    repo: https://gitcode.com/your-team/busybox.git
    tag: with-telnet-v1
    output:
      - src: ./output/busybox
        dst: /opt/debug/busybox

或者通过 bingo 构建参数指定扩展包:

bingo publish -z WBD -b openUBMC -bt debug  # 使用 debug 构建类型

:warning: 建议将 build_type 改为 debug 以保留调试功能


:white_check_mark: 方案二:使用仿真环境或备用通道访问系统

若无法修改构建流程,可尝试以下临时方式:

方法 1:使用串口登录(推荐)

  • 物理连接目标设备的串口(UART)
  • 使用串口终端工具登录(波特率一般为 115200)
  • 登录后可查看系统状态、手动启动服务或排查问题

方法 2:通过 SSH 排查(若可用)

若 SSH 仍可用,可通过 SSH 登录后执行以下命令排查:

# 查看 telnet 端口是否监听
netstat -tuln | grep 23

# 检查是否有 inetd 或 xinetd 启动 telnet
ps aux | grep inetd

# 查看日志
journalctl | grep telnet

方法 3:检查 BusyBox 是否存在

ls /opt/debug/busybox
# 若存在,可尝试手动启动 telnet
/opt/debug/busybox telnetd -l /bin/sh -p 23

:white_check_mark: 方案三:切换构建类型为 debug

修改 manifest.yml 中的构建类型:

manufacture:
  WBD:
    build_type: debug  # 改为 debug

然后重新构建:

bingo publish -z WBD -b openUBMC -bt debug -r openubmc_dev

:white_check_mark: Debug 构建会自动包含调试工具和 telnet 支持,适合开发阶段使用。


预防建议

建议项 说明
区分 debug 与 release 构建用途 debug 用于开发测试,release 用于生产部署
仅在 debug 环境启用 telnet 避免 telnet 因安全性问题被滥用
提供 fallback 调试手段 如串口、JTAG、SOL(Serial Over LAN)等
打包前验证调试工具是否存在 构建完成后检查 /opt/debug/busybox --help 是否列出 telnetd

总结

:red_circle: 根本原因
当前构建为 release 类型,镜像中使用的 busybox 被裁剪,未包含 telnet 服务组件,导致连接失败。

:green_circle: 解决方案

  1. 构建并集成支持 telnet 的自定义 busybox;
  2. 将构建类型改为 debug
  3. 使用串口等替代方式登录系统进行调试。

:pushpin: 建议操作

  • 开发阶段使用 build_type: debug
  • 生产阶段关闭 telnet,仅保留 SSH 和 Web 安全访问通道。

:blue_book: 相关参考文档

看一下你的编译命令和manifest中busybox放的位置,release包编译不会带debug_dependencies下的配置组件

刷了个debug包,也进不去

编译命令是什么,manifest里在哪里配置的busybox

命令:bmcgo publish -bt debug -z WBD -b openUBMC -r openubmc_dev