使用 ansible ssh 进入 lxd 容器时出现问题

使用 ansible ssh 进入 lxd 容器时出现问题

我已经创建了一个动态清单,用于获取创建的 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 条目”名称。

相关内容