无法从 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中,如果系统在更新该行之前重新启动,如何重复获取文件直到存在一行?
Docker:如何重新创建 dockers 的附加 iptables 规则?