Используйте шеф-повара, чтобы запустить bash passwd

Мне трудно понять, как использовать chef для запуска команды bash (passwd)

Я знаю, как настроить блок ресурсов bash, но как мне его настроить, чтобы он взял переменную password = 'abc123', Пользователь, для которого я хочу сделать это adminblah для этого примера.

bash 'analytics_password' do
  code <<-EOH
    sudo passwd adminblah
  EOH
end

Я не уверен, как получить переменную пароля в этом.

2 ответа

Решение

Есть несколько способов установить пароль пользователя. Если вы хотите использовать bash ресурс вы можете сделать это:

# Backslashes are escaped because of ruby
bash 'analytics_password' do
  code <<-EOH
    echo -e "#{password}\\n#{password}\\n" | passwd adminblah
  EOH
  sensitive true
end

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

Вы также можете посмотреть на использование chpasswd вместо этого (если доступно):

bash 'analytics_password' do
  code <<-EOH
    echo "adminblah:#{password}" | chpasswd
  EOH
  sensitive true
end

В обоих вышеупомянутых случаях sensitive Свойство скрывает любой потенциальный вывод пароля в журналах Chef.

Лучший вариант, вероятно, будет смотреть на user ресурс. Это немного сложнее, так как вам нужно создать теневой хэш пароля (примеры приведены в ссылке), но его следует учитывать.

Каким-то образом я нашел это раздражающе громоздким...

Два варианта, которые пришли мне в голову:

1. Передайте pwd chpasswd который работает как:

CHPASSWD (8)

NAME chpasswd - обновлять пароли в пакетном режиме

ОПИСАНИЕ chpasswd [опции]

ОПИСАНИЕ Команда chpasswd считывает список пар имени пользователя и пароля из стандартного ввода и использует эту информацию для обновления группы существующих пользователей. Каждая строка имеет формат:

   user_name:password

Итак, ваш рецепт шеф-повара может выглядеть так:

password = 'my-secret-password'

bash 'analytics_password' do
  code <<-EOH
    sudo sh -c 'echo "adminblah:#{password}" | chpasswd'
  EOH
end

2. Используйте user ресурс

hash = `openssl passwd -1 -salt NCC #{password}`
hash = hash.gsub(/\n/, '')

user 'a user' do
  username 'adminblah'
  password hash.to_s
end

Я надеюсь, что хотя бы один из этих методов будет работать:)

С наилучшими пожеланиями, Ярек

Другие вопросы по тегам