我正在使用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
但仍然得到同样的错误。
答案 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)
我们已经有一段时间了。 尝试通过使用
进行补救除了反映配置更改的部分外,错误消息始终保持不变: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。