运行Ansible Playbook时出现pam_mount警告,求含义及解决方法
运行指定Ansible Playbook时,多次收到类似如下的警告:
[WARNING]: Module invocation had junk after the JSON data: (pam_mount.c:133): clean system authtok=0x55fff151e610 (1073741824)
Playbook代码
- name: Setup client hosts: all become: yes gather_facts: no tasks: - name: copy files for setup copy: src: /home/user/files dest: /home/user/files force: yes mode: 0644 - name: Install client apt: deb: /home/user/files/*-client_amd64.deb update_cache: true state: present
警告含义
这个警告的核心原因是:Ansible模块执行依赖目标主机返回严格的JSON格式数据来解析执行结果,但目标主机上的pam_mount(用于挂载用户认证相关文件系统的PAM插件)在模块运行过程中,额外输出了日志信息(即警告里的(pam_mount.c:133)...内容)。这些额外文本破坏了JSON输出的完整性,被Ansible识别为无效的“垃圾数据”,从而触发警告。
消除警告的方法
调整pam_mount日志级别:修改目标主机的pam_mount配置(通常路径为
/etc/security/pam_mount.conf.xml或相关PAM配置文件),降低日志输出冗余度。比如将日志级别从debug/info调整为error,避免非必要输出干扰Ansible模块的JSON结果。重定向模块执行的额外输出:通过环境变量或封装命令的方式,将pam_mount的额外输出重定向到
/dev/null。注意这种方法可能掩盖真实错误,需谨慎使用:
示例(为apt任务添加环境变量):- name: Install client apt: deb: /home/user/files/*-client_amd64.deb update_cache: true state: present environment: PYTHONUNBUFFERED: "1"或者用command模块封装apt命令(会丢失apt模块的幂等性,需权衡):
- name: Install client via command command: apt install -y /home/user/files/*-client_amd64.deb args: warn: false升级相关软件:部分旧版本pam_mount存在输出冗余的bug,升级到最新稳定版可能解决问题;同时确保Ansible为当前支持的稳定版本,新版本对非标准输出的兼容性更好。
检查系统PAM配置:排查目标主机上其他PAM模块或系统服务,看是否在sudo/root执行操作时产生额外输出,调整对应服务的日志配置,减少非必要的标准输出/错误输出。
内容的提问来源于stack exchange,提问作者user25322509

