【发布时间】:2021-10-28 20:27:51
【问题描述】:
我有一个尝试安装软件包的简单剧本。 我的任务失败了(见输出)。
我可以ping主机,手动可以超级用户(tco)运行命令。
我的ansible.cfg
[defaults]
inventory = /Users/<myuser>/<automation>/ansible/inventory
remote_user = tco
packages
packages:
- yum-utils
- sshpass
playbook
---
- hosts: all
vars_files:
- vars/packages.yml
tasks:
- name: testing connection
ping:
remote_user: tco
- name: Installing packages
yum:
name: "{{ packages }}"
state: present
运行剧本:
ansible-playbook my-playbook.yml --limit master --become --ask-become-pass --become-user=tco --become-method=sudo
输出:
ansible-playbook register_sys_rh.yml --limit master --become --ask-become-pass --become-user=tco --become-method=sudo
BECOME password:
PLAY [all] ******************************************************************************************************************************************************************
TASK [Gathering Facts] ******************************************************************************************************************************************************
ok: [xx.xxx.13.105]
TASK [testing connection] ***************************************************************************************************************************************************
ok: [xx.xxx.13.105]
TASK [Installing packages] **************************************************************************************************************************************************
fatal: [xx.xxx.13.105]: FAILED! => {"changed": false, "msg": "This command has to be run under the root user.", "results": []}
PLAY RECAP ******************************************************************************************************************************************************************
xx.xxx.13.105 : ok=2 changed=0 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0
库存:
ansible-inventory --list | jq '.master'
{
"hosts": [
"xx.xxx.13.105"
]
}
我已将我的id_rsa.pub 复制到主机。没有密码我无法登录主机。
我可以登录并执行sudo su 或运行任何其他需要root 权限的命令。
[tco@control-plane-0 ~]$ whoami
tco
[tco@control-plane-0 ~]$ hostname -I
xx.xxx.13.105 192.168.122.1
[tco@control-plane-0 ~]$ sudo su
[sudo] password for tco:
[root@control-plane-0 tco]#
我通过 ansible_cli 显式覆盖用户 sudo_method,不知道我在这里做错了什么。
提前致谢。
【问题讨论】:
-
您已将 ssh 密钥复制到授权主机,但它不起作用?验证 ~/.ssh/* .... chmod 0600 ~/.ssh/* 和 sii 的权限,如果您可以使用密钥登录。如果没有,请尝试 ssh -vvv abd 查看调试输出,看看有什么不工作
-
--become-user=root,这是默认值,因此您可以简化省略它。 docs.ansible.com/ansible/latest/user_guide/become.html -
是的,我想明确地覆盖这就是我提供所有这些标志的原因。
-
命令行值的precedence 比所有其他可以定义变量的位置最低(除了具有最高优先级的额外变量)。此外,请注意变量名称,因为您的自动答案包含多个拼写错误。您可以阅读:docs.ansible.com/ansible/latest/user_guide/become.html
-
我从 cfg 中删除了所有内容并通过命令行传递了所有内容,如下所示:
ansible-playbook main.yml -i scripts/inventory --become-user=tco --become -K --become-method=sudo并仅输入tco用户的密码并得到相同的错误This command has to be run under the root user