在 Cisco 设备上使用 Fabric:“线路具有无效的自动命令”

网络工程 cisco催化剂 cisco-ios-12
2021-07-18 21:36:14

我不知道该从哪里问这个问题,但这似乎是交换机方面的问题,所以我想我会先从这里开始。

我正在开发一个小项目,使用Fabric自动批量更新配置文件我已经安装了所有东西并且在 Python 中似乎可以正常工作,并且已经准备好开始构建一些测试。但是,我通过 Fabric 提供的所有命令都返回以下错误:

行具有无效的自动命令 "/bin/bash -l -c " X ""

其中X是我试图在交换机上运行的命令。我无法理解为什么会失败,也许有人可以提供解释?这是需要在 Cisco 端配置的东西吗?我正在运行 12.2 的 3750 交换机上对此进行测试,不确定要提供哪些其他详细信息。

3个回答

Fabric设计有一定的执行模型它假设默认情况下 Bash 将在远程运行以执行您的命令。

您可以更改远程命令的内容。当您向 CLI(例如 Cisco IOS)发送命令时,您可以尝试将远程命令更改为单个空格。

有关“shell”设置,请参阅Fabric 的环境词典

所以事实证明,当您从 Fabric 调用一个名为 shell=True 的命令时,隐含了一个参数。为了让事情正常工作,我必须指定一个参数shell=False

例如,这是我正在运行的一个失败的命令。

def config_t():
  run("config t")

产生的Line has invalid autocommand "/bin/bash -l -c "config t""错误。更改您的命令以包含 shell=False

def config_t():
    run("config t", shell=False)

进行此更改后,一切对我来说都很顺利。有关更多信息,文档中有一节对此进行了描述。织物文档

我不熟悉 Fabric,但从错误中可以看出它正在尝试运行 shell (bash) 来运行您选择的命令。IOS 设备没有“外壳”;只需给 CLI 运行命令即可。

(换句话说,Fabric 似乎没有被设计为与任何非 UNIX(tm) 系统对话。)