我试图运行一个特定的Ansible任务作为一个不同的用户比正在运行的剧本。 我的.yml文件看起来像这样:
--- - hosts: staging_servers tasks: - name: check user remote_user: someusername shell: whoami
运行这个任务表明, whoami命令返回的是不同于我在任务中定义的用户(具体来说,返回在hosts文件ubuntu定义的用户)。
我也试图定义这样的任务:
--- - hosts: staging_servers tasks: - name: check user sudo: yes sudo_user: someusername shell: whoami
但是然后我得到' Missing sudo password '错误,虽然sudoers文件中有一行表示someusername ALL=(ALL) NOPASSWD:ALL并在远程机器上用sudo发出命令,因为someusername不要求我input密码。
那么,我如何才能以不同的用户身份运行特定的任务,而不是在hosts文件或root定义的用户呢?
你误解了这两个设置:
remote_user是一个Ansible设置,用于控制Ansible用来连接的SSH用户: ssh ${REMOTE_USER}@remotehost
someusername ALL =(ALL)NOPASSWD:ALL是一个sudoconfiguration,允许用户someusername在没有密码的情况下执行任何主机中的所有命令。 它不允许任何人作为someusername用户名发出命令。
理想情况下,您将直接以合适的用户身份login ,这就是remote_user的全部function。 但是通常你只能以pipe理用户的身份login(比如说ubuntu ),而不得不以sudo命令作为另一个用户(比如scrapy )。 然后,您应该将remote_user留给login的用户,并将以下可行属性添加到作业中:
- name: log in as ubuntu and do something as scrapy remote_user: ubuntu sudo: true sudo_user: scrapy shell: do-something.sh
请注意,在Ansible 1.9之后,“sudo”措辞被replace为“become”
sudo: yes sudo_user: some_user
变成(双关语意):
become: yes become_user: some_user
在这里查看更多细节: https : //stackoverflow.com/a/22749788/402727