回答你的第一個問題(「是否有可能知道到底是什麼命令下面Ansible代碼將執行遠程服務器上?」)通常是「只通過檢查相應模塊源」。給定的模塊可以運行多個命令以完成它的操作。
您所看到的錯誤消息(「sudo: a password is required.
」)不表示遠程用戶沒有適當的sudo
權限。它只暗示遠程用戶沒有配置爲無密碼sudo
。你有兩個選項:
到Ansible提供密碼:
ansible-playbook -K secretpassword ...
修改遠程主機上的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。
'ansible-playbook -vvv'會顯示你啓動模塊的確切命令。 –
我一直在運行'-vvvv',並注意到它使用'sudo -H -S -n -u root ...'運行.tmp文件。我還啓用了環境變量'ANSIBLE_KEEP_REMOTE_FILES',以便我可以查看這些文件。但是,一旦我打開一個.tmp文件,我無法確定發生了什麼。 – TekiusFanatikus
你可以在沒有密碼的情況下在遠程主機上手動運行'sudo'嗎?你能告訴我們你的「sudoers」配置嗎?其他任務是否失敗,或者只是「服務」任務? – larsks