【问题标题】:Authentication or permission failure, did not have permissions on the remote directory身份验证或权限失败,对远程目录没有权限
【发布时间】:2016-02-03 12:03:02
【问题描述】:

我正在使用 ansijet 来自动化 ansible playbook,以便在单击按钮时运行。该剧本是停止 AWS 上正在运行的实例。如果从命令行手动运行,则剧本运行良好并完成任务。但是通过ansijet的web界面运行时,遇到如下错误

Authentication or permission failure.  In some cases, you may have been able to authenticate and did not have permissions on the remote directory. Consider changing the remote temp path in ansible.cfg to a path rooted in "/tmp". Failed command was: mkdir -p $HOME/.ansible/tmp/ansible-tmp-1390414200.76-192986604554742 && chmod a+rx $HOME/.ansible/tmp/ansible-tmp-1390414200.76-192986604554742 && echo $HOME/.ansible/tmp/ansible-tmp-1390414200.76-192986604554742, exited with result 1:

以下是ansible.cfg 配置。

# some basic default values...

inventory      = /etc/ansible/hosts
#library        = /usr/share/my_modules/
remote_tmp     = $HOME/.ansible/tmp/
pattern        = *
forks          = 5
poll_interval  = 15
sudo_user      = root
#ask_sudo_pass = True
#ask_pass      = True
transport      = smart
#remote_port    = 22
module_lang    = C

我尝试将remote_tmp 路径更改为/home/ubuntu/.ansible/tmp 但仍然得到同样的错误。

【问题讨论】:

    标签: amazon-web-services ansible ansible-playbook


    【解决方案1】:

    默认情况下,用户 Ansible 连接到远程服务器的名称将与用户 ansible 运行时的名称相同。对于 Ansijet,它将尝试使用启动 Ansijet 的 node.js 进程的任何用户连接到远程服务器。您可以通过在剧本中指定 remote_user 或在 ansible.cfg 文件中全局指定来覆盖此设置。

    如果临时目录尚不存在,Ansible 将尝试创建它,但如果该用户没有主目录或如果他们的主目录权限不允许他们写访问,则无法创建。

    实际上,我将ansible.cfg 文件中的临时目录更改为指向/tmp 中的一个位置,该位置可以解决这些问题。

    remote_tmp = /tmp/.ansible-${USER}/tmp

    【讨论】:

    • ansijet 以 ubuntu 用户身份运行。我按照你说的更改了remote_userremote_tmp 路径。但仍然面临同样的错误。
    • 是同样的错误还是在编辑 ansible.cfg remote_tmp 配置后消息发生了变化?
    • 有两个剧本,一个是启动实例,另一个是停止它。现在根据您的建议进行更改后,启动实例的剧本运行良好,但在停止实例的剧本中出现相同的错误。
    • 查看剧本之间不同的选项。将事情精简到最低限度,然后开始添加角色和选项,直到事情破裂。
    • 如何为 Windows 10 提供远程临时路径??
    【解决方案2】:

    前段时间我遇到了同样的问题,然后就这样解决了。可能的情况是远程服务器的/tmp 目录没有足够的写入权限。运行ls -ld /tmp 命令以确保其输出看起来像这样 drwxrwxrwt 7 root root 20480 Feb 4 14:18 /tmp 我有 root 用户作为超级用户,/tmp1777 权限。

    对我来说也很简单—— remote_tmp = /tmp 运行良好。

    另一个检查是确保 $HOME 存在于您尝试运行的 shell 中。 Ansible 通过 /bin/sh shell 而不是 /bin/bash 运行命令。确保 $HOME 存在于 sh shell 中。

    【讨论】:

    • /tmp 在 linux 系统上具有特殊权限(粘性位),不仅仅是 777,它可能是某些使用 /tmp 的应用程序的安全漏洞。如果任何其他用户曾经针对这些机器运行 playbook,则使用 /tmp 会自行中断(他们会收到权限错误)
    • 是的,你是对的。应在 /tmp 上设置粘性位。它也设置在我的身上,所以权限应该是 1777 而不是 0777。在上面的答案中更正。谢谢指出
    • 从来没有同时运行两个用户的剧本。但是,是的,如果两个不同的用户同时使用它,这可能是一种可能的情况并且可能会中断。
    【解决方案3】:

    在我的情况下,我需要第一次登录服务器并更改默认密码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-26
      • 2021-03-10
      • 2014-02-02
      • 1970-01-01
      • 2023-03-18
      • 2011-12-15
      • 2015-10-28
      相关资源
      最近更新 更多