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

19

Недавно я использовал возможности для широкого спектра автоматизации. Тем не менее, во время тестирования для автоматического перезапуска 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
    
задан Nvasion 27.05.2014 в 23:11
источник
  • Не могли бы вы отправить задание, которое не удалось? –  ProfHase85 28.05.2014 в 10:39
  • @ ProfHase85 Не удается передать командный файл в .ansible / tmp / ansible-tmp .... / command. Выше у меня есть управляемая команда, которую я запускаю. ansible all -a "/ usr / bin / sudo /etc/init.d/tomcat6 restart" -u user -ask-pass -sudo -ask-sudo-pass –  Nvasion 28.05.2014 в 17:18
  • можете ли вы также проверить разрешения на ~ / .ansible dir и его подкаталоги на удаленном компьютере? –  hkariti 28.05.2014 в 18:13

4 ответа

28

У вас есть 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
    
ответ дан stibi 25.06.2014 в 18:51
  • ты спас мне жизнь :) –  Rubendob 31.08.2015 в 14:35
  • У меня уже был scp_if_ssh = True в разделе [defaults] файла ansible.cfg, и он не остановил ошибку. Создание раздела [ssh_connection] для него. Очень признателен! –  Bruno Bronosky 18.02.2017 в 16:20
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 .

    
ответ дан slm 24.09.2016 в 22:13
  • У меня были подобные симптомы, с довольно простым .bashrc-файлом (Ansible transfer failed). Я переехал .bashrc в bashrc (отключив его), и симптомы исчезли. Перемещенный код из .bashrc в .bash_profile, поскольку он уже проверяет наличие интерактивного сеанса. –  CODE-REaD 27.04.2017 в 19:07
1

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

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

alias ansible_host=192.168.1.102 ansible_ssh_transfer_method=scp

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

[Источник]

    
ответ дан Serge Stroobandt 10.06.2017 в 10:56
0

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

Шаг 1:

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

Шаг 2:

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

scp_if_ssh=True
    
ответ дан Vijender Marthi 30.03.2016 в 06:05