Ansible以ansible用户连接受控节点时复制文件到ubuntu家目录失败如何解决
问题解答
错误原因
你用ansible作为远程登录用户连接受控节点时,任务默认以ansible普通用户身份执行,而/home/ubuntu目录默认仅允许所有者(ubuntu用户)或root用户写入,ansible用户没有权限操作其他用户家目录的内容,因此复制任务报错。
可行性说明
你的需求完全可以实现,不需要调整现有用户权限架构,你已经给ansible用户配置了免密sudo权限,只需要在Playbook中增加提权配置即可。
修复方案
你可以选择全局开启sudo提权,或者仅给需要操作其他用户目录的单任务开启提权,两种配置都可以:
方式1:单任务开启提权(更符合权限最小化原则)
仅给需要操作ubuntu家目录的复制任务开启提权,其他任务仍以普通ansible用户身份执行:
--- - name: script transfer practice hosts: devdebugs remote_user: ansible tasks: - name: Copy file with owner and permissions ansible.builtin.copy: src: /home/ubuntu/files/test.txt dest: /home/ubuntu/test.txt owner: ubuntu group: ubuntu mode: '0600' # 单任务开启sudo提权,调用ansible用户的免密sudo权限切换到root执行操作 become: yes ...
方式2:全局开启提权
如果整个Playbook的任务都需要操作系统级资源、其他用户目录,可以在Play层级全局开启提权:
--- - name: script transfer practice hosts: devdebugs remote_user: ansible # 全局开启sudo提权,当前Play下所有任务默认都会以root身份执行 become: yes tasks: - name: Copy file with owner and permissions ansible.builtin.copy: src: /home/ubuntu/files/test.txt dest: /home/ubuntu/test.txt owner: ubuntu group: ubuntu mode: '0600' ...
架构合理性说明
你当前用专用ansible用户做运维操作、普通业务用户ubuntu不开放sudo权限的设计是符合运维安全规范的,不需要更换实现方式,只要补充提权配置即可满足需求。
内容的提问来源于stack exchange,提问作者Bix
相关产品推荐
相关产品推荐

