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 или выше.
[Источник]