有人能帮助我解决 Ansible 中的库存变量吗?
我有一台服务器,不允许通过 ssh 登录 root,我以前以普通用户 (MYUSER) 登录服务器,然后su -
成为 root。我使用用户 (MYUSER) 进行基于 ssh 密钥的身份验证。现在,我想执行如下操作。
ansible --private-key /PATH/TO/PRIVATE/KEY.KEY -i INVENTORY -m shell -a "whoami" all
但我得到的输出是 MYUSER。
我想以 MYUSER 用户身份使用我的 ssh 密钥登录服务器,然后通过 root 用户使用服务器上的 shell 模块执行一些命令:注意:我有 root 密码要在 inventory 中提供。以下是我创建的 inventory。(^ ^) 我知道这是错的。
test-web.example.com ansible_ssh_host=X.X.X.X ansible_ssh_user=MYUSER ansible_become_method=su ansible_become_user=root ansible_become_pass=Xjdt@mdaj12
执行:
[root@server ansi]# ansible --private-key /root/MASTER/audit/key.key -i test -m shell -a "whoami" all
test-web.example.com | SUCCESS | rc=0 >>
MYUSER
我怎样才能让它工作?
答案1
除非您明确要求,否则 Ansible 不会成为特权用户。
-b
ansible CLI 中有这个开关。尝试:
ansible all -b --private-key /root/MASTER/audit/key.key -i test -m shell -a "whoami"
答案2
就像 Konstanting 所说,-b 或 --become 开关是正确的。
在剧本中,你还可以添加每个任务或全局任务
become: yes
如果你不想成为 root,也可以选择
become: yes
become_user: user2
您的 hostfile 行看起来不错
不过我猜如果你不需要指定 ansible_become_method=su (我认为 ansible 默认会使用 sudo 或 su,只有当你想强制使用 su 时你才需要指定它)
如果库存名称是与 IP 绑定的有效域,则也不是 ansible_ssh_host:test-web.example.com
您可能也不需要指定:
ansible_become_user=root
仅当您不希望默认行为切换到默认根用户而是切换到您自己手动创建的另一个用户时。
因此,如果主机名是真正的域地址,我的行看起来会更短一些,更像这样!:
www.domain.com ansible_user=nonroot用户 ansible_become_pass=ROOTPASSWD
顺便说一句: ansible_user 与 ansible_ssh_user 相同,只是更短;)相同