具有SSH密钥身份验证的用户如何在Ansible中拥有sudo权限?

具有SSH密钥身份验证的用户如何在Ansible中拥有sudo权限?,ansible,Ansible,我使用以下ansible脚本在azure云中创建vm: --- - name: azure playbook hosts: localhost vars_files: ['vars.yaml'] tasks: - name: Create VM with defaults azure_rm_virtualmachine: resource_group: "{{account_prefix}}_rg" vm_size: Standard_D1

我使用以下ansible脚本在azure云中创建vm:

---

- name: azure playbook
  hosts: localhost
  vars_files: ['vars.yaml']
  tasks:
  - name: Create VM with defaults
    azure_rm_virtualmachine:
      resource_group: "{{account_prefix}}_rg"
      vm_size: Standard_D1
      name: "{{account_prefix}}-vm1"
      storage_account_name: "{{account_prefix}}store1"
      network_interface_names: "{{account_prefix}}vm1eth0"
      ssh_password_enabled: false
      admin_username: owen
      ssh_public_keys:
      - {  path: /home/owen/.ssh/authorized_keys,
        key_data: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDH0q4pmdkJcc/JPVJui5uWMV12GsJAsDCosfUSSFZfTIx92bb9FC3hx1zU7tD1+Zw3aQW13m6ZS2T ... YnvieSbdD3v}
      image:
        offer: CentOS
        publisher: OpenLogic
        sku: '7.2'
        version: latest
但在运行进一步的脚本以添加其他用户时:

---

- name: create user
  hosts: my-vm1.westeurope.cloudapp.azure.com
#  vars_files: ['vars.yaml']
  remote_user: owen
  tasks:
  - name: Create User
    user:
      name: andrea
      password: $6$rounds=656000$1AspdTb0lfOSc5yM$bAkPgHkuHwap/j6f0P88WxOdjxq3MCRO7/qgufYB.s/4t4k99wwtu/.../
      group: users
      shell: /bin/bash
    become: true
我收到“sudo:需要密码”错误:

我的清单如下所示:

my-vm1.westeurope.cloudapp.azure.com ansible_ssh_private_key_file=/home/myuser/.ssh/id_rsa ansible_user=owen ansible_become=true
ansible-playbook site.yml --ask-become-pass
那么,用户如何拥有sudo权限,从而使用ansible“been”等呢

请注意,当从清单文件中省略ansible_user和ansible_been时,会出现相同的结果

编辑:如果我以owen的身份ssh到vm上(从创建vm的ssh私钥框中),那么我就能够运行sudo visudo-f/etc/sudoers并访问该文件。欧文有没有sudo特权?我现在很困惑!!我是否误解了ansible添加用户脚本中的错误


EDIT2:我认为这个问题是无效的——因为用户确实拥有通过门户手动添加的sudo权限。我仍然不确定发生了什么,但我不认为这个问题是一致的,或者说它确实代表了我试图解决的实际问题。

您可以使用以下命令更改用户owen的sudo配置:

sudo visudo -f /etc/sudoers
并将用户owen的行更改为:

owen ALL=(ALL) NOPASSWD:ALL
那么sudo就不需要Ansible来输入密码了。或者,您可以指示Ansible使用参数
--ask been pass
询问密码,如下所示:

my-vm1.westeurope.cloudapp.azure.com ansible_ssh_private_key_file=/home/myuser/.ssh/id_rsa ansible_user=owen ansible_become=true
ansible-playbook site.yml --ask-become-pass