最近我一直在使用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
答案 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或更高版本。
答案 2 :(得分:2)
我最近收到的消息是完全不同的。我有一些流浪文本是我在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
文件时的输出。
答案 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