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

如何通过Robot Framework Process库执行SSH命令及问题排查

问题描述

通过Robot Framework执行SSH命令测试网络中断,遇到以下问题:

  • 目标命令:ssh it@128.0.0.1 sudo ifconfig ens192 down,手动执行正常(目标IP无法ping通),但通过Run Process执行时报错:
    /bin/sh: ssh it@128.0.0.1 sudo ifconfig ens192 down: command not found
    
  • 尝试在命令中添加PATH参数后,报错:
    /bin/sh: ssh it@128.0.0.1 PATH=/usr/sbin sudo ifconfig ens192 down: No such file or directory
    
  • 补充环境信息:
    • it用户由useradd it创建并复制主目录内容
    • 已配置sudoers允许it免密执行ifconfig
    • 已完成SSH免密登录配置
    • SSH会话中基础命令异常:ls偶尔可用,echo无法执行,无法查看$PATH
核心原因

你在使用Run Process时错误地给整个命令加上了单引号,当shell=True时,shell会把带单引号的整个字符串当作一个完整命令去系统路径中查找,而非解析成ssh命令加后续参数,这才是触发"command not found"的根本原因,并非一开始推测的PATH为空问题。

解决方案

1. 修正Run Process的命令格式(优先推荐)

方式1:去掉命令的单引号,直接传入命令字符串

当shell=True时,无需给整个命令加单引号,直接写完整命令即可:

Run Process    ssh it@128.0.0.1 sudo ifconfig ens192 down    shell=True    stdout=stdout    stderr=stderr

方式2:拆分命令与参数,不依赖shell(更安全规范)

Run Process支持直接拆分命令和参数,不需要启用shell,这种方式能避免shell解析的问题:

Run Process    ssh    it@128.0.0.1    sudo    ifconfig    ens192    down    stdout=stdout    stderr=stderr

2. 解决SSH会话PATH缺失问题(若后续仍有命令找不到)

如果确认目标机it用户的PATH确实不包含sudo/ifconfig的路径,可通过以下方式处理:

方式1:使用命令的绝对路径

直接指定sudo和ifconfig的绝对路径(根据实际系统路径调整,通常sudo在/usr/bin,ifconfig在/usr/sbin):

Run Process    ssh it@128.0.0.1 /usr/bin/sudo /usr/sbin/ifconfig ens192 down    shell=True    stdout=stdout    stderr=stderr

方式2:在SSH会话中显式设置PATH

通过ssh传递命令时,先设置PATH再执行目标命令,注意用&&连接:

Run Process    ssh it@128.0.0.1 'PATH=/usr/bin:/usr/sbin:$PATH && sudo ifconfig ens192 down'    shell=True    stdout=stdout    stderr=stderr
额外排查步骤
  • 先测试简单SSH命令,确认Robot Framework能正常与目标机通信并获取PATH:
    Run Process    ssh it@128.0.0.1 echo \$PATH    shell=True    stdout=stdout    stderr=stderr
    Log    ${stdout}
    
    注意这里$PATH要加转义符\,避免被本地shell解析。

内容的提问来源于stack exchange,提问作者remington howell

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 14:55:21