获取正在执行的确切Ansible命令
是否可以确切地知道以下Ansible代码将在远程服务器上执行什么命令获取正在执行的确切Ansible命令,ansible,ansible-2.x,Ansible,Ansible 2.x,是否可以确切地知道以下Ansible代码将在远程服务器上执行什么命令 - name: Ensure apache is running service: name=httpd state=started become: true 我相信用户应该拥有适当的sudo权限。但是,我一直得到sudo:password是必需的 更新#1 根据提供的评论,以下是我的完整Ansible命令: ANSIBLE_KEEP_REMOTE_FILES=1 sudo -u userA ansible-
- name: Ensure apache is running
service: name=httpd state=started
become: true
我相信用户应该拥有适当的sudo权限。但是,我一直得到sudo:password是必需的
更新#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
- userB是配置了指定SSH密钥的远程用户
- userB拥有有限的sudo权限。我不能改变这个不幸的是,我不是服务器管理员
- userB目前已经被配置为通过SSH/Key访问大量服务器,它似乎是Ansible的主要候选。我目前能够通过SSH(Apache、Tomcat、Jenkins等)手动管理所有中间件,并希望使用Ansible实现自动化
sudo:需要密码。
”)并不表示远程用户没有相应的sudo
权限。它仅表明远程用户未配置为无密码的sudo
。你的两个选择是:
ansible-playbook -K secretpassword ...
sudoers
配置以允许无密码sudo
:
remoteuser ALL=(ALL) NOPASSWD:ALL
涉及有限命令集的Sudo配置可能无法工作,因为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'"'"''
sudo
看到的唯一命令是/bin/sh
,这意味着限制您仅使用某些命令的sudo
配置注定会失败
如果您无法修复远程
sudo
配置,您可能需要调查ansible的模块。ansible playbook-vvv
将向您显示启动模块的确切命令。实际上,我一直在运行-vvv
,并注意到它正在使用sudo-H-s-n-u root…
运行一个.tmp文件。我还启用了环境变量ANSIBLE\u KEEP\u REMOTE\u FILES
,以便查看这些文件。但是,打开.tmp文件后,我无法准确确定发生了什么。您可以在远程主机上手动运行sudo
,而无需密码吗?你能给我们看看你的sudoers
配置吗?其他任务失败了吗,或者只是服务
任务?是的,我经常在没有密码的情况下运行sudo。不过,我的命令集有限。例如sudo服务httpd启动|重启|状态。既然您提到了它,一些任务正在完成,而那些指定服务的任务也有问题。第二,如果我不能简单地发出原始命令,我会这样做吗?我宁愿使用更标准的Ansible代码。请参阅我答案的更新。我添加了更新#1。。。我瞥了一眼嵌入的脚本,无法立即破译任何内容。我假设它实际上运行的是sudo服务httpd status,情况可能并非如此。不,关键是sudo
在脚本之外。因此,您不能使用仅限于特定命令的sudo
配置。sudo
看到的唯一命令是/bin/sh
。我曾经考虑过原始命令。不过,我很好奇如何使用原始命令测试Apache状态。我相信服务的开始和停止是可行的。
sudo -H -S -n -u root /bin/sh -c '...embedded script here...'