err*_*ata 28 permissions sudo ansible
我正在尝试以与运行剧本的用户不同的用户身份运行特定的 Ansible 任务。我的.yml文件看起来像这样:
---
- hosts: staging_servers
tasks:
- name: check user
remote_user: someusername
shell: whoami
Run Code Online (Sandbox Code Playgroud)
运行此任务向我显示该whoami命令返回的用户与我在任务中定义的用户不同(准确地说,返回在hosts名为 的文件中定义的用户ubuntu)。
我还尝试像这样定义任务:
---
- hosts: staging_servers
tasks:
- name: check user
sudo: yes
sudo_user: someusername
shell: whoami
Run Code Online (Sandbox Code Playgroud)
但是后来我收到“ Missing sudo password”错误,尽管sudoers文件中有一行说明someusername ALL=(ALL) NOPASSWD:ALL并sudo在远程机器上发出命令,因为someusername没有要求我输入密码。
那么,我如何以不是hosts文件中定义的用户或root他自己的不同用户身份运行特定任务?
Cap*_*iel 23
你误解了那里的两个设置:
remote_user是 Ansible 设置,用于控制 Ansible 用于连接的 SSH 用户:ssh ${REMOTE_USER}@remotehost
someusername ALL=(ALL) NOPASSWD:ALL是一个 sudo 配置,允许用户someusername在没有密码的情况下在任何主机中执行所有命令。它不允许任何人发出命令someusername。
理想情况下,您会以正确的用户身份直接登录,这remote_user就是全部。但通常您只能以管理用户身份登录(例如ubuntu),并且必须以其他用户身份执行 sudo 命令(例如scrapy)。然后,您应该留给remote_user登录的用户并将以下 ansible 属性添加到作业中:
- name: log in as ubuntu and do something as scrapy
remote_user: ubuntu
sudo: true
sudo_user: scrapy
shell: do-something.sh
Run Code Online (Sandbox Code Playgroud)
小智 23
请注意,在 Ansible 1.9 之后,sudo措辞被替换为become,因此
sudo: yes
sudo_user: some_user
Run Code Online (Sandbox Code Playgroud)
变成(双关语):
become: yes
become_user: some_user
Run Code Online (Sandbox Code Playgroud)
在此处查看更多细节:https : //stackoverflow.com/a/22749788/402727
还要在要执行的实际模块(例如command或shell)之前编写它以使其生效。至少根据我的经验,如果我已经编写become并become_user在shell模块之后它不能正常工作。
- name: Example user change
become: true
become_user: '{{ user }}'
shell: |
...
Run Code Online (Sandbox Code Playgroud)
正如前书呆子已经指出的那样,现在你必须使用该become模块。此外,为了准确获得OP想要的内容,请使用subecome方法:
- name: check user
become: yes
become_user: someusername
become_method: su
become_flags: '--login'
shell: whoami
Run Code Online (Sandbox Code Playgroud)
become_flags: '--login'确保您像手动登录一样登录,例如加载.profile等。
如果您尚未为登录主机的用户定义密码vars,则可以通过以下方式在任务级别执行此操作:
- name: check user
become: yes
become_user: someusername
become_method: su
become_flags: '--login'
vars:
ansible_become_pass: <Password of 'ubuntu' in OP's case>
shell: whoami
Run Code Online (Sandbox Code Playgroud)
如果您使用一个用户(具有特权)登录到主机sudo并希望以另一用户(可能没有密码)的身份执行某些操作,请将以下行添加到上面:
become_exe: 'sudo -p "Password: " su -'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
102887 次 |
| 最近记录: |