身份验证或权限失败,对远程目录没有权限

时间:2016-02-03 12:03:02

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

我正在使用ansijet来自动执行ansible playbook,以便在按钮点击时运行。该手册将停止AWS上正在运行的实例。如果从命令行手动运行,则playbook运行良好并执行任务。但是当通过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 但仍然得到同样的错误。

3 个答案:

答案 0 :(得分:4)

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

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

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

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

答案 1 :(得分:0)

我们已经有一段时间了。 尝试通过使用

进行补救
  • / home / $ {USER} / tmp / ansible
  • / tmp / $ {USER} / ansible
  • / tmp / ansible
  • / home / foreman / tmp(硬编码路径,仅用于测试)

除了反映配置更改的部分外,错误消息始终保持不变:Failed to create temporary... Consider ... a path rooted in '/tmp"

当我登录到出现此问题的服务器之一并切换到运行ansible的用户时,该命令执行得很好

更多深入的错误消息将有很大帮助...

答案 2 :(得分:-1)

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

另外对我来说 - remote_tmp = /tmp效果很好。

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