如何强制Ansible使用指定的ansible用户SSH登录LXD容器
如何强制Ansible使用指定的ansible用户SSH登录LXD容器
看起来你的问题是LXD动态inventory插件默认让Ansible用root用户连接容器,但你已经在ansible.cfg里配置了ansible_user = ansible却没生效对吧?我来帮你梳理几个可行的解决办法:
方法1:在动态inventory文件中直接指定用户
你可以在lxd.yaml动态inventory文件里添加全局变量,让插件返回的所有容器主机都使用指定的ansible用户,这个配置的优先级会高于ansible.cfg的全局设置。修改后的inventory内容如下:
plugin: community.general.lxd url: unix:/var/snap/lxd/common/lxd/unix.socket state: RUNNING vars: ansible_user: ansible
这样Ansible在连接任何匹配的LXD容器时,都会自动使用ansible用户而非root。
方法2:验证ansible.cfg的配置有效性
首先确认你的ansible.cfg是否被正确加载,运行以下命令查看当前生效的配置文件路径:
ansible --version
如果路径正确,再检查defaults段的配置有没有被其他变量覆盖。你也可以直接在命令行临时指定用户来测试连接,排除配置优先级问题:
ansible -i lxd.yaml -m ping all -u ansible
如果这个命令能成功,说明全局配置可能被inventory或主机级变量覆盖了,此时方法1的配置会更可靠。
方法3:确保容器内的ansible用户配置正确
别忘了核心前提:你的LXD容器里必须已经创建了ansible用户,并且你的本地公钥已经添加到该用户的授权列表中,同时该用户拥有sudo权限(因为你设置了ansible_become = yes)。可以通过以下命令完成容器内的配置:
# 创建ansible用户 lxc exec nginx-1 -- adduser ansible # 添加sudo权限 lxc exec nginx-1 -- usermod -aG sudo ansible # 推送本地公钥到容器 lxc file push /home/zakaria/.ssh/id_rsa.pub nginx-1/home/ansible/.ssh/authorized_keys # 设置正确的文件权限 lxc exec nginx-1 -- chown ansible:ansible /home/ansible/.ssh/authorized_keys lxc exec nginx-1 -- chmod 600 /home/ansible/.ssh/authorized_keys
额外调试技巧
如果还是遇到权限问题,可以开启Ansible的详细调试日志,查看实际连接时使用的用户名、密钥路径等信息,帮助定位问题:
ansible -i lxd.yaml -m ping all -vvv
备注:内容来源于stack exchange,提问作者Zakaria Ait Yakoub
相关产品推荐
相关产品推荐

