对于无法写入/ var /文件夹的用户,Ansible ping失败,即使启用了sudo也是如此

时间:2014-08-05 17:32:25

标签: ansible ansible-playbook

Ansible ping命令失败。我该如何解决?

这是库存文件:

172.18.192.60 ansible_ssh_user=access ansible_ssh_private_key_file=~/.ssh/ec2/access.pem

如果我尝试在没有ping的情况下对主机运行Ansible --sudo模块,我就不能这样做。这是有道理的,因为远程用户没有/var/folders/的写访问权,这显然是Ansible存储一些临时数据的地方。但即使我使用sudo,我也会遇到相同的行为。

$ ansible --version
ansible 1.6.10 (release1.6.10 8959338284) last updated 2014/08/04 16:21:41 (GMT -400)

$ ansible all -i deploy/develop_hosts -m ping -vvvv --sudo --sudo-user=root
<172.18.192.60> ESTABLISH CONNECTION FOR USER: access
<172.18.192.60> REMOTE_MODULE ping
<172.18.192.60> EXEC ['ssh', '-C', '-tt', '-vvv', '-o', 'ControlMaster=auto', '-o', 'ControlPersist=60s', '-o', 'ControlPath=/Users/scartwright/.ansible/cp/ansible-ssh-%h-%p-%r', '-o', 'IdentityFile=/Users/scartwright/.ssh/ec2/access.pem', '-o', 'KbdInteractiveAuthentication=no', '-o', 'PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey', '-o', 'PasswordAuthentication=no', '-o', 'User=access', '-o', 'ConnectTimeout=10', '172.18.192.60', "/bin/sh -c 'mkdir -p $HOME/.ansible/tmp/ansible-tmp-1407257059.86-51557039753935 && chmod a+rx $HOME/.ansible/tmp/ansible-tmp-1407257059.86-51557039753935 && echo $HOME/.ansible/tmp/ansible-tmp-1407257059.86-51557039753935'"]
<172.18.192.60> PUT /var/folders/9x/ctr6mk5x787g9nqk4r92sgg00000gn/T/tmpjvL2TY TO /home/access/.ansible/tmp/ansible-tmp-1407257059.86-51557039753935/ping
172.18.192.60 | FAILED => failed to transfer file to /home/access/.ansible/tmp/ansible-tmp-1407257059.86-51557039753935/ping:

Connection closed

远程主机上不存在引用的文件:

access@ip-172-18-192-60:~$ ls -la /var/folders
total 8
drwxr-xr-x  2 root root 4096 Aug  5 17:14 .
drwxr-xr-x 12 root root 4096 Aug  5 15:46 ..

access@ip-172-18-192-60:~$ sudo su

root@ip-172-18-192-60:/home/access# ls -la /var/folders
total 8
drwxr-xr-x  2 root root 4096 Aug  5 17:14 .
drwxr-xr-x 12 root root 4096 Aug  5 15:46 ..
root@ip-172-18-192-60:/home/access# 

以下列出了没有帮助的事项:

  • ansible_sudo=yes放入主机文件
  • --user--private-key放在命令行而不是主机文件中
  • 使用FQDN代替主机文件中的IP地址
  • 使用--su(和--su-user=root)代替--sudo
  • 明确设置连接模式-c paramiko-c ssh

使用ansible-playbook时,收集事实的方式会失败。 这个问题并不新鲜;它也发生在Ansible 1.5.4。

问题:

如何让我的主机可以访问?有没有办法告诉Ansible使用/var/folders以外的其他目录,假设这是问题?还有别的东西我可以忽略吗?

2 个答案:

答案 0 :(得分:2)

远程主机上未启用SFTP,这就是传输失败的原因。我创建了一个包含以下内容的ansible.cfg文件,现在它的工作正常。

[ssh_connection]
scp_if_ssh=True

有关详细信息,请参阅Ansible Configuration File的文档。

答案 1 :(得分:1)

Ansible将临时文件存储在用户的主目录中,例如/home/access/.ansible/。 / var / folders /是本地系统上运行Ansible的目录。