【问题标题】:Difference between shell and command in ansibleansible中shell和命令之间的区别
【发布时间】:2019-06-19 08:32:50
【问题描述】:

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

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

【问题讨论】:

标签: ansible


【解决方案1】:

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

参考: Ansible Shell Module Tutorial - Complete Beginner's Guide

【讨论】:

    【解决方案2】:

    根据文档:

    shell – Execute shell commands on targets

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

    和:

    command – Execute commands on targets

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

    【讨论】:

    • 如果在某些情况下,我可以同时使用两者。哪个更受欢迎?
    • command 为您提供更高的安全性(或更所谓的隔离)。换句话说,您的命令执行不受用户环境变量的影响。而shell 与您在终端上执行命令非常相似
    猜你喜欢
    • 1970-01-01
    • 2021-11-06
    • 2010-12-16
    • 1970-01-01
    • 1970-01-01
    • 2020-09-09
    • 2019-07-19
    • 1970-01-01
    • 2015-04-25
    相关资源
    最近更新 更多