我创建了一个动态清单,它获取创建的 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 用户
问题是您有 ansible.cfg (INI 格式),但您在剧本中使用了 YAML 变量名称。令人沮丧的是名称不同。名称修复后,ansible.cfg 可能如下所示:
您明确表示您希望以 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 条目”名称。