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
放在命令行而不是主机文件中--su
(和--su-user=root
)代替--sudo
-c paramiko
或-c ssh
使用ansible-playbook
时,收集事实的方式会失败。
这个问题并不新鲜;它也发生在Ansible 1.5.4。
如何让我的主机可以访问?有没有办法告诉Ansible使用/var/folders
以外的其他目录,假设这是问题?还有别的东西我可以忽略吗?
答案 0 :(得分:2)
远程主机上未启用SFTP,这就是传输失败的原因。我创建了一个包含以下内容的ansible.cfg
文件,现在它的工作正常。
[ssh_connection]
scp_if_ssh=True
有关详细信息,请参阅Ansible Configuration File的文档。
答案 1 :(得分:1)
Ansible将临时文件存储在用户的主目录中,例如/home/access/.ansible/。 / var / folders /是本地系统上运行Ansible的目录。