【问题标题】:Can't use sudo with newly created Ubuntu user via ansible无法通过 ansible 对新创建的 Ubuntu 用户使用 sudo
【发布时间】:2016-12-31 06:21:25
【问题描述】:

我正在使用 vagrant 运行 Xenial 16.04 VM。虚拟机开箱即用,有一个 vagrant 用户,其密码为 vagrant,没有 root 的密码(尽管如果你 ssh 进入 root@ubuntu-vm,Ubuntu 仍然需要密码) 为了模拟生产 VPS,我使用这个 playbook 创建了一个deployer 用户:

- user:
    name: deployer
    groups: admin
    password: "{{ deployer_password }}"
    shell: /bin/bash

- name: "read authorized keys from root user"
  become_user: vagrant
  command: "cat ~/.ssh/authorized_keys"
  register: "root_authorized_keys"

- debug: msg="{{root_authorized_keys}}"

- name: "create .ssh dir for deployer"
  file: path="/home/deployer/.ssh" state=directory


- name: "copy authorized keys to deployer user"
  shell: "echo '{{root_authorized_keys.stdout}}' > /home/deployer/.ssh/authorized_keys"


- name: "chown the authorized_keys file"
  file: path="/home/deployer/.ssh" recurse=yes mode=0700 owner="deployer"

当我 ssh 进入 deployer@ubuntu-vm 时,我被要求输入密码,然后我按预期登录了 VM。在我输入deployer 用户的密码后,sudosudo su 也可以正常工作。

当我尝试通过 Ansible playbook 或 Ansible ad-hoc 命令sudo 时出现问题。

注意我对以下 4 个 Ansible 命令的响应:

$ ansible all -m ping -u vagrant
ubuntu-vm | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

$ ansible all -m ping -u deployer
ubuntu-vm | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

$ ansible all -m ping -u vagrant --sudo
ubuntu-vm | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

$ ansible all -m ping -u deployer --sudo
ubuntu-vm | FAILED! => {
    "changed": false, 
    "failed": true, 
    "module_stderr": "sudo: a password is required\n", 
    "module_stdout": "", 
    "msg": "MODULE FAILURE"
}

我必须使用sudo 来成功使用deployer 的哪些选项?

还要考虑到remote_userubuntu-vm 主机将同时是vagrantdeployer 用户。如果可能的话,我想在剧本中同时使用两者(例如:我使用vagrant 用户创建deployer 用户,然后我将deployer 用户用于其他游戏) p>

【问题讨论】:

    标签: ubuntu ssh vagrant ansible ubuntu-16.04


    【解决方案1】:

    试试--ask-sudo-pass

    它会提示输入密码。

    ansible all -m ping -u deployer --sudo --ask-sudo-pass
    

    在 Ansible 1.9+ 中,建议使用 --become--ask-become-pass,因为 --sudo--ask-sudo-pass 已弃用。 Become (Privilege Escalation)

    【讨论】:

    • 这个也可以和ansible-playbook一起使用吗?如果是这样,我如何传递多个用户的密码? (请参阅我在上面的问题后写的斜体文字)
    • --ask-become-pass 在我只需要为一个用户传递密码但我不知道如何为多个用户传递密码时工作。
    • 我认为不可能为多个用户传递密码,除非您使用 Ansible Vault。见:serverfault.com/questions/560106/…
    • 我确实使用 Ansible Vault。您在上面的用户创建任务中看到的deployer_password 变量来自使用ansible-vault 加密的secrets.yml 文件。
    • 在用户创建过程中使用deployer_password 非常简单。我只需要设置password 属性。我尝试为该剧设置password/ansible_become_pass 属性,其中remote_user 设置为deployer,显然两者都是无效属性。
    猜你喜欢
    • 2019-01-18
    • 1970-01-01
    • 2016-09-16
    • 2019-09-24
    • 2016-09-16
    • 1970-01-01
    • 2018-06-09
    • 2019-10-24
    • 1970-01-01
    相关资源
    最近更新 更多