我是 ansible 世界的新手,任何人都可以帮助我理解 ansible 中 shell 和命令之间的区别。何时使用 shell,何时使用命令。我知道一个用例
命令模块更安全,因为它不受用户环境的影响。
小智 16
Ansible Shell 模块允许您在远程主机上运行任意命令,就像您登录到 shell 一样。Shell 和 Command 模块非常相似,主要区别在于 shell 模块不转义命令,允许您使用重定向(“大于”、“小于”)、管道(“|”)和布尔值等 shell 运算符运算符(“&&”、“||”)。这确实意味着 Shell 模块容易受到命令注入/shell 注入的影响,但是在 Shell 模块中使用变量时,通过使用“引用”过滤器很容易克服这一点。
参考: Ansible Shell 模块教程 - 完整的初学者指南
tas*_*inp 12
根据文档:
它几乎与命令模块完全一样,但通过远程节点上的 shell (/bin/sh) 运行命令。
和:
命令将不会通过 shell 处理,所以像 $HOME 这样的变量和像 "<", ">", "|", ";" 这样的操作 和“&”将不起作用。如果您需要这些功能,请使用 shell 模块。
来自命令而不是 shell规则的ansible-lint文档。
当实际上不需要时,该规则标识了
shell模块的使用而不是模块的使用。commandShell 比命令慢得多,应该避免使用,除非有特殊需要使用 shell 功能,例如环境变量扩展或使用管道链接多个命令。