Récemment, j'utilise ansible pour une grande variété d'automatisation. Cependant, lors du test de Tomcat6 automatique, redémarrez sur des boîtes de serveur Web spécifiques. Je suis tombé sur cette nouvelle erreur que je n'arrive pas à corriger.
FAILED => failed to transfer file to /command
En regardant la documentation, c'est parce que sftp-server ne figure pas dans sshd_config, mais il y est.
Vous trouverez ci-dessous la commande que j'exécute sur mes hôtes de serveur Web.
ansible all -a "/usr/bin/Sudo /etc/init.d/Tomcat6 restart" -u user --ask-pass --Sudo --ask-Sudo-pass
Il y a un dossier caché .ansible sur chacune des cases, donc je sais que cela leur est destiné, mais que la commande n’est pas exécutée.
L'exécution de -vvvv me donne ceci après:
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'"]
puis
10.10.10.103 | FAILED => failed to transfer file to /home/user/.ansible/tmp/ansible-tmp-1400791384.19-262170576359689/command
Toute aide sur cette question est très appréciée.
Merci,
Modifier:
Pour augmenter la Googleability, voici une autre manifestation de l'erreur corrigée par la réponse choisie.
L'exécution de la commande ansible-playbook -i inventory hello_world.yml
donne cet avertissement à chaque hôte.
[WARNING]: sftp transfer mechanism failed on [Host.example.com]. Use ANSIBLE_DEBUG=1 to see detailed information
Et lorsque vous réexécutez la commande en tant que ANSIBLE_DEBUG=1 ansible-playbook -i inventory hello_world.yml
, les seules informations supplémentaires que vous obtenez sont les suivantes:
>>>sftp> put /var/folders/nc/htqkfk6j6h70hlxrr43rm4h00000gn/T/tmpxEWCe5 /home/ubuntu/.ansible/tmp/ansible-tmp-1487430536.22-28138635532013/command.py
le sous-système sftp est-il activé dans sshd sur le serveur distant? Vous pouvez le vérifier dans/etc/sshd/sshd_config, le nom du fichier de configuration dépend de votre distribution… en tout cas, cherchez-y:
Subsystem sftp /usr/lib/ssh/sftp-server
Si cette ligne est commentée, le sftp est désactivé . Pour y remédier, vous pouvez soit activer sftp, soit modifier la configuration Ansible . Je préfère la modification de la configuration Ansible, consultez ansible.cfg et ajoutez /changement:
[ssh_connection]
scp_if_ssh=True
/etc/ansible/ansible.cfg
Si un seul hôte est affecté, le fichier hosts
permet de remédier à ce problème par hôte:
alias ansible_Host=192.168.1.102 ansible_ssh_transfer_method=scp
Cette solution nécessite ansible
version 2.3 ou supérieure.
J'ai récemment reçu un message comme celui-ci pour une raison totalement différente. J'avais un texte parasite qui résultait d'une commande cd -
que j'avais dans mon fichier ~/.bashrc
. J'ai résolu ce problème en filtrant sa sortie comme suit:
...
cd ~/ansible/hacking/ > /dev/null 2>&1 && . env-setup -q && cd - > /dev/null 2>&1
...
Sans ces redirections des commandes cd vers /dev/null
je recevais ce message.
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"}
Les autres détails intéressants de ma situation sont que je l'utilise déjà dans mon fichier ansible.cfg
:
[ssh_connection]
scp_if_ssh=True
Et le serveur dans la liste avec le problème, app01, est le même serveur que celui sur lequel j’exécute le playbook Ansible.
Le bit de texte à la fin de mon message d'erreur:
74747432.93-129438354708729/setup:\n\n/home/admin\n "}
c’est ce qui m’a fait comprendre mon problème. C'est le résultat de cd ...
lorsqu'il est exécuté lors de la connexion lorsque mon fichier ~/.bashrc
est en cours de traitement.
Vous pouvez essayer cette solution:
rm -rf ~/.ansible
Et alors
ansible-galaxy install cbrunnkvist.ansistrano-symfony-deploy --force
Après réessayer
ansible-playbook -i etc/deploy/config/inventory.yml etc/deploy/deploy.yml
Cette solution fonctionnera:
Étape 1:
(/etc/ansible/hosts)
dans le fichier hôte, utilisez ipaddress
comme "[email protected]"
au lieu de "192.168.1.102"
.
Étape 2:
Décommentez la propriété dans le fichier "/etc/ansible/ansible.cfg"
.
scp_if_ssh=True