ruby - 厨师创建具有公钥访问权限的用户帐户
问题描述
我正在尝试创建一个在我的食谱文件目录中查找并在目录中为每个公钥创建一个用户的食谱。
cookbooks/users/files/default
目录包含:
id_rsa_123456789.pub
id_rsa_234567890.pub
基于这两个文件,我想创建 2 个名为的用户帐户123456789
,234567890
并将其公钥分别放在 /home/$USER/.ssh/ 中。
cookbooks/users/attributes/default.rb
包含:
default['users']['pub_keys'] = {}
Dir.foreach('../files/default/') do |pub_key|
if pub_key =~ /\d.pub/
default['users']['pub_keys'][pub_key] = pub_key.match(/[0-9]{9}/)
end
end
此代码应创建以下内容:
default['users']['pub_keys'] = {'id_rsa_123456789.pub' => '123456789', 'id_rsa_234567890.pub' => '234567890' }
cookbooks/users/recipes/default.rb
包含:
node['users']['pub_keys'].each do |pub_key, sso|
user sso do
action :create
group 'sudoers'
home "/home/#{sso}"
end
directory "/home/#{sso}/.ssh" do
action :create
end
cookbook_file "/home/#{sso}/.ssh/#{pub_key}" do
source pub_key
owner sso
group sso
mode '0400'
action :create
end
end
我认为我的食谱无法读取我的哈希变量,但我不确定为什么或如何修复。
Relevant File Content:
----------------------
/tmp/kitchen/cache/cookbooks/users/recipes/default.rb:
1: #
2: # Cookbook:: users
3: # Recipe:: default
4: #
5:
6:
7>> node['users']['pub_keys'].each do |pub_key, sso|
8: user sso do
9: action :create
10: group 'sudoers'
11: home "/home/#{sso}"
13: directory "/home/#{sso}/.ssh" do
14: action :create
15: end
16: cookbook_file "/home/#{sso}/.ssh/#{pub_key}" do
System Info:
------------
chef_version=14.11.21
platform=centos
platform_version=7.6.1810
ruby=ruby 2.5.3p105 (2018-10-18 revision 65156) [x86_64-linux]
program_name=/opt/chef/bin/chef-solo
executable=/opt/chef/bin/chef-solo
Running handlers:
[2019-03-11T19:28:18+00:00] ERROR: Running exception handlers
Running handlers complete
[2019-03-11T19:28:18+00:00] ERROR: Exception handlers complete
Chef Client failed. 0 resources updated in 00 seconds
[2019-03-11T19:28:18+00:00] FATAL: Stacktrace dumped to /tmp/kitchen/cache/chef-stacktrace.out
[2019-03-11T19:28:18+00:00] FATAL: Please provide the contents of the stacktrace.out file if you file a bug report
[2019-03-11T19:28:18+00:00] FATAL: NoMethodError: undefined method `[]' for nil:NilClass
解决方案
您是否尝试过手动设置属性?无论如何,我认为以“Dir.foreach”开头的 Ruby 代码不起作用并且违反了厨师的最佳实践。
推荐阅读
- c# - 未找到 Xamarin 表单命令
- python-3.x - 使用 python 3.5 构建项目,而系统 python 是 3.8
- python-2.7 - ubuntu 16->18 更新后日志中的生产/python 错误的 CKAN 内部服务器错误 (500)
- java - 如何使用 JpaRepository,Spring-boot 在方法中查找没有参数的对象列表
- python - 元组Python中的四舍五入
- javascript - Javascript/React 中的搜索功能
- windows - 如何使用Junit或java命令在windows中使用cmd中的maven命令以自定义顺序运行黄瓜功能文件
- python - 将自定义聚合函数应用于 pandas DataFrame
- javascript - 几个函数的 PHP 和 CryptoJS 输出不匹配
- reactjs - Redux:为什么不推荐使用来自商店的调度