Ansible无法将文件传输到/ command

问题描述 投票:20回答:5

最近我一直在使用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
ansible
5个回答
31
投票

你在远程服务器上的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

3
投票

没有接触/etc/ansible/ansible.cfg

如果只有一个主机受到影响,可以在hosts文件中基于每个主机进行补救:

alias ansible_host=192.168.1.102 ansible_ssh_transfer_method=scp

此解决方案需要ansible 2.3或更高版本。

[Source]


2
投票

我最近收到这样的消息是出于完全不同的原因。我有一些流浪文本,这是我在cd -文件中的~/.bashrc命令的结果。我通过过滤它的输出修复了这个问题,如下所示:

my ~/.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"}

my ansible.cfg

我的情况中的其他有趣的细节是我已经在我的ansible.cfg文件中使用它:

[ssh_connection]
scp_if_ssh=True

带有问题的列表中的服务器app01与我正在运行Ansible playbook的服务器相同。

我的错误消息末尾的文本位:

74747432.93-129438354708729 /设置:\ n \ n /首页/管理员\ n“}

这是我的问题。这是cd ...在登录期间运行我的~/.bashrc文件时的输出。


0
投票

该解决方案将起作用:

步骤1:

在主机文件中(/etc/ansible/hosts)使用ipaddress作为"[email protected]"而不是"192.168.1.102"

第2步:

取消注释"/etc/ansible/ansible.cfg"文件中的属性。

scp_if_ssh=True

0
投票

你可以尝试这个解决方案:

rm -rf ~/.ansible

然后

ansible-galaxy install cbrunnkvist.ansistrano-symfony-deploy --force

再试一次

ansible-playbook -i  etc/deploy/config/inventory.yml etc/deploy/deploy.yml
© www.soinside.com 2019 - 2024. All rights reserved.