Используйте шеф-повара, чтобы запустить 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
Я надеюсь, что хотя бы один из этих методов будет работать:)
С наилучшими пожеланиями, Ярек