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

Ansible synchronize模块带sudo密码同步报错求助

解决Ansible synchronize模块sudo无终端密码报错问题

问题根源

使用synchronize模块并开启become: yes时,Ansible会自动设置rsync-path=sudo rsync,但sudo默认需要终端交互读取密码,而CI/CD流水线属于无终端环境,导致sudo无法获取密码触发报错。

解决方案

1. 调整synchronize模块的rsync-path参数

在任务中显式指定rsync_path为sudo -S rsync,-S选项让sudo从标准输入读取密码,Ansible会自动将提权密码传递给标准输入:

- name: 同步控制机文件到远程主机
  become: yes 
  ansible.posix.synchronize: 
    src: ./ 
    dest: "{{ var_app_path }}/"
    rsync_path: "sudo -S rsync"

2. 统一使用Ansible通用提权变量(可选)

建议用通用的ansible_become_pass替代旧的ansible_sudo_pass,调整CI执行命令:

ansible-playbook -u $LOGIN -i "$SERVER_IP," --extra-vars "ansible_become_pass=$SUDO_PASSWORD" playbook.yml

3. 排查sudoers配置(若上述方法仍报错)

部分主机默认sudo配置要求用户拥有tty,可在目标主机的sudoers文件中为执行用户添加!requiretty规则:

Defaults:$LOGIN !requiretty

(需拥有sudo权限修改,或联系运维配置)

验证

修改后重新执行playbook,synchronize模块将通过rsync+sudo -S完成高效文件同步,避免copy模块的低速问题。

内容的提问来源于stack exchange,提问作者kr1p

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 06:30:54