ANSIBLE模块 - shell和command区别

Ansible 提供了大量的模块(All Modules)供执行 AD-Hoc 和撰写 playbook。 有些模块有很多通用性, 但设计为多个还是有部分区别的。

shell vs. command

一个典型的例子就是 shellcommand 模块. 这两个模块在很多情况下都能完成同样的工作, 以下是两个模块之前的区别:

  • command 模块命令将不会使用 shell 执行. 因此, 像 $HOME 这样的变量是不可用的。还有像<, >, |, ;, &都将不可用。
  • shell 模块通过shell程序执行, 默认是/bin/sh, <, >, |, ;, & 可用。但这样有潜在的 shell 注入风险, 后面会详谈.
  • command 模块更安全,因为他不受用户环境的影响。 也很大的避免了潜在的 shell 注入风险.

结论

结论是两个模块都要避免使用, 你应该优先考虑更具体的 ansible 模块。 比如用 command 或者 shell 执行 yum 命令前, 应该先了解到直接的 yum 模块。使用具体模块比执行命令要优雅很多, 因为这些模块设计都是具有幂等性的, 并满足其他标准, 如异常处理等.

如果没有更具体的模块, 相对来说 command 更安全点。

如果您需要用户环境和流式操作,则只能使用 shell 模块,但您要小心。 请记住 ansible 官方给出的提示, 如果将 shell 模块和变量一起使用:

To sanitize any variables passed to the shell module, you should use “{{ var | quote }}” instead of just “{{ var }}” to make sure they don’t include evil things like semicolons.)

即: 如果你需要安全的使用带有变量的 shell 模块, 使用{{ var | quote }} 代替 {{ var }} , 确保输入不包含分号或者流式操作.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 为何叫做 shell ? shell prompt(PS1) 与 Carriage Return(CR) 的关系?...
    Zero___阅读 8,417评论 3 49
  • 一.ansible (1) ansible: ansible是一款新出现的自动化运维系统,基于python开发并集...
    楠人帮阅读 6,057评论 0 8
  • ansible-playbook playbook简介 playbook是ansible用于配置,部署,和管理被控...
    bdslinux阅读 13,759评论 1 12
  • 青春年少,无疯狂!种种经历,只能靠自己去把握!每一个选择,都是一条世界线。都是自己的人生。不要后悔自己的选择,也不...
    羽落轩林阅读 2,732评论 0 0
  • 大学时她是校花,姣好的面容,长至腰际的头发随风飞扬,清脆的笑声像银铃一样落到他的心里,激起了层层涟漪。他展开了猛烈...
    米小蓝_mi阅读 4,770评论 0 0

友情链接更多精彩内容