【问题标题】:How can I use Ansible when I only have read-only access?当我只有只读访问权限时如何使用 Ansible?
【发布时间】:2022-03-29 14:46:53
【问题描述】:

我正在使用 Ansible 自动执行一些网络故障排除任务,但是当我尝试 ping 我的所有设备作为健全性检查时,我收到以下错误:

"msg": "身份验证或权限失败。在某些情况下,您可能已经能够进行身份验证并且没有远程目录的权限。考虑将 ansible.cfg 中的远程临时路径更改为以 \ 为根的路径“/tmp\”。

当我在 Ansible 详细模式下运行命令时,就在此错误之前,我得到以下输出:

EXEC /bin/sh -c '(umask 77 && mkdir -p "echo Cmd exec error./.ansible/tmp/ansible-tmp-1500330345.12-194265391907358" && echo ansible-tmp-1500330345.12-194265391907358="echo Cmd exec error./.ansible/tmp/ansible-tmp-1500330345.12-194265391907358" ) && sleep 0'

p>

我是一名实习生,因此只能对所有设备进行只读访问;因此,我相信错误是由于 mkdir 命令而发生的。因此,我的两个问题是:

1) 是否可以将 Ansible 配置为不在设备上创建任何临时文件?

2) 是否有其他因素可能导致我可能遗漏的此错误?

我已尝试在 Ansible 文档中搜索任何相关配置,但我没有太多使用 Ansible 的经验,因此我找不到任何东西。

【问题讨论】:

    标签: configuration ansible privileges


    【解决方案1】:

    这个问题在更广泛的背景下没有意义。 Ansible 是一个用于服务器配置自动化的工具。如果没有写入权限,您将无法在目标机器上配置任何内容,因此 Ansible 没有用例。

    在较窄的上下文中,尽管您没有发布任何代码,但您似乎正在尝试 ping 目标服务器。 Ansible ping module 不是 ICMP ping。相反,它是一个连接到目标服务器、传输 Python 脚本并运行它们的组件。脚本会产生响应,这意味着目标系统满足运行 Ansible 模块的最低要求。

    但是,您似乎想在您的控制机器上使用 Ansible command module 运行常规的 ping 命令并检查状态:

    - hosts: localhost
      vars:
        target_host: 192.168.1.1
      tasks:
        - command: ping {{ target_host }}
    

    您可能想要使用failed_whenignore_errorschanged_when 参数。见Error handling in playbook

    请注意,我建议在 localhost 上运行整个游戏,因为在您的配置中,配置您在库存中具有有限访问权限的目标机器是没有意义的。


    另外:

    是否可以将 Ansible 配置为不在设备上创建任何临时文件?

    是的。通过raw module 运行命令不会创建临时文件。

    由于您似乎具有 SSH 访问权限,因此您可以使用它来运行命令并检查其结果:

    - hosts: 192.168.1.1
      tasks:
        - raw: echo Hello World
          register: echo
        - debug:
            var: echo.stdout
    

    【讨论】:

      【解决方案2】:

      如果某人有多个节点和 sudo 权限,并且您想绕过只读限制,请尝试使用raw 模块,重新安装磁盘,在带有 raed/write 选项的远程节点上,这对我很有帮助。

      剧本示例:

      ---
      - hosts: bs
        gather_facts: no
        pre_tasks:
          - name: read/write
            raw: ansible bs -m raw -a "mount -o remount,rw /" -b --vault-password-file=vault.txt
            delegate_to: localhost
        tasks:
          - name: dns
            raw: systemctl restart dnsmasq
          - name: read only
            raw: mount -o remount,ro /
      

      【讨论】:

        猜你喜欢
        • 2021-03-16
        • 1970-01-01
        • 1970-01-01
        • 2012-05-29
        • 2016-01-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多