我已经创建了一个动态清单,用于获取创建的 lxd 容器(这样我就不必每次都输入容器的名称),所以这里是动态清单
plugin: community.general.lxd
url: unix:/var/snap/lxd/common/lxd/unix.socket
state: RUNNING
这是库存的输出
ansible-inventory -i lxd.yaml --graph
@all:
|--@ungrouped:
| |--nginx-1
我运行了 ansible -i lxd.yaml -m ping all 并得到了这个输出
nginx-1 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh: root@container-ip: Permission denied (publickey).",
"unreachable": true
}
和 ansible.cfg
[defaults]
ansible_user = ansible
ansible_become = yes
ansible_lxd_remote = local
ansible_ssh_private_key_file = /home/zakaria/.ssh/id_rsa
问题是 ansible 使用 root 用户通过 ssh 进入容器,但我希望它使用 ansible 用户,那么如何强制 ansible 使用 ansible 用户
答案1
问题是你有一个 ansible.cfg(INI 格式),但你在剧本中使用了 YAML 变量名。令人沮丧即名称不同。名称固定后,您的 ansible.cfg 可能如下所示:
[defaults]
remote_user = ansible
ansible_become = yes
private_key_file = /home/zakaria/.ssh/id_rsa
# ansible_lxd_remote (at least the YAML name) is already local by default
您澄清说,您希望以 ansible 用户身份通过 SSH 登录,然后稍后成为 root 用户。这确实是推荐的解决方案,并且您确认密钥存在且已设置。
通过将“ansible_user”更改为“remote_user”,我们让“root@container-ip”变成所需的“ansible@container-ip”。通过将“ansible_ssh_private_key_file”更改为“private_key_file”,我们修复了“权限被拒绝(公钥)”问题。“ansible_lxd_remote”行没有任何作用。如果您的 ansible.cfg 文件中有任何其他变量,请重新访问链接的 ssh_connection 手册并在表中找到与(YAML)“变量”行相对应的相应“INI 条目”名称。