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"
曾几何时(我想是在 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"