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

Ansible中含特殊字符的SSLPEER变量配置失败,请求协助

解决Ansible Playbook中SSLPEERMAP命令的引号嵌套问题

你的问题核心是shell命令里多层引号嵌套导致解析错误,cn_formatted本身包含单引号,再加上外层的引号转义,最终传递给runmqsc的命令格式不符合要求。以下是两种可行的解决方法:

方法一:调整变量定义,直接在shell命令中组装SSLPEER格式

去掉提前定义cn_formatted的步骤,直接在shell命令中拼接SSLPEER的完整格式,用'\''来在单引号包裹的echo内容中插入单引号(shell中单引号内部无法直接使用单引号,'\''的作用是:关闭当前单引号 → 插入一个转义的单引号 → 重新打开单引号):

- name: Set the SSLPEERMAP MQ Channel Authorization Record.
  shell: su mqm -c "echo 'set CHLAUTH({{ ChannelName }}) TYPE(SSLPEERMAP) USERSRC(MAP) MCAUSER({{ usr }}) SSLPEER('\''{{ CN }}'\'') action(replace)' | runmqsc {{ QMName }}"
  args:
    chdir: /usr/bin/
    warn: false
  register: set_chl_auth_2_status
  ignore_errors: yes

方法二:保留cn_formatted,改用双引号包裹echo内容并正确转义

如果需要保留cn_formatted变量,调整echo的引号结构,用双引号包裹echo内容,内部的单引号直接使用,同时用{{ ... | quote }}过滤器确保变量被正确转义:

- name: Format the CN and echo parameters
  set_fact:
    cn_formatted: "SSLPEER('{{ CN }}')"
    
- name: Set the SSLPEERMAP MQ Channel Authorization Record.
  shell: su mqm -c 'echo "set CHLAUTH({{ ChannelName }}) TYPE(SSLPEERMAP) USERSRC(MAP) MCAUSER({{ usr }}) {{ cn_formatted | quote }} action(replace)" | runmqsc {{ QMName }}'
  args:
    chdir: /usr/bin/
    warn: false
  register: set_chl_auth_2_status
  ignore_errors: yes

验证思路

执行前可以先添加一个debug任务,输出最终生成的shell命令,检查格式是否正确:

- name: Debug generated command
  debug:
    msg: "su mqm -c 'echo \"set CHLAUTH({{ ChannelName }}) TYPE(SSLPEERMAP) USERSRC(MAP) MCAUSER({{ usr }}) {{ cn_formatted | quote }} action(replace)\" | runmqsc {{ QMName }}'"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 18:21:33