2017-06-29 101 views
0

我正在編寫一個Ansible劇本來自動執行各種主機上的一系列sudo命令。當我在puTTY中單獨執行這些命令時,我沒有權限問題,因爲我已被授予適當的訪問權限。然而,當我嘗試創建一個劇本做同樣的事情,我告訴無法在Ansible劇本中運行sudo命令

不允許用戶執行......在HOST_NAME

例如,如果我這樣做$ sudo ls /root/,我沒有問題,而且一旦我進入我的密碼,可以看到/根/

在我Ansible劇本的情況下的內容...

--- 
- host: servers 
    tasks: 
    - name: ls /root/ 
    shell: ls /root/ 
    become: true 
    become_method: sudo 

...我的n得到上面提到的錯誤。

任何想法,爲什麼會這樣?它似乎告訴我,我沒有權限運行一個命令,否則我可能會在單個puTTY終端中運行該命令。

+0

發佈'-vvv' ansible logs。 –

回答

1

[]在各種主機上自動執行一系列sudo命令。當我單獨執行這些命令[]

任何想法,爲什麼會這樣?

聽起來像是你在sudoers文件中配置特定的命令(可惜你沒有提供足夠的細節,還好你問的「點子」不是真正的原因)。

Ansible shell模塊不跑你指定與sudo前綴的命令 - 它運行與sudo整個shell會話,那麼該命令不符合您在sudoers配置的內容。

要麼允許所有命令以對於Ansible用戶提升的權限運行,要麼使用raw模塊而不是shell

+0

謝謝@techraf。我很好奇,shell模塊和原始模塊有什麼區別?在這種情況下,我將如何利用原始模塊來獲得優勢? –

+0

'shell'是一個用Python編寫的模塊,它使用給定的命令作爲命令字符串調用shell,比如'bash -c「echo test」'(但事實上有點複雜)。 'raw'在SSH會話中直接運行給定的命令(不涉及Python)。 – techraf

+0

如果我使用原始模塊,那麼playbook可以保持不變,除了在'raw:'之間交換,'我現在有'shell''嗎? –