【问题标题】:unable to restart iptables from ansible ( Interactive authentication required)无法从 ansible 重新启动 iptables(需要交互式身份验证)
【发布时间】:2025-12-20 19:30:06
【问题描述】:

如何从 Ansible 重启 iptables 服务(以重新加载配置文件 /etc/sysconfig/iptables

我将处理程序 restart iptables 定义为

service: name=iptables enabled=yes state=restarted

但它会产生以下错误消息:

致命:[xx.xx.xx.xx]:失败! => {“改变”:假,“失败”:真, "msg": "无法停止 iptables.service: 交互式身份验证 必需。\n 无法启动 iptables.service: Interactive 需要身份验证。\n"}

我正在与CentOS Linux release 7.2.1511 (Core)合作

【问题讨论】:

  • 您是否以 sudo 身份运行您的任务?
  • 不,我没有使用 sudo。添加成为:是解决了问题。我想知道为什么错误消息具有误导性。通常缺少 sudo 会导致错误消息,例如“权限被拒绝”。
  • 如果您以非特权用户的身份直接在盒子上运行systemctl restart iptables(或等效的,如果您不使用 systemd),您会注意到您收到 sudo/gksudo 提示。这就是 Ansible 检测和出错的原因。
  • 奇怪的是,登录会转到 root 帐户,但您仍然需要成为。

标签: ansible iptables centos7


【解决方案1】:

我没有以 root 身份运行我的处理程序命令。如果处理程序包含become: yes,则处理程序工作正常。

- name: restart iptables
  become: yes
  service: name=iptables enabled=yes state=restarted

另一种刷新iptables配置的方式,不用重启是

- name: reload iptables
  become: yes
  shell: iptables-restore <  /etc/sysconfig/iptables

【讨论】:

  • 我在处理程序中遇到了这个问题。我的角色包括在 tasks/main.yml 中的become: yes。对于处理程序,我将 become 语句添加到需要它们的处理程序中。