无法从 ansible 重新启动 iptables(需要交互式身份验证)

Posted

技术标签:

【中文标题】无法从 ansible 重新启动 iptables(需要交互式身份验证)【英文标题】:unable to restart iptables from ansible ( Interactive authentication required) 【发布时间】:2016-09-14 21:47:04 【问题描述】:

如何从 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 帐户,但您仍然需要成为。 【参考方案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 语句添加到需要它们的处理程序中。

以上是关于无法从 ansible 重新启动 iptables(需要交互式身份验证)的主要内容,如果未能解决你的问题,请参考以下文章

在Ansible中,如果系统在更新该行之前重新启动,如何重复获取文件直到存在一行?

Ansible 安全 之iptables设置

Docker:如何重新创建 dockers 的附加 iptables 规则?

弹性搜索无法启动 - 使用 Ansible 进行设置

如何在Centos上使用ansible模块启动httpd服务

iptables 块码头工人