Vagrant::Butcher sudo: нет tty и не указана программа askpass при попытке выполнить команду cat /etc/chef/client.pem

Ubuntu 10.04.1 LTS с Vagrant 1.4.3 и Vagrant::Butcher 2.1.5.

Я получаю следующую ошибку в конце «vagrant up»:

...
[2014-03-17T22:50:56+00:00] INFO: Chef Run complete in 245.448117502 seconds
[2014-03-17T22:50:56+00:00] INFO: Running report handlers
[2014-03-17T22:50:56+00:00] INFO: Report handlers complete

[Butcher] Creating /home/testuser/vagrant_test/.vagrant/butcher
[Butcher] Failed to create /home/testuser/vagrant_test/.vagrant/butcher/DEV-35-51-client.pem: Vagrant::Errors::VagrantError - The following SSH command responded with a non-zero exit status.
Vagrant assumes that this means the command failed!

cat /etc/chef/client.pem

Stdout from the command:



Stderr from the command:

sudo: no tty present and no askpass program specified
Sorry, try again.
sudo: no tty present and no askpass program specified
Sorry, try again.
sudo: no tty present and no askpass program specified
Sorry, try again.
sudo: 3 incorrect password attempts

Клиент Chef работает успешно, и все наши кулинарные книги установлены. Одним из них является кулинарная книга сообщества sudo, и я думаю, что мы удалили запись о том, что пользователю vagrant нужно выполнить cat, чтобы прочитать файл client.pem.

Кто-нибудь может сказать мне, что это может быть?

ОБНОВЛЕНИЕ:

1) Бродячий пользователь входит в группу "sudo":

$ grep sudo /etc/group
sudo:x:27:vagrant

2) Файл sudoers содержит запись, позволяющую группе «sudo» выполнять любую команду:

# This file is managed by Chef.
# Do NOT modify this file directly.

Defaults      env_reset
Defaults      secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# User privilege specification
root      ALL=(ALL:ALL) ALL
nagios    ALL=(ALL) NOPASSWD: /usr/local/nagios/libexec/


# Members of the group 'admin' may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo     ALL=(ALL:ALL) ALL

#includedir /etc/sudoers.d

person Alan    schedule 17.03.2014    source источник
comment
Итак... почему бы не сообщить об этом в плагине vagrant-butcher? github.com/cassianoleal/vagrant-butcher   -  person sethvargo    schedule 18.03.2014
comment
Группа sudo имеет доступ к sudo, но не без пароля. Ответ @tmatilai кажется точным.   -  person cassianoleal    schedule 18.03.2014


Ответы (2)


В конечном счете, это не проблема бродячих мясников; этот плагин столкнулся с проблемой только в первую очередь. Также любая последующая бродячая операция также потерпит неудачу.

Vagrant требует разрешений sudo без пароля. Кажется, что базовый блок объявил это в /etc/sudoers, который вы перезаписываете кулинарной книгой sudo.

У вас есть как минимум следующие варианты:

  1. Установите для атрибута node['authorization']['sudo']['passwordless'] значение true.
  2. Не включайте рецепт по умолчанию из кулинарной книги sudo вообще.
  3. Используйте sudo LWRP, чтобы предоставить пользователю vagrant доступ к sudo без пароля.
  4. Используйте или создайте базовый блок, который уже использует /etc/sudoers.d/.
person tmatilai    schedule 18.03.2014
comment
Не совсем уверен, почему, но я должен был сделать № 1 и № 4. - person Chris; 12.08.2014

tmatilai очень хорошо рассмотрел проблему, однако я решил опубликовать свое решение здесь для дальнейшего использования. Я нашел тот же обходной путь, который он упомянул в качестве варианта № 3, чтобы написать рецепт, добавляющий файл конфигурации sudoers.d для бродячего пользователя. Это заставило меня изменить кулинарную книгу сообщества sudo, чтобы она поддерживала параметр SETENV. В противном случае вы получите ошибку:

sudo: sorry, you are not allowed to preserve the environment

Получившийся файл называется /etc/sudoers.d/vagrant, обратите внимание, что для него требуются оба NOPASSWD и SETENV:

# This file is managed by Chef.
# Do NOT modify this file directly.

vagrant  ALL=(ALL) NOPASSWD:SETENV: /bin/

Вот изменения, которые я сделал:

Файл: sudo/recipes/default.rb

# if the node belongs to the "development" environment, create a config file
# for the vagrant user, e.g. /etc/sudoers.d/vagrant
if node.chef_environment == 'development'
  sudo 'vagrant' do
    user      'vagrant'
    runas     'ALL'  # can run as any user
    host      'ALL'  # from any Host/IP
    nopasswd  true   # prepends the runas_spec with NOPASSWD
    setenv    true   # prepends the runas_spec with SETENV
    commands  ['/bin/']  # let the user run anything in /bin/ without a password
  end
end

Файл: sudo/resources/default.rb

# add new attribute "setenv"
attribute :setenv,     :equal_to => [true, false],  :default => false

# include it in the state_attrs list
state_attrs :commands,
            :group,
            :host,
            :nopasswd,
            :setenv,
            :runas,
            :template,
            :user,
            :variables

Файл: sudo/providers/default.rb

# in render_sudoer, add setenv to the variables list
variables     :sudoer => sudoer,
              :host => new_resource.host,
              :runas => new_resource.runas,
              :nopasswd => new_resource.nopasswd,
              :setenv => new_resource.setenv,
              :commands => new_resource.commands,
              :defaults => new_resource.defaults

Файл: sudo/templates/default/sudoer.erb

# generate SETENV option in the config file entry
<% @commands.each do |command| -%>
<%= @sudoer %>  <%= @host %>=(<%= @runas %>) <%= 'NOPASSWD:' if @nopasswd %><%= 'SETENV:' if @setenv %> <%= command %>
<% end -%>
person Alan    schedule 18.03.2014