Ansible не удалось передать файл в/command

Недавно я использовал возможности для широкого спектра автоматизации. Тем не менее, во время тестирования для автоматического перезапуска tomcat6 в определенных блоках веб-сервера. Я столкнулся с этой новой ошибкой, которую я не могу исправить.

FAILED => failed to transfer file to /command

Глядя на документацию, это говорит о том, что sftp-сервер не находится в sshd_config, однако он есть.

Ниже приведена команда, которую я запускаю на своих веб-серверах.

ansible all -a "/usr/bin/sudo /etc/init.d/tomcat6 restart" -u user --ask-pass --sudo --ask-sudo-pass

В каждом из ящиков есть скрытая скрытая папка, поэтому я знаю ее создание для них, но она не выполняет команду.

Запуск -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

Любая помощь по этому вопросу очень ценится.

Спасибо,


Edit:

Чтобы увеличить Googleability, вот еще одно проявление ошибки, которую выбрал выбранный ответ.

Выполнение команды 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

Ответы

Ответ 1

У вас есть sftp подсистема включена в sshd на удаленном сервере? Вы можете проверить его в /etc/sshd/sshd _config, имя файла конфигурации зависит от вашего дистрибутива... в любом случае, посмотрите там:

Subsystem      sftp    /usr/lib/ssh/sftp-server

Если эта строка закомментирована, sftp отключен. Чтобы исправить это, вы можете либо включить sftp, либо изменить Ansible configuration. Я предпочитаю изменение конфигурации Ansible, взгляните на ansible.cfg и добавьте/измените:

[ssh_connection]
scp_if_ssh=True

Ответ 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.

Бит текста в конце моего сообщения об ошибке:

74747432.93-129438354708729/установка:\п\п/главная/админ\п "}

- это то, что подсказывало мне мою проблему. Это вывод из cd ..., когда он запускается во время входа в систему, когда обрабатывается мой файл ~/.bashrc.

Ответ 3

Это решение будет работать:

Шаг 1:

В файле хоста (/etc/ansible/hosts) используйте ipaddress как "[email protected]" вместо "192.168.1.102".

Шаг 2:

Раскомментируйте свойство в файле "/etc/ansible/ansible.cfg".

scp_if_ssh=True

Ответ 4

Не касаясь /etc/ansible/ansible.cfg

Если затронут только один хост, это может быть исправлено на основе каждого узла в файле hosts:

alias ansible_host=192.168.1.102 ansible_ssh_transfer_method=scp

Для этого решения требуется ansible версия 2.3 или выше.

[Источник]