Ansible 权限提升 --become

Ansible privilege escalation --become

曾几何时(我想是在 1.9 版之前)我们可以在命令行上使用 -s 作为 sudo。现在它不起作用。我在 Ubuntu 18.04.

上使用 2.85 版

$ ansible all -m apt -a “name=httpd state=latest” - 这应该会导致缺少特权的错误,而是 ERROR! Extraneous options or arguments

$ ansible -s all -m apt -a “name=httpd state=latest” - 这曾经有效。也代替 -s 尝试 -b--become - 全部给出 - 错误!无关的选项或参数

也试过 --become-user=root - 同样的错误

此命令行语法是否错误 - 这一切是否随着时间的推移而改变

我们如何解决这个问题 - 只需使用剧本?

更新 1
引用问题从 ms word 中复制粘贴 - 在 word 中它以某种方式将 " 转换为 “ - 这就是这种转换的发生方式。所以只需使用记事本即可。

现在用 " "-b 选项替换了 “ ”。 试过了它更进一步
ansible -b all -m apt -a "name=httpd state=latest"

但是失败了: [警告]:找不到能力。改为使用 apt-get

x.x.x.x | FAILED! => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python3" }, "cache_update_time": 1570925983, "cache_updated": false, "changed": false, "msg": "'/usr/bin/apt-get -y -o \"Dpkg::Options::=--force-confdef\" -o \"Dpkg::Options::=--force-confold\" install 'httpd'' failed: E: Package 'httpd' has no installation candidate\n", "rc": 100, ...

不确定此错误的含义 - "install 'httpd'' failed: E: Package 'httpd' has no installation candidate"。目标机器是ubuntu 18.04

这个命令有效
apache2(对于 debian)和 -b(对于 sudo):
ansible -b all -m apt -a "name=apache2 state=latest"

我认为您只需要将引号替换为简单的双引号或单引号即可:

ansible all -m apt -a "name=httpd state=latest"

ansible all -m apt -a 'name=httpd state=latest'

您的 shell 可能无法识别您正在使用的 open/close 引号,因此 ansible 将 “name=httpd 作为 -a 选项的参数并且不会不知道如何处理 state=latest”

问题是 Ubuntu 没有名为 httpd 的包,此处的错误消息对此进行了解释:failed: E: Package 'httpd' has no installation candidate

Red Hat 系列发行版(RHEL、CentOS 和 Fedora)将其称为 httpd,因为从技术上讲这就是 upstream project name is,而 Debian 系列发行版(Ubuntu 属于 Debian 的后代)称它为 apache2 因为在 LAMP 堆栈的鼎盛时期 httpd 服务通常简称为 "Apache" 而我们目前关于主要修订版 2.

如上所述,httpd在Ubuntu中被称为apache2,所以你可以使用下面的命令。

ansible all -m apt -a "name=apache2 state=latest"