Ansible无法将文件传输到/ command

时间:2014-05-27 21:11:56

标签: ansible

最近我一直在使用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

6 个答案:

答案 0 :(得分: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

答案 1 :(得分:3)

不触及/etc/ansible/ansible.cfg

如果只有一台主机受到影响,可以在hosts文件中按主机补救:

alias ansible_host=192.168.1.102 ansible_ssh_transfer_method=scp

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

[Source]

答案 2 :(得分:2)

我最近收到的消息是完全不同的。我有一些流浪文本是我在cd -文件中的~/.bashrc命令的结果。我通过过滤它的输出来解决这个问题:

我的〜/ .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

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

[ssh_connection]
scp_if_ssh=True

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

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

  

74747432.93-129438354708729 /设置:\ n \ N /家/管理\ n“个}

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

答案 3 :(得分:0)

此解决方案可行:

第1步:

在主机文件(/etc/ansible/hosts)中,使用ipaddress作为"root@192.168.1.102"而不是"192.168.1.102"

第2步:

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

scp_if_ssh=True

答案 4 :(得分:0)

您可以尝试以下解决方案:

rm -rf ~/.ansible

然后

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

再试一次

ansible-playbook -i  etc/deploy/config/inventory.yml etc/deploy/deploy.yml

答案 5 :(得分:0)

在CentOS8中,我不得不在/ etc / ssh / sshd_config中替换此行

Subsystem sftp /usr/libexec/openssh/sftp-server

使用

Subsystem sftp internal-sftp

然后使用以下命令重新启动sshd服务:

systemctl restart sshd