【发布时间】:2019-06-19 08:32:50
【问题描述】:
我是 ansible 世界的新手,任何人都可以帮助我理解 ansible 中 shell 和命令之间的区别。何时使用 shell 何时使用命令。我知道一个用例
命令模块更安全,不受用户环境影响。
【问题讨论】:
-
blog.confirm.ch/ansible-modules-shell-vs-command -- 此链接将包含有关模块之间差异的信息。
标签: ansible
我是 ansible 世界的新手,任何人都可以帮助我理解 ansible 中 shell 和命令之间的区别。何时使用 shell 何时使用命令。我知道一个用例
命令模块更安全,不受用户环境影响。
【问题讨论】:
标签: ansible
Ansible Shell 模块允许您在远程主机上运行任意命令,就像您登录到 shell 一样。 Shell 和 Command 模块非常相似,主要区别在于 shell 模块不转义命令,允许您使用 shell 运算符,如重定向(“大于”、“小于”)、管道(“|”)和布尔值运算符(“&&”、“||”)。这确实意味着 Shell 模块容易受到命令注入/shell 注入的影响,但在 Shell 模块中使用变量时,通过使用“引用”过滤器很容易克服这一点。
参考: Ansible Shell Module Tutorial - Complete Beginner's Guide
【讨论】:
根据文档:
shell – Execute shell commands on targets
它几乎与命令模块完全相同,但通过远程节点上的 shell (/bin/sh) 运行命令。
和:
command – Execute commands on targets
命令不会通过 shell 处理,所以像 $HOME 这样的变量和像“”、“|”、“;”这样的操作而“&”将不起作用。如果您需要这些功能,请使用 shell 模块。
【讨论】:
command 为您提供更高的安全性(或更所谓的隔离)。换句话说,您的命令执行不受用户环境变量的影响。而shell 与您在终端上执行命令非常相似