最近我一直在使用ansible进行各种自动化。但是,在特定Web服务器框上测试自动tomcat6重启期间。我遇到了这个我似乎无法解决的新错误。
FAILED => failed to transfer file to /command
看文档说它是因为sftp-server不在sshd_config中,但是它就在那里。
下面是我运行到我的网络服务器主机的命令。
ansible all -a "/usr/bin/sudo /etc/init.d/tomcat6 restart" -u user --ask-pass --sudo --ask-sudo-pass
每个盒子上都有一个.ansible隐藏文件夹,所以我知道它对它们的制作,但它没有执行命令。
运行-vvvv后给我这个:
EXEC ['sshpass', '-d10', 'ssh', '-C', '-tt', '-vvv', '-o', 'ControlMaster=auto', '-o', 'ControlPersist=60s', '-o', 'ControlPath=/home/vagrant/.ansible/cp/ansible-ssh-%h-%p-%r', '-o', 'GSSAPIAuthentication=no', '-o', 'PubkeyAuthentication=no', '-o', 'User=user', '-o', 'ConnectTimeout=10', '10.10.10.103', "/bin/sh -c 'mkdir -p $HOME/.ansible/tmp/ansible-tmp-1400791384.19-262170576359689 && chmod a+rx $HOME/.ansible/tmp/ansible-tmp-1400791384.19-262170576359689 && echo $HOME/.ansible/tmp/ansible-tmp-1400791384.19-262170576359689'"]
然后
10.10.10.103 | FAILED => failed to transfer file to /home/user/.ansible/tmp/ansible-tmp-1400791384.19-262170576359689/command
非常感谢您对此问题的任何帮助。
谢谢,
编辑:
为了提高Google可维护性,以下是所选答案修复错误的另一种表现形式。
运行命令ansible-playbook -i inventory hello_world.yml
会为每个主机发出此警告。
[WARNING]: sftp transfer mechanism failed on [host.example.com]. Use ANSIBLE_DEBUG=1 to see detailed information
当您以ANSIBLE_DEBUG=1 ansible-playbook -i inventory hello_world.yml
重新运行命令时,您获得的唯一额外信息是:
>>>sftp> put /var/folders/nc/htqkfk6j6h70hlxrr43rm4h00000gn/T/tmpxEWCe5 /home/ubuntu/.ansible/tmp/ansible-tmp-1487430536.22-28138635532013/command.py
你在远程服务器上的sshd中启用了sftp子系统吗?您可以在/ etc / sshd / sshd_config中查看,配置文件名取决于您的发行版...无论如何,请查看:
Subsystem sftp /usr/lib/ssh/sftp-server
如果此行已注释掉,则禁用sftp。要修复它,您可以启用sftp,也可以更改Ansible配置。我更喜欢Ansible配置更改,看一下ansible.cfg并添加/更改:
[ssh_connection]
scp_if_ssh=True
/etc/ansible/ansible.cfg
如果只有一个主机受到影响,可以在hosts
文件中基于每个主机进行补救:
alias ansible_host=192.168.1.102 ansible_ssh_transfer_method=scp
此解决方案需要ansible
2.3或更高版本。
我最近收到这样的消息是出于完全不同的原因。我有一些流浪文本,这是我在cd -
文件中的~/.bashrc
命令的结果。我通过过滤它的输出修复了这个问题,如下所示:
...
cd ~/ansible/hacking/ > /dev/null 2>&1 && . env-setup -q && cd - > /dev/null 2>&1
...
如果没有cd命令的重定向到/dev/null
,我收到了这条消息。
TASK [setup] *******************************************************************
ok: [app02]
ok: [app03]
fatal: [app01]: FAILED! => {"failed": true, "msg": "failed to transfer file to /home/admin/.ansible/tmp/ansible-tmp-1474747432.93-129438354708729/setup:\n\n/home/admin\n"}
我的情况中的其他有趣的细节是我已经在我的ansible.cfg
文件中使用它:
[ssh_connection]
scp_if_ssh=True
带有问题的列表中的服务器app01与我正在运行Ansible playbook的服务器相同。
我的错误消息末尾的文本位:
74747432.93-129438354708729 /设置:\ n \ n /首页/管理员\ n“}
这是我的问题。这是cd ...
在登录期间运行我的~/.bashrc
文件时的输出。
该解决方案将起作用:
步骤1:
在主机文件中(/etc/ansible/hosts)
使用ipaddress
作为"[email protected]"
而不是"192.168.1.102"
。
第2步:
取消注释"/etc/ansible/ansible.cfg"
文件中的属性。
scp_if_ssh=True
你可以尝试这个解决方案:
rm -rf ~/.ansible
然后
ansible-galaxy install cbrunnkvist.ansistrano-symfony-deploy --force
再试一次
ansible-playbook -i etc/deploy/config/inventory.yml etc/deploy/deploy.yml