You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何强制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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 11:04:38