ANSIBLE模塊 - shell和command區(qū)別

Ansible 提供了大量的模塊(All Modules)供執(zhí)行 AD-Hoc 和撰寫 playbook。 有些模塊有很多通用性, 但設(shè)計為多個還是有部分區(qū)別的。

shell vs. command

一個典型的例子就是 shellcommand 模塊. 這兩個模塊在很多情況下都能完成同樣的工作, 以下是兩個模塊之前的區(qū)別:

  • command 模塊命令將不會使用 shell 執(zhí)行. 因此, 像 $HOME 這樣的變量是不可用的。還有像<, >, |, ;, &都將不可用。
  • shell 模塊通過shell程序執(zhí)行, 默認是/bin/sh, <, >, |, ;, & 可用。但這樣有潛在的 shell 注入風(fēng)險, 后面會詳談.
  • command 模塊更安全,因為他不受用戶環(huán)境的影響。 也很大的避免了潛在的 shell 注入風(fēng)險.

結(jié)論

結(jié)論是兩個模塊都要避免使用, 你應(yīng)該優(yōu)先考慮更具體的 ansible 模塊。 比如用 command 或者 shell 執(zhí)行 yum 命令前, 應(yīng)該先了解到直接的 yum 模塊。使用具體模塊比執(zhí)行命令要優(yōu)雅很多, 因為這些模塊設(shè)計都是具有冪等性的, 并滿足其他標(biāo)準(zhǔn), 如異常處理等.

如果沒有更具體的模塊, 相對來說 command 更安全點。

如果您需要用戶環(huán)境和流式操作,則只能使用 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 }} , 確保輸入不包含分號或者流式操作.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 為何叫做 shell ? shell prompt(PS1) 與 Carriage Return(CR) 的關(guān)系?...
    Zero___閱讀 3,343評論 3 49
  • 一.ansible (1) ansible: ansible是一款新出現(xiàn)的自動化運維系統(tǒng),基于python開發(fā)并集...
    楠人幫閱讀 2,142評論 0 8
  • ansible-playbook playbook簡介 playbook是ansible用于配置,部署,和管理被控...
    bdslinux閱讀 11,175評論 1 12
  • 青春年少,無瘋狂!種種經(jīng)歷,只能靠自己去把握!每一個選擇,都是一條世界線。都是自己的人生。不要后悔自己的選擇,也不...
    羽落軒林閱讀 372評論 0 0
  • 大學(xué)時她是校花,姣好的面容,長至腰際的頭發(fā)隨風(fēng)飛揚,清脆的笑聲像銀鈴一樣落到他的心里,激起了層層漣漪。他展開了猛烈...
    米小藍_mi閱讀 1,186評論 0 0

友情鏈接更多精彩內(nèi)容