2017-09-15 68 views
0

是否有可能知道到底是什麼命令下面Ansible代碼將執行遠程服務器獲取正在執行

- name: Ensure apache is running 
    service: name=httpd state=started 
    become: true 

我相信用戶應該有適當的須藤權利確切Ansible命令。但是,我不斷收到sudo: a password is required

更新#1

在提供意見光,這裏是我的全部Ansible命令:

ANSIBLE_KEEP_REMOTE_FILES=1 sudo -u userA ansible-playbook ssl_playbook.yml -i inventories/staging --extra-vars "target=my_server_set" --private-key=/path/to/ssh.key --u userB -vvv 
  • 用戶B在這裏指定的SSH密鑰已配置
  • 遠程用戶
  • userB具有有限的sudo權限。我不能改變這個不幸的是,我不是服務器管理員。
  • userB目前已配置爲通過SSH/Key訪問一堆服務器,它似乎是Ansible的主要候選人。我目前能夠通過SSH(Apache,Tomcat,Jenkins等)手動管理我的所有中間件,並希望使用Ansible自動化它。
+0

'ansible-playbook -vvv'會顯示你啓動模塊的確切命令。 –

+0

我一直在運行'-vvvv',並注意到它使用'sudo -H -S -n -u root ...'運行.tmp文件。我還啓用了環境變量'ANSIBLE_KEEP_REMOTE_FILES',以便我可以查看這些文件。但是,一旦我打開一個.tmp文件,我無法確定發生了什麼。 – TekiusFanatikus

+0

你可以在沒有密碼的情況下在遠程主機上手動運行'sudo'嗎?你能告訴我們你的「sudoers」配置嗎?其他任務是否失敗,或者只是「服務」任務? – larsks

回答

0

回答你的第一個問題(「是否有可能知道到底是什麼命令下面Ansible代碼將執行遠程服務器上?」)通常是「只通過檢查相應模塊源」。給定的模塊可以運行多個命令以完成它的操作。

您所看到的錯誤消息(「sudo: a password is required.」)不表示遠程用戶沒有適當的sudo權限。它只暗示遠程用戶沒有配置爲無密碼sudo。你有兩個選項:

  1. 到Ansible提供密碼:

    ansible-playbook -K secretpassword ... 
    
  2. 修改遠程主機上的sudoers配置,以允許無密碼sudo

    remoteuser ALL=(ALL) NOPASSWD:ALL 
    

須藤涉及一組有限的命令的配置可能不會rk,因爲Ansible正在使用sudo運行腳本。例如,如果我跑ansible-playbook -vvv針對以下劇本:

- hosts: localhost 
    gather_facts: false 
    tasks: 
    - ping: 
     become: true 

我會看到:

<localhost> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 -o ControlPath=/home/lars/.ansible/cp/8a5a4c6a60 -tt localhost '/bin/sh -c '"'"'sudo -H -S -n -u root /bin/sh -c '"'"'"'"'"'"'"'"'echo BECOME-SUCCESS-rebjujbhceobxvfuylirykxzgdonillt; /usr/bin/python /home/lars/.ansible/tmp/ansible-tmp-1505503292.11-47458712165303/ping.py; rm -rf "/home/lars/.ansible/tmp/ansible-tmp-1505503292.11-47458712165303/" > /dev/null 2>&1'"'"'"'"'"'"'"'"' && sleep 0'"'"'' 

換句話說,ansible運行:

sudo -H -S -n -u root /bin/sh -c '...embedded script here...' 

唯一的命令sudo永遠看到的是/bin/sh,這意味着sudo配置將您限制爲只有某些命令註定會失敗。

如果您無法修復遠程sudo配置,您可能需要調查安全模塊raw

+0

我添加了更新#1 ...我瀏覽了一下嵌入的腳本,無法立即破譯任何東西。我假定它本質上是運行sudo服務的httpd狀態,但情況可能並非如此。 – TekiusFanatikus

+0

不,重點在於'sudo'在劇本之外。所以你*不能*使用限於特定命令的'sudo'配置。 'sudo'唯一的命令是'/ bin/sh'。 – larsks

+0

我曾想過原始命令。我很好奇我將如何使用原始命令測試Apache狀態。我敢肯定,服務的開始將是可行的。 – TekiusFanatikus

相關問題