ansible中shell和command的区别

pra*_*ant 34 ansible

我是 ansible 世界的新手,任何人都可以帮助我理解 ansible 中 shell 和命令之间的区别。何时使用 shell,何时使用命令。我知道一个用例

命令模块更安全,因为它不受用户环境的影响。

小智 16

Ansible Shell 模块允许您在远程主机上运行任意命令,就像您登录到 shell 一样。Shell 和 Command 模块非常相似,主要区别在于 shell 模块不转义命令,允许您使用重定向(“大于”、“小于”)、管道(“|”)和布尔值等 shell 运算符运算符(“&&”、“||”)。这确实意味着 Shell 模块容易受到命令注入/shell 注入的影响,但是在 Shell 模块中使用变量时,通过使用“引用”过滤器很容易克服这一点。

参考: Ansible Shell 模块教程 - 完整的初学者指南


tas*_*inp 12

根据文档:

shell – 在目标上执行 shell 命令

它几乎与命令模块完全一样,但通过远程节点上的 shell (/bin/sh) 运行命令。

和:

command – 在目标上执行命令

命令将不会通过 shell 处理,所以像 $HOME 这样的变量和像 "<", ">", "|", ";" 这样的操作 和“&”将不起作用。如果您需要这些功能,请使用 shell 模块。

  • 如果在某些情况下,我可以同时使用两者。哪一个是首选? (2认同)
  • `command` 为您提供更多的安全性(或更所谓的隔离)。换句话说,你的命令执行不受用户环境变量的影响。而“shell”与在终端上执行命令非常相似 (2认同)

Law*_*ker 5

来自命令而不是 shell规则的ansible-lint文档。

当实际上不需要时,该规则标识了shell模块的使用而不是模块的使用。commandShell 比命令慢得多,应该避免使用,除非有特殊需要使用 shell 功能,例如环境变量扩展或使用管道链接多个命令。